From 5840ab6f55cc5a1d248dff41d1284e4c48bd1054 Mon Sep 17 00:00:00 2001 From: "designer (Designer)" <> Date: Wed, 12 Jun 2024 15:13:52 +0200 Subject: [PATCH 01/74] fix AI metrics --- AIBySimplicite.json | 2 +- module-info.json | 7 +++-- .../ObjectExternal/AIMetricsChat/SCRIPT.js | 28 +++++++++++++++---- .../ObjectExternal/AIMetricsChat/STYLES.less | 3 ++ .../commons/AIBySimplicite/AiMetrics.java | 3 ++ 5 files changed, 34 insertions(+), 9 deletions(-) diff --git a/AIBySimplicite.json b/AIBySimplicite.json index 5d585f4..6b6d3df 100644 --- a/AIBySimplicite.json +++ b/AIBySimplicite.json @@ -7,7 +7,7 @@ "mdl_version": "0.11", "mdl_type": "T", "mdl_icon": null, - "mdl_url": "{\n \"origin\": {\"uri\": \"https://github.com/simplicitesoftware/module_ai.git\"},\n \"type\": \"git\"\n}", + "mdl_url": "{\n \"origin\": {\n \"uri\": \"https://github.com/simplicitesoftware/module_ai.git\",\n \"branch\": \"6\"\n },\n \"type\": \"git\"\n}", "mdl_comment": "### Introduction\nExploratory module on the use of AI in Simplicite\n\n### Import\nTo import this module:\n\nCreate a module named `AIBySimplicite`\nSet the settings as:\n```json\n{\n\t\"origin\": {\n\t\t\"uri\": \"https://github.com/simplicitesoftware/module_ai.git\"\n\t},\n\t\"type\": \"git\"\n}\n```\nClick on the Import module button\n### Configure\nTo configure the ia connection, use the `Configuring the wizard` object in `AI assistant` domain.\n\nSelect the model (LLM) you wish to use, configure the parameters and the url of your API. \n\n
\n LLM spesific configuration exemple<\/summary>\n\n#### OpenAI:\n```json\n{\n 'model':'',\n 'OpenAI-Project': \"\", // Optional\n 'OpenAI-Organization': \"\", //Optional\n 'hist_depth' : 3,\n 'code_max_token' : 2000,\n 'default_max_token':1500,\n 'trigger':''\n}\n```\n#### Mistral \n```json\n{\n 'hist_depth' : 3,\n 'code_max_token' : 2000,\n 'default_max_token':1500,\n 'trigger':''\n}\n```\n<\/details>\n\n\n
\n Parrameters details<\/summary>\n\n##### hist_depth\nDefines the number of messages in the history used for the context.\nThe greater this number, the more tokens the request uses, but the more relevant is the response. \n##### max_token\n*optional* \nLimits the number of tokens in the ia response\n###### default_max_token\nMaximum number of tokens in a usual context.\n###### code_max_token\nMaximum number of tokens for thecnical calls.\n##### trigger\nTo define a trigger for ia calls in fields (under development)\n\n<\/details> \n \n \nUse the `Activate` action to save your settings and enter your API key if required.\n\n### wizzard\n#### Module generation\nUse AI to co-create or update a module based on your business needs\n`Module generation` in `AI assistant` domain.\n\n#### Data generation\nUse AI to generate test data for a module.\n`Data generation` in `AI assistant` domain.\n\n#### Business chatbot\nA shortcut to a chatbot contextualized according to the form on which it is opened.\nThe user must have `AI_BUSINESS` rights.\nThe `Personal data`, `Confidential data` and `Intimate` fields are not sent to the AI.\n\n\n#### Metrics\nGenerating AI graphs on a module's data\nIn a `view` add an `external page` of source `External object`: `AIMetricsChat?module=`" }, "links": [ diff --git a/module-info.json b/module-info.json index cd4c9ce..ded6d93 100644 --- a/module-info.json +++ b/module-info.json @@ -1,9 +1,12 @@ { - "date": "2024-06-10 13:08:54", + "date": "2024-06-12 14:50:29", "name": "AIBySimplicite", "format": "json", "files": ["AIBySimplicite.json"], - "repository": {"origin": {"uri": "https://github.com/simplicitesoftware/module_ai.git"}}, + "repository": {"origin": { + "uri": "https://github.com/simplicitesoftware/module_ai.git", + "branch": "6" + }}, "version": "0.11", "platform": "6.0.12" } \ No newline at end of file diff --git a/resources/ObjectExternal/AIMetricsChat/SCRIPT.js b/resources/ObjectExternal/AIMetricsChat/SCRIPT.js index c07cc1f..2d8ef87 100644 --- a/resources/ObjectExternal/AIMetricsChat/SCRIPT.js +++ b/resources/ObjectExternal/AIMetricsChat/SCRIPT.js @@ -46,7 +46,11 @@ function sendMetricsMessage(){ $('#metrics_messages').html(''); canvas = $('canvas'); canvas.each(function(canva) { - eval(canvas[canva].id+".remove();"); + let id = canvas[canva].id; + let graph = Chart.getChart(id); + if(graph) graph.destroy(); + + }); $('#ia_html').html(''); input = $('#metrics_user_text').val(); @@ -71,6 +75,7 @@ function sendMetricsMessage(){ } if(botResponse.error !=null || ((botResponse.js == null && (botResponse.html == null || !botResponse.html.includes("script"))))){ $('#metrics_messages .bot-messages:last .msg').text("Sorry, I can't understand your request. Please try again."); + return; } if(botResponse.text == null){ @@ -78,11 +83,22 @@ function sendMetricsMessage(){ } $('#metrics_messages .bot-messages:last .msg').text(botResponse.text.replace(/\\n/g, "
")); $('#ia_html').html(botResponse.html); - try { - eval(botResponse.js + "\n" + botResponse.function); - }catch(e){ - $('#metrics_messages .bot-messages:last .msg').text("Sorry, I can't understand your request. Please try again."); + + if(botResponse.js != ""){ + try { + eval(botResponse.js); + //check if function is auto call + if(botResponse.js.indexOf(botResponse.function) == -1) { + eval(botResponse.function); + } + + }catch(e){ + $('#metrics_messages .bot-messages:last .msg').text("Sorry, I can't understand your request. Please try again."); + } } + // Définir les options globales pour Chart.js + Chart.defaults.responsive = true; + Chart.defaults.maintainAspectRatio = false; }); @@ -99,4 +115,4 @@ function resetChat(){ $('#metrics_messages').html(''); reOpenChat(); -} \ No newline at end of file +} diff --git a/resources/ObjectExternal/AIMetricsChat/STYLES.less b/resources/ObjectExternal/AIMetricsChat/STYLES.less index 0712fa1..a2b43fa 100644 --- a/resources/ObjectExternal/AIMetricsChat/STYLES.less +++ b/resources/ObjectExternal/AIMetricsChat/STYLES.less @@ -34,5 +34,8 @@ #metrics_cancel_button{ display: none; } + canvas{ + max-sheight: 100% + } } \ No newline at end of file diff --git a/src/com/simplicite/commons/AIBySimplicite/AiMetrics.java b/src/com/simplicite/commons/AIBySimplicite/AiMetrics.java index 22a71f8..bbd31b8 100644 --- a/src/com/simplicite/commons/AIBySimplicite/AiMetrics.java +++ b/src/com/simplicite/commons/AIBySimplicite/AiMetrics.java @@ -142,6 +142,9 @@ public static String cleanJs(String js){ String replacement = matcher.group(1)+matcher.group(2).replace(".","__")+matcher.group(3); js = js.replace(matcher.group(0),replacement); } + // check if listener on Dom loaded + regex = "document\\.addEventListener\\('DOMContentLoaded',\\s*function\\(\\)\\s*\\{((?:\\s*\\S*\\s*)*)\\}\\);"; + js = js.replaceAll(regex, "$1"); regex = "(\\w*) ?=.*\\.createElement\\('canvas'\\)"; pattern = Pattern.compile(regex); From 6038442fecfbed015df2c4a28a4277988c7c02be Mon Sep 17 00:00:00 2001 From: "designer (Designer)" <> Date: Mon, 17 Jun 2024 13:47:13 +0200 Subject: [PATCH 02/74] Use ace editor in workflow --- AIBySimplicite.json | 256 +++++++++++++++++- README.md | 2 + files/Model/Model-AIModuleCreate.png | Bin 78260 -> 90424 bytes files/Model/Model-AIModuleCreate.svg | 2 +- module-info.json | 9 +- pom.xml | 2 +- .../commons/AIBySimplicite/AITools.java | 6 +- .../workflows/AIBySimplicite/AIGenData.java | 27 +- .../AIBySimplicite/AIModuleCreate.java | 63 ++++- 9 files changed, 335 insertions(+), 32 deletions(-) diff --git a/AIBySimplicite.json b/AIBySimplicite.json index 6b6d3df..5a226b4 100644 --- a/AIBySimplicite.json +++ b/AIBySimplicite.json @@ -7,7 +7,7 @@ "mdl_version": "0.11", "mdl_type": "T", "mdl_icon": null, - "mdl_url": "{\n \"origin\": {\n \"uri\": \"https://github.com/simplicitesoftware/module_ai.git\",\n \"branch\": \"6\"\n },\n \"type\": \"git\"\n}", + "mdl_url": "{\n \"origin\": {\"uri\": \"https://github.com/simplicitesoftware/module_ai.git\"},\n \"type\": \"git\",\n \"branch\": \"6\"\n}", "mdl_comment": "### Introduction\nExploratory module on the use of AI in Simplicite\n\n### Import\nTo import this module:\n\nCreate a module named `AIBySimplicite`\nSet the settings as:\n```json\n{\n\t\"origin\": {\n\t\t\"uri\": \"https://github.com/simplicitesoftware/module_ai.git\"\n\t},\n\t\"type\": \"git\"\n}\n```\nClick on the Import module button\n### Configure\nTo configure the ia connection, use the `Configuring the wizard` object in `AI assistant` domain.\n\nSelect the model (LLM) you wish to use, configure the parameters and the url of your API. \n\n
\n LLM spesific configuration exemple<\/summary>\n\n#### OpenAI:\n```json\n{\n 'model':'',\n 'OpenAI-Project': \"\", // Optional\n 'OpenAI-Organization': \"\", //Optional\n 'hist_depth' : 3,\n 'code_max_token' : 2000,\n 'default_max_token':1500,\n 'trigger':''\n}\n```\n#### Mistral \n```json\n{\n 'hist_depth' : 3,\n 'code_max_token' : 2000,\n 'default_max_token':1500,\n 'trigger':''\n}\n```\n<\/details>\n\n\n
\n Parrameters details<\/summary>\n\n##### hist_depth\nDefines the number of messages in the history used for the context.\nThe greater this number, the more tokens the request uses, but the more relevant is the response. \n##### max_token\n*optional* \nLimits the number of tokens in the ia response\n###### default_max_token\nMaximum number of tokens in a usual context.\n###### code_max_token\nMaximum number of tokens for thecnical calls.\n##### trigger\nTo define a trigger for ia calls in fields (under development)\n\n<\/details> \n \n \nUse the `Activate` action to save your settings and enter your API key if required.\n\n### wizzard\n#### Module generation\nUse AI to co-create or update a module based on your business needs\n`Module generation` in `AI assistant` domain.\n\n#### Data generation\nUse AI to generate test data for a module.\n`Data generation` in `AI assistant` domain.\n\n#### Business chatbot\nA shortcut to a chatbot contextualized according to the form on which it is opened.\nThe user must have `AI_BUSINESS` rights.\nThe `Personal data`, `Confidential data` and `Intimate` fields are not sent to the AI.\n\n\n#### Metrics\nGenerating AI graphs on a module's data\nIn a `view` add an `external page` of source `External object`: `AIMetricsChat?module=`" }, "links": [ @@ -2637,7 +2637,7 @@ }, "pcs_max_duration": null, "pcs_duration_unit": "D", - "pcs_persitant": false, + "pcs_persitant": null, "pcs_persist_depth": null, "pcs_alert_id__alt_name": null, "pcs_compensate_id__pcs_name": null, @@ -2795,6 +2795,25 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, + { + "object": "BPMActivity", + "userkey": "AIModuleCreate~AIC-NC-END", + "item": { + "acy_process_id__pcs_name": "AIModuleCreate", + "acy_step": "AIC-NC-END", + "acy_name": "needConfig", + "acy_comment": null, + "acy_type": "E", + "acy_posx": null, + "acy_posy": null, + "acy_reversible": "N", + "acy_max_duration": null, + "acy_duration_unit": null, + "acy_alert_id__alt_name": null, + "acy_user_dlg": true, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "BPMActivity", "userkey": "AIModuleCreate~AIC_0005", @@ -3041,6 +3060,25 @@ "acy_user_dlg": true, "row_module_id__mdl_name": "AIBySimplicite" } + }, + { + "object": "BPMActivity", + "userkey": "AIModuleCreate~AIC_CHECK_CONF", + "item": { + "acy_process_id__pcs_name": "AIModuleCreate", + "acy_step": "AIC_CHECK_CONF", + "acy_name": "CheckAIConfig", + "acy_comment": null, + "acy_type": "I", + "acy_posx": null, + "acy_posy": null, + "acy_reversible": "N", + "acy_max_duration": null, + "acy_duration_unit": null, + "acy_alert_id__alt_name": null, + "acy_user_dlg": false, + "row_module_id__mdl_name": "AIBySimplicite" + } } ] }, @@ -3147,15 +3185,15 @@ }, { "object": "BPMTransition", - "userkey": "AIModuleCreate~AIModuleCreate~AIC-BEG~AIModuleCreate~AIC_0005", + "userkey": "AIModuleCreate~AIModuleCreate~AIC-BEG~AIModuleCreate~AIC_CHECK_CONF", "item": { "trs_process_id__pcs_name": "AIModuleCreate", "trs_from_id__acy_process_id__pcs_name": "AIModuleCreate", "trs_from_id__acy_step": "AIC-BEG", "trs_from_id__acy_name": "Begin", "trs_to_id__acy_process_id__pcs_name": "AIModuleCreate", - "trs_to_id__acy_step": "AIC_0005", - "trs_to_id__acy_name": "Choice", + "trs_to_id__acy_step": "AIC_CHECK_CONF", + "trs_to_id__acy_name": "CheckAIConfig", "trs_name": null, "trs_action_id__act_name": null, "trs_condition": null, @@ -3429,6 +3467,44 @@ "trs_alert_id__alt_name": null, "row_module_id__mdl_name": "AIBySimplicite" } + }, + { + "object": "BPMTransition", + "userkey": "AIModuleCreate~AIModuleCreate~AIC_CHECK_CONF~AIModuleCreate~AIC-NC-END", + "item": { + "trs_process_id__pcs_name": "AIModuleCreate", + "trs_from_id__acy_process_id__pcs_name": "AIModuleCreate", + "trs_from_id__acy_step": "AIC_CHECK_CONF", + "trs_from_id__acy_name": "CheckAIConfig", + "trs_to_id__acy_process_id__pcs_name": "AIModuleCreate", + "trs_to_id__acy_step": "AIC-NC-END", + "trs_to_id__acy_name": "needConfig", + "trs_name": null, + "trs_action_id__act_name": null, + "trs_condition": "1", + "trs_callback": null, + "trs_alert_id__alt_name": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "BPMTransition", + "userkey": "AIModuleCreate~AIModuleCreate~AIC_CHECK_CONF~AIModuleCreate~AIC_0005", + "item": { + "trs_process_id__pcs_name": "AIModuleCreate", + "trs_from_id__acy_process_id__pcs_name": "AIModuleCreate", + "trs_from_id__acy_step": "AIC_CHECK_CONF", + "trs_from_id__acy_name": "CheckAIConfig", + "trs_to_id__acy_process_id__pcs_name": "AIModuleCreate", + "trs_to_id__acy_step": "AIC_0005", + "trs_to_id__acy_name": "Choice", + "trs_name": null, + "trs_action_id__act_name": null, + "trs_condition": "0", + "trs_callback": null, + "trs_alert_id__alt_name": null, + "row_module_id__mdl_name": "AIBySimplicite" + } } ] }, @@ -3573,6 +3649,21 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, + { + "object": "BPMData", + "userkey": "AIModuleCreate~AIC-NC-END~Forward~Page", + "item": { + "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", + "dta_activity_id__acy_step": "AIC-NC-END", + "dta_activity_id__acy_name": "needConfig", + "dta_group": "Forward", + "dta_name": "Page", + "dta_order": 1, + "dta_value": "[EXPR:HTMLTool.getListURL(\"AiSettings\",\"\")]", + "dta_field_id__fld_name": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "BPMData", "userkey": "AIModuleCreate~AIC_0005~Data~AREA=1", @@ -3992,6 +4083,21 @@ "dta_field_id__fld_name": null, "row_module_id__mdl_name": "AIBySimplicite" } + }, + { + "object": "BPMData", + "userkey": "AIModuleCreate~AIC_CHECK_CONF~Service~Name", + "item": { + "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", + "dta_activity_id__acy_step": "AIC_CHECK_CONF", + "dta_activity_id__acy_name": "CheckAIConfig", + "dta_group": "Service", + "dta_name": "Name", + "dta_order": 1, + "dta_value": "checkConf", + "dta_field_id__fld_name": null, + "row_module_id__mdl_name": "AIBySimplicite" + } } ] }, @@ -4051,6 +4157,22 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, + { + "object": "BPMGrantActivity", + "userkey": "ADMIN~AIModuleCreate~AIC-NC-END", + "item": { + "gta_group_id__grp_name": "ADMIN", + "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", + "gta_activity_id__acy_step": "AIC-NC-END", + "gta_activity_id__acy_name": "needConfig", + "gta_grant": [ + "R", + "W", + "C" + ], + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "BPMGrantActivity", "userkey": "ADMIN~AIModuleCreate~AIC_0005", @@ -4195,6 +4317,22 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, + { + "object": "BPMGrantActivity", + "userkey": "ADMIN~AIModuleCreate~AIC_CHECK_CONF", + "item": { + "gta_group_id__grp_name": "ADMIN", + "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", + "gta_activity_id__acy_step": "AIC_CHECK_CONF", + "gta_activity_id__acy_name": "CheckAIConfig", + "gta_grant": [ + "R", + "W", + "C" + ], + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "BPMGrantActivity", "userkey": "AI_DESIGNER~AIGenData~GGD_0100", @@ -4243,6 +4381,22 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, + { + "object": "BPMGrantActivity", + "userkey": "AI_DESIGNER~AIModuleCreate~AIC-NC-END", + "item": { + "gta_group_id__grp_name": "AI_DESIGNER", + "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", + "gta_activity_id__acy_step": "AIC-NC-END", + "gta_activity_id__acy_name": "needConfig", + "gta_grant": [ + "R", + "W", + "C" + ], + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "BPMGrantActivity", "userkey": "AI_DESIGNER~AIModuleCreate~AIC_0005", @@ -4381,6 +4535,22 @@ ], "row_module_id__mdl_name": "AIBySimplicite" } + }, + { + "object": "BPMGrantActivity", + "userkey": "AI_DESIGNER~AIModuleCreate~AIC_CHECK_CONF", + "item": { + "gta_group_id__grp_name": "AI_DESIGNER", + "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", + "gta_activity_id__acy_step": "AIC_CHECK_CONF", + "gta_activity_id__acy_name": "CheckAIConfig", + "gta_grant": [ + "R", + "W", + "C" + ], + "row_module_id__mdl_name": "AIBySimplicite" + } } ] }, @@ -7271,6 +7441,82 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, + { + "object": "TranslateActivity", + "userkey": "BPMActivity(AIModuleCreate AIC-NC-END)~ENU", + "item": { + "tsl_object": { + "item": { + "acy_process_id__pcs_name": "AIModuleCreate", + "acy_step": "AIC-NC-END" + }, + "icon": "img/system/activity", + "label": "Activity", + "userkeylabel": "AIModuleCreate AIC-NC-END", + "object": "BPMActivity" + }, + "tsl_lang": "ENU", + "tsl_value": "Please configure your AI Assistant", + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "TranslateActivity", + "userkey": "BPMActivity(AIModuleCreate AIC-NC-END)~FRA", + "item": { + "tsl_object": { + "item": { + "acy_process_id__pcs_name": "AIModuleCreate", + "acy_step": "AIC-NC-END" + }, + "icon": "img/system/activity", + "label": "Activity", + "userkeylabel": "AIModuleCreate AIC-NC-END", + "object": "BPMActivity" + }, + "tsl_lang": "FRA", + "tsl_value": "Veuillez configurer votre assistant AI", + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "TranslateActivity", + "userkey": "BPMActivity(AIModuleCreate AIC_CHECK_CONF)~ENU", + "item": { + "tsl_object": { + "item": { + "acy_process_id__pcs_name": "AIModuleCreate", + "acy_step": "AIC_CHECK_CONF" + }, + "icon": "img/system/activity", + "label": "Activity", + "userkeylabel": "AIModuleCreate AIC_CHECK_CONF", + "object": "BPMActivity" + }, + "tsl_lang": "ENU", + "tsl_value": "Check AI configuration", + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "TranslateActivity", + "userkey": "BPMActivity(AIModuleCreate AIC_CHECK_CONF)~FRA", + "item": { + "tsl_object": { + "item": { + "acy_process_id__pcs_name": "AIModuleCreate", + "acy_step": "AIC_CHECK_CONF" + }, + "icon": "img/system/activity", + "label": "Activity", + "userkeylabel": "AIModuleCreate AIC_CHECK_CONF", + "object": "BPMActivity" + }, + "tsl_lang": "FRA", + "tsl_value": "Vérifier la configuration de l'IA", + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "TranslateActivity", "userkey": "BPMActivity(AIGenData GGD-END)~ENU", diff --git a/README.md b/README.md index 41e30f7..a9d4418 100644 --- a/README.md +++ b/README.md @@ -146,6 +146,7 @@ Auomatic model generation process * `Begin`: * `End`: +* `needConfig`: * `Choice`: * `CreateModule`: * `TranslateDomain`: @@ -159,6 +160,7 @@ Auomatic model generation process * `AI`: AI for modeling * `Generation`: Module generation based on ia feedback * `RemoveModule`: Remove module +* `CheckAIConfig`: `AIChatBot` external object definition -------------------------------------- diff --git a/files/Model/Model-AIModuleCreate.png b/files/Model/Model-AIModuleCreate.png index 6f1dcf7f6b09ce0c64bff08a0866c8f63cfe6fec..9f4c6a9efa35158a6811a6a560f326dbd9b4c077 100644 GIT binary patch literal 90424 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%0An%tEk-i5lbx0IEhv#199N=$_kJ?_f6%&y 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 OLs{X4e9=?W5B~$u!bHLV literal 78260 zcmeFYcQ~BU*ESkLLWIPO-ohA07v1QI(HULzXdybIixMIj(MA`eONicEwCG(BErjST zI*IOk{ND4v=R4Q=_ng1Zxvp_}rab%Ed#|$By4StX8b}4=2Q&}v+_^)nq=?YEa|ai8 z=gwVAf_uOxuDgw3;2(~gmcsKprNeZackVFWQ9?Y^@izUFem_M=?q_Z0ZXdiY)-5TI zfGybEjCA?qi>VRvhZm_P-4I5_$e` zyJf!ta~{OrA&iw#eVm2uM2J*jFsf$isYK3Y73O_Bu+p8hx0jx-m^r%1^jpbovB2 zUYksD()=6|1_lP!gplQ}B-T`GdjjWER=!!IF#a_Vp>5Rg+eMVo0)m?p=nGDGeb+YO zF*oa>01pqz;rOXI_tOj%*im(w0Thmhn-H(K!7|DBnNSdcj8=T`U1TcARJXOg@=QD- zA%RVEbQHWi^7 z%%o+p^C0Q#NNgv(NVCG6v{COW@*6!}ukFXXD#knJF|YBrQ1#`luch^POwbLP!(C_V z88P;y4fmSg{L>4Li;dMd8q3MaWhYB`-OMpvs>mb*M<--hNLnVz$gV)=U&+q=+;iD< zO{`z7lfH(*Y#v~-<1=wlwk^IxpusDx1 zU+z$Sivq2Y{N7Z`lES_2RZ^CSHLkw*Wm~H4=+VpfSZnwR`4jEEy@jeLxz1Ek#|iEd z$KPe`3Se+}LsH%bTLd3Q_%mZg1=I`|kTcjFw@3!J2lD#^Hay{Y;4Vi?AaykH(ZN`t zY4Ff1W_?~f5Eo(nb>%iD4jX*2*ZSnkmoLg%E1z=N#DbqcTVz4tE&^*KeB_mpi08+u zu>f&^3D^DR?P+i^o5`==Yq==jpL$;o?U6S{k35$2bk}Wsnz#2@sL5?D)ds@Nt)>(a zowJc=Aeok*y}sxQcqU?I8MrN#2!k9h6SKzD;mMVeK3}01U1+s?PGciYM<{VeN`(r0|7A3%MMuYM^pjsY49De2K) zNMZiH^Wo+P#NLt1&anKKQxCAiA4YQ(mM_Q`a@!3^-6Cnmev{chxOYMmV&vSct0t6` zXHH6%9@f60BwKJu1tNHe)30PET1f^Xpuxe!*G)~ATP0Vm&4#~X67oS~6@OUG)w^!R zY&kAFy(1c}7_6xBhQbbno#!->c7qIS}I_H^6HkPbaL=GzimYA5>J2KKU zQ1wziEyFRVdg7by=ut2ynPzaRi(gFb0gqY9KFridL=q6WEniQ7DwoF#^^df!*lTzfoBy zy;T9gf7!CZ85D5MA!Z5SJ`qwlwU|5GY97v2_Ug((&yzA1Se#c*yahXq_|AZ=VipE4 z*(ki;4kgAPcnGAGqJpWeuC5S@|6*r`Zt|c?0DO3>eraQe~G)%CoDDR18pWp^=kuWejzIJ(^Xnx|c3^5OQaRBD()ieF%KNBH;lF+ zle@l|PupX6O+9Jn@;m>QFGNbQ+%gY=8G5fY&&vP$j56G%dt;-~ri}~^PJACHlMCoF zO;jv?tjue|5EZ1vkqUy}sddehoOGtvXI7K2ia&%|R^&mD8)lqw;DAZ_%&AWb+K&Qus8e)Y-p*-Iny(fCvbnm|M!&Bl^^}AN0l>Hg|MARH zB;pN1U}7l9INB|3?L5Ja-@Q|VoOq_{%?KaZf*OwQS4ob7;A8@`@{{kPS8AifYiEJY zqiz)sR&)2` z5Kbr-E02AP8YA$QNWcqL1V%vAbA7}Meg<5L7T&6^l@j!^B5*Luj9D2#9|NvFzU|p( zEM7E=3M5G8cCa|s0Z7neU~lk9_*bDWTm~RQyg0yMV+9Q;2t(ciS1z&auprC6I7P-- zK&ylD`YII}@oul)75~RldWVPQkw}ut%F0*_Cg{fx9Vja+L`urE`Tu78>hLcG1#RE6 zW%&S;d_B>uD>F>W`5rLH)YMc(C8ca^XaD;)&yRq==yW$}e}HMLAbbsX6{RaEEW};S zTYM3ziGu+0HM%=23rh)qg> z3GqVSiohE#cE9qy-e)xSyXwM$D-@F*e&c-dyW^2mr<%ww9nN*Aq-67CIms$iuauy6 zoD0|z>rKMRcX)nKz}JR)Kmk)RK#MH+fnWNckeg;6i8=73#jte!bs|i{i)=E3in(vR zts0T~%8G&zRzP5VeSIA3h|UlcXm;v>(Gy=lR^J8Isg<%c@gh+cRWk`#I#HK9@9q(| z&+V<}*j{{&;*i!O;rVG8lKn2!;%BvO@6eDg3St52E4Q_^RYrn9AU0S9>REaEXFvh@ zbiK;?p&HUS81Ql=y;1}>C+9oWuwP%jcr!At1pn~7xx(+-XE;dmp1V$-)qQ@T`@-Z? z9--fL;$DS!$4_f_5j?SBA-%xgTCiZ}SIZT5RK zLOqH1WoexF6TjnU#{1HgDY=!bMO_Lv|46$RL>Rp0T<#)Cc-Iyu zY+iPS3n&!Oft5THS2yM4p@uoktiFpvN+F4UU`ebj9Q~;%)KTazaH>%I26-?B-Fy60 zUj4Y*f}3r1b(KTO^WW~T)61iggYB|b3+DsV`eGjaW!bd3O_zFF$}NvUI^p}j@1Uws zqs?!;9#ZoohI%oG7u+yIjg@=~@ba;_yc&&*`Qc*_!5zSz-C?XG01;5)Sni^Wsfw7{ z_?z|hq9=GU6h3_ym6^Sf2$SmHcvaUbFB(<$7GNnh@J0u23eeSemG3GD#0tU`!hFtB z327ZC1xw0?k;Z@jOFbfw`|-|d$P_Li;wcU{W%rCYgfZ?NgdY-@(}f6tSuC-`#{48z z$sUqP^SC986})_^{Ll1r(t|VG1Tb|WrZ=2|jGN_9d|4wJ8T<(wQaa+z3VI5-qkUh- zAOhHLH4S$%xe&xa#C3Y~$Bka4@>Q$F5vR8NbTYB;8K@k5Iim0+(%gg%I&g&2#yQ#s z64ZE`e>ld3P<6}&wR%PZp`Zxu&@{uA^e=>*ZiIMdT{*t6i#<9n(rS% zK_gPSCWY!1tGm!@D&RDlNX=G4rtk?7q&VEvVw#fzITmD8xv_ZK$d;77dw!k)8#1(R za*<=^kvUYKy4VD=i&#bwxX`xV|2&WsSN<7>^$i#_;vbA&8^38(k#^R9INNojn`m((%UFj_zRPz`4@VD2V zI6z|f<2Et$r>qKsK6U{-*IVXSK|l;A58P+^2)MWggnOzIc@cl-e+venZRYf*cY$xe zu>vQguz8X??x@0BO#H^Sc5OJ`|A{LwLT+RCoHTtUP`EKLc<+w*Bo?n7m>r1cP=c4R zlK@z3q`P365-tuD7>QApLJk+|B6us*2f&mA0T*$}(tQO?`4Vu22Sk)!tT>?G4*%bN zxLE)$t%}L1dFI_BWh`5HrqbXI_hiv>BLDh zQk1A0#LIeBNq&EaM-I_Q3ZMdR~y!VJ9@-}^| z9N_tIQfhqxNO_A<2EO>|87?b?(c;iEh+bfFwqon8Eb*fE>^&iL#}^+bLfb@(E=uuV zq)9;ydY8=#xYyq$c#4B9$R1m+bZQ%`hGgh6;eei!0{$5-_D+{6DCPmZ_mUSnMU*iI zGV4LVj7fX_?d$B$wAR}5G##RAS7V59GW=i_c|Urj)?$YVMnNf#A-n(3ks_?3hoz7} zxn4LoglaWJGv4KdU_=EMbE~`tS6x5l`EdI9eB7gmGs%A1%c+*`P(3QbKXnPaE2qmd zH^zdqUK7zVNG$AEF&<#$;2o@wm>TTUjtQ}DIg&N*nVjG9gL-{*|$YiXfzD@zxfyZo&hBhgg zj-IHPZZ7P`yEpyK;k0zB{gMcRK?avk8JKl0{fKqihqtPf z0WP{i^PJ^V&{pO4?XHsLQU0#r7*A1+U6;ksVZu|D3-8Oy1@x5gY(+tDP_wRr%|N$N zcATYxmkPnQpd~s3E9EC>hSPF&t{7L`uu&xp=!EsHP8h|MOYtemSg%W58r6JEXHE<6 zJD~^fPazNV-}HXUfpU_Fx&)3OjHfwBMx4qQn|Da)sv9(RB)x;peJJJ@I)dXXV;DV@ z2v|dA??3T-8^(}YI(#~E->IjI@+Dn+)s$3X7s~2E{N;r{FMO;%aGGNX94`|IY*^>( zo~oHO2;&)Z%#D-mvj!suD~jPhwWX(}FK`36T`jf@X+2*wK3xq#JhY_=b1f=7m?#zd zd`RbHm@G(nJu`%MJHqa>vSfo2=lzjdLWVVm>#?%`SgGXMD-27Xwya2=wa$mdfev|= z36*4kcy<3dBM$hnw?hrFdTEV$D>R;N{xGe}-2ES3BI89rt9YZ0K3|1%j&gv%yT`9H z*7H-Y7v$G}E{Wfz&;BTrcm>r#@vp}xZe3EQFThsvBv+vV0^oEpkLU5MY6&5oU0oBG z34z>tT;Q+M)R`ylG46W*pR~2(vA*f(*BTxo|=akmTg`;a^b~w z^p8^=W0!CE^?!fbW8&h10YnW7g%)IyizM=q(z?ZW^dvR&XoME@W+m+x$;mIV%9g%^8Q1BTJMHbwBoBL|w9hyO{)%H> zdzd-wDPLC94B>GLz982t(SPq{-TY2{;eyO--Ur6he5?iJAd^ki1slB);Scb;jQx9m zA^>zn$^9R%5hWAewQ~`DOi6|L&@-=;Y=cVtjzeLp5})KXsQ(2FhW4S z7fdj*PX?MAi=A(=qGY;X_jefXBW>+;2`f3TZ~h$~52DOeN0hNiHZhMMWS6aNy()6O z5UR86jb*9_k_QYHTWqSNq@=79sYzzZpuAz<55&w4faE*%0;_6RSs07H_UkM)gvA@P zFiqCi8;+=Ywe&U0?ygMx>+;ml6c-yCsqaROWnh;tD4QNCTGaFe#tOt=g*)njX^9A6PpRF-! z?A~EGFQE|-nbxgF2vcW}9>i|82ik!jDaBs3I(iD_E$@7|6UE)9>av)zTA|w=`DQ*dH#ac=0}2I0NXc@u5YN-}6+q!u!11iOD>*4y zNZ=RXT@s)9sLTW9G$3j`Da;_wY22$+ZRT2WcaKa|!&l!ldgAob+H=msnB{!+som1H z9RI)O2Jfwd{HJbfs#aE3-sEH>w%sjBLsvjBatXMGgBZ$xtU+0%vF54kBE2G@+49`> z_sC5O?4%$`rRVg|cRY!ghQ=m05Ig#@^i!ic4(wDT4f~=|v(#&Bu&zsl5dJ$~Vl7#5 zAXE*G1295?&W;VG^4=l*>JUo@Ze92o*=tqnn?`rReW|vqh7F( zUaL_v>c8y)c|~zWFFnV3IhWJAyTrwTM%w!M*MSuAm=k& z&D*T}eR@Bu91qSYp#jU^RW;ASpMRpWP8*dvt#o?qjK6n>epW)BiP1U*fb_4H?dE(2 z(o=*TX)3F#m_F1h;mNHatoIdBTw$J!Yy4qhUsX5F z1ZNXdnw<4vIrGra7Qg;692%cCjY-_dNf9i6r|gwvvGF_Gd-GFr0#@-DfhPyDdi6It zqoKn|Dd04y29p(Sgma+1v?3# z^BjDe8H+NemGN-as6TmIOLh;%%paTj9mui3#C#zQFkd@9n;k(A|05XA6CiT)d)sNE z$Y_kWa^bA(2v}HoZhg}OaZgI~A2m~pK09zehU3NG|uAL3` zt%0f04MsK&#&x73 zCLUlX27dvbhC@&*0gq`l6(w;q!GEEOcdx{Rr^RVk5$jlQlI@K|0Hh-HbS}Tt2cm2A z>b%XYnmVH~Dra@M>BC4zy5*h@c0O?1e=cBXN0|eawkE8P9DJCLvRIop|7C#&fS)Aa zG{-2>TjbFeoc|0$Cty7!gN(=K*4z5PEl;WSpL*fwmFY+EEqDJ2kJPkYSva#xZ-VNk(;J!(y$C*Z+#sKGdVpeJ>|8 znx}b7OGv^hA&1yrgsx_xVv8(1BO8ks3>jby>IU)=!3-u9AiE)b`W3rj{=`x+PrX&D z#tH$U@BW9MGz`ZC#xz?xME#(8<}2^Ka`W|p7rv11b2#D8PlNy0DdJQOppoH1{bA9e zRJn8>eM;XZgAGY3)#@s9vRr9rs3f1k3GeA9DdAoN4?i7=REU-7B?ys4 z=DD`4VZGzQfy^+Ep}8+*B;Pjh`jws*RH}mZGXWeV&{`rG09OIwEbTeak3e4px*^>Y zy1b2DHTm3-&pkgKAfRSEz?Qk4+_#s-tswy5&pc4ZHnw-~Se0hP1KCt!qBW&TJ3P54 zhs6Ega=#D^pij`qA(GiI@M5s=u>>FC48Z}A|pfHG94%fkt|oim~U?*kNn8FByfL)-u7e<%+JfUswtp0&QO ztgRs|Ecn0y8Xgm)U~EjsMWOPVv!@Cp^N{qn&Jxv@gRsyc0o7_=Vc~=K@864F9gkO- zPu)v^_e08_v6fZ*$2vLLM}y=32ba`Bs?LWMo4Vf?8x^E0$u*S$csb(3htV4Q7i2HU zbAM>kd@3P%Sw-R?{dO^*xTo57+-?QR$w_30bYJPTs{t_a7N@0D%UfLZo>;0{q%kf} zG7(AGUC*!d6B83`yu3YaL3a;^ycQUnU-_;G59SHI6b_{Bj;8(qgreoFb`}X>dU!TA zrTVTxNx^M7@MEc!Yz_v%m=NlSD$8rl|KZ@o`($IM(Wgb`I~R|5W!EWUqK z$>Hu`f-b!4Yv?cPRhJL9Urr} zvItW!8t<6Q2pqW-xxQL!bzS_F>uRyU#R3BfVN%879;RWj#>_B&?XW73_DNj{*N1>K zI%Qy0Xw0*$6~=O__eRPjiMV&8@1Os3%~n(Kng^<1?*^waP4O{O=LGRE^==XAz;_9M z5_(@}q3s)NS6Q)A`|fiBYno)qCvD#e?3%`MoM?}`pTpE_7HIvoE#iF$17-9M%&@)0Nn2UpJ7#p8O-|ykylwhRe}#0QX-k|0>xUY z5vKI=zZB{WoWK(+#>O4;zYr9g1|pOjz3$zkONtZS9-a7sTB4R@=jQJE@kRRpz$2Ga zr!v01WxA_6(XCi8nC#Zl`LgViv$W;h4k&b;a`003lPY111`R3Z_2GkL4&>l6n}SqhN`2&JF3 zhmYdEGFpKn(oy;8)PXbPv)S&Y&bKL!Arr^;S4khX&{5vKi_@ZEFh(6y=Vvn0t50o5eyhcGjlTdJcm%m=h zl*`oG!R-#<{cs85<+_A%0uL2wo+}fD5`?)<=wnEI(0LnyALT>brK2r^-gdke0Q#N|hbj(J@@<<7wqRR+@f#7@(A{g2+3!BbQ z{(5b>yh;?0gOnXcFn35bsNS{feKlffkpTEBdGU-PC($68Rg7TXy^LVUST+lQu|m7j zQZ|+?OpqZBNyPM$qaEVindg$r%H_lcQ&vZ{9XXW`H%7a-Ij($#^45XrbyDDH_x3&e zNVFYxX^HPMd0fB=x9RD5_1Fl&=HL<`MxM9 z+zHn_G5*P4`p*2X5s3*7JVl)?cC;ij^yOcT6%+Z)iN5o&DE0LzHBeKHO59fifpfkp zOp9rg5_kd+rnM&{v#cymBIjl~m+VK2uOlAqQ8BZLiCK_=aytd9W46ScE{2(N#!92a zMOO2`xc(GL3b+_GMlKYDpa0Fa)8H@dV3vzV>`bFZ)_!y!p)6)EUI}rmEZ=+kLzGi2 zkA=C_Rv78{QAr8?$A0*@rmT~-#T@1^U8EXi2-%i!9Rjd~19GmD$8#QHH%p@Q4?AQFi7o zHG6%toBac2sHrP!p&R3oB6Ldjki5Ow=R;&CsyeUqdY_f?TN215S@|nb(O)r5E$SvA zn`nDGxexCBO7(jR8Lf+W&skyo2?CxI6oc$sTAAd-_A_`dY8*qyk1BQYR`k=tBM?Zb z`G!Z%4zp1wVI1GtC8_`YdmTe$B>c?!`RNUtU=xwIl_jCWOeH?OnEQT1ip)B|ut_ij z*a)Kk=GBl7h6$Y3pfcBk~~ABmMrSHrt@ zLqL{ziT51fGGN`NBBJywTgfE(wf1!uhB+*9!dx!DF$VJ={KHMuFj{mmbDt8fFLC1( zR7W1?Q|;2S;DwUVM+gjy-d*mAkuH?uh_Pz882C%FDG|3ERLgy3-xMBJOdpq+_?|^2 z>32mBL&wea-i^ifWXb9E#oj?DSUt<?&TElWwK9J?Hc4w=FlB;QPhyP>p zvU>T6Nc<6;3C=ylb>Vu}aOQp8V1vobd@@V_ZBhXm6x-Xk@WQE^)5x=Z*L`txp8g=& zb0{|bcZ()%<<;el&FNgTA2@(RDtwpvONwN<`1z~*j9tx4iHm&Z%mB%(0}c`zH3Br! zJry7=m7Y)jWRUb_;{#9<0`%p>kM`yhg}VCtS22p4-=FL>o_zb*jwF#KIeIf)=Oz*-sBx2&mAcxcXFJDr3lXNg}R&)m-`)5g0Exaz%# zyl3#T6O+hdu+`qsPJ{2zE=iW@E!mY7vqYl%g>$mvJ6a_hbAu6Ku*jZbgDN(*3Lk2D z_o8<^Fka{R_X+_E5hbg-^>uHI=4L(#8J_atX-|ofEc{{rW>Qr9``_4uxzR89yBpIW z?)YCs)vlh;5ijEvbm!eDx(sa6KmGM_{5y5}>Jz@o3&U896TFE5jSn}dp`5jQNPPD0 z@N_w5`IdfVYRWM0cck`brb>Y@+yTNHXAh~&d;jY1pPA`8=a)lLQE=&)C{f978YwoC8QqXBEM(Wu`y%(zbi4B z+12gA*Z##o{1EI}GN*!>s>#xmRp&DR zMEm`mBf?FZ5@XeP5>q>)Bj3*Tq)8@@&qCi4HDc#(W+|G=ZSxH?SH_u|UG z@k0b$kkVJ~0Qj@ma9WtK0nSk*oZyt#Nu{tV-|^RveL>SQYM2NVVqIsPHR z6HF*^*vm{M`I<}EW5{Xi{4``FMYJ8uPNNyAST8p*0w`Q5qp zrNu8GD6O0N;dvBHIJsVDxbJhOR8PO$LYq@j`{$we9GI`(FPYAG5k-ABN@26Lq-Mm%Dmy9;@pl8YPU-cZ?w~ai%ZK4*dv@gsQ;|Imy8~!Q|p4fRo z@W}CIID>7U-RF=?&Di@bevn_r<y3uM}ILs>HwmiK|GT8QV)&o2U3fEzbu`IJ2on@yK)1mTB1@->)3 z9IAd4b}Y2sKHi>sw4Ux|8in=yJ7YsPY0I|HCW?f>DtDt0vyo|tdDELIqxwISflIMN z5snuen&o8=bZa}@-r@+3AQAaZWO-1-QKs3#99T>7absEg`*zvgR|g9Ln@pF79h3#7 z#V!h9dy2}sw)PPhO_%rdzwqAF(2LjZ$P|4pdFs+8lL&*MFFpLXYuCd>tDX@yVk3>3 zby-T2X6R23e@Kbe*y^P}l$zCz%%61b>A$;L-{`14H`YRZxK!f3n)u?!legyUBpvuK zjNi`p{FAq~W-Yz8g;D(B?rEE|QvDMjwo8pgI@A(zeLuml{R};!EqB>{K8O_q+h9HK zU0?reEmD8@)pO_h`f&P$#f$UMhn>W1_FojM5!NP(A@ZTrETk_!^A6xT#08>GCSFXb zlABamyr)@64!c`74gIZ#TxrBCh}h0QXb!#V%O|(c26HJ!9&zvG_3vhU=3+*0yOBUR zKRwV>+1JaC8p;szDq5wPEjPd0l6FC#k#e8Pfl< zHJ0QFQAf1E6HR=%Isjros6taGt~ zp{DNi7efjQzcY;Xz8!ClkJdRa7>+0`-xu|f@3&5Z&H$45T&a9{mM^5=bo2P$npJ_2 z(z*47DYpNVd@t_p>#CXk<8k%n0p8ZmH*O2EHAUwIMX$DgS`7X~-MJ{F_jZ*b!p=w# zqg%M{JvN!5H*!m9`&!oY;l)dDU1FU6B^yw~J}bb#9((L^cwZrua`j&8>Cy)^H?T+^ zw*;#nKpLxTnMU8$MfQeQ`)&JvW1{pGj*|6lBEs)VWGfSk`=IqQ>Xl;x#SB_8q7J2> zFQw1-_gcZ(FJx04`NDp__ej$;C_w5SjqUeU1cmAw)Rm{i*NVsY9X-nihV0>_e3)>w z>VO0g+wCtOJ{iq98ns=GvpJmp=&$czP6M-oEgrNCeP@oB6$@$+g?wqkQ^755*q}*t zf52t7l32fbkJ0cmv~X_{^QE0VEP3z8c1n1P;t#~CUnym{ zw^t)Lr^n#r)Xp*o_Ss&Llgt&MA1Ccqewh&i!Aaqp8TOjn@m#-lo=?q*<{73>n;O4A z++x;_+_o<$jv5mdF&H{rEJylRTkKs03*pzV%&F|}1>P7*(w-b?;>kSndN~r(sR58}4{wv$mRjP> zg)`FI_l+a}e3#Cke?^A;M|m`t(LzcTYK+Qv)W;!Ch;aR()cs^*6#ATB@d^hS+BQTb zNeB?%UpRA?wf{JoJy@%i+?ov$&tq9mLYBD5rAe%G8cjU6hrkYrGl2ev?(Sc-nrm!D z4a!NoWu4;qVf&lIS}d$rZgH+JV_2#7Z}Le6rl4ZZtbs->_Hc=Sz2(?FA%NR1q_J}E z$8yo(W?Q{tTI;G?Acz1DCl}l6wWtFW18J=<*Yfl+WK;D5nn;=+UYeMs_2o!Hfgc~$ zMCQFMhmJI*+BP@PsTna$@!-urHDUdH{+3MFCgm?msAeUZ@jDJHU6ECE)oKw6+jyJ- zX9xFBFUHTIS$2p4)t8 zZcC0Sz?TEHB&gr_jc#@I=#y0R2z&=u28)8(2H47+fecx3Yj3GgW90GUk>DJVU(Fk7sRi9g{|SZ3 zr%J&@6Fij0p+ZRlOC=krsUcNHpP8h2byrhd*kHm=fLz&8hlfPG%e!Cq^j;3afbyB= zplIoq^F@8&3OJVBScSu+ppbKFf~Bab{~sDY@kj2g^fTOT?RQ4t{N1nPbu;4ZO2W`i zcvGSJ3fPK>Mp_n>s) zo4#jci3wS6!X|r_%X3WZnn3YR)aZ@$#Lm}BvSs~LaOBF$r}dXw04tak!Y0P2=Okr0 zuVnd|tcL(8EYOK3L7AJdM`l#-lKt`9>84j^PQL;963v18C_-ic&1G9A-PHFzx~{3o zMfynxD{O2L#oQlva=*}#jf=Bq{!rPkZiUkCv=8R}dPyJJ1&>W8%hwBdl?VOkg!x?~ zH_(^vHE*!Jc9e8XzMIDDO{R~^13m3Wt3LjYI^4*O(LzFMwAFN+G4bs2`2~BkqaE{N zydwha!gC`%wj|G_qo zRE{)@2D04;j<{~9!Opq%&~L59CntfIEo8-*B@c}TDG*@5d1D?qEcpLRr4mjG$%Xv&TAQ=6?o{>RI6>t(Ukr3ap&jte!v2NPYVpI+@xcl{crwkh%IiNRU1)&tdbZ(JAJHn5U zkpCsBEGO7`dXgXKNk99gw+}zC@s7ca!4^|_u2~o;h3D5-HrFwLM6Sl(L%Y4}(?Q|D zUVz3@?MSl-$xRp#P2Lu0<&cq?$`T`smjCX*66sgcD6jnf__hjr3VA5j&oRP}-s&Go z+imY%d4pdv9F0->2f_->R1>xB;8k3M8ztVVj#b-oOoKN)fchyWskl0qC-Fj>wTw$_XSU-PFC*S1)4!loQr%(^QdhLYyA9beM}hRfL09 zIt89*sTnOOioKNG^V-x+o;04W97(^a2YW4ed#Sm%*Dri0m7O4F?eQi7PY4wsZGA1X z_)AnZ!8a@HtZgxV5i*|wwA^@r(dASM&6flYs6YC?Jh);nLo56EC9Q)qSd;=cC> z2Oxq|V1>6-UMA>cH9%`>Ge)SF1vI4pHObLPtab{BWlK;0`nT_&a{L>5l5M{d#mu*w z%^qumX$l;cTQ{31E7EzibyXdy2<>2#SQxo!(VGv~?7T!{d#k2X0xd4@(Clsyu6FjM z0jolY$c0_3+<4h(vbMPc7g$U-4Mp;r$@LBM-MFlVYH=#vNsYWpoVER7h}!tvu2k z0a53Sj*@Uc0{T8M57S@d48%VAp#3r>!Zt=tdqfuCn>1T;4SzkAAUDtWdszLk?_tIh zvQLqKYcKs!=lhY#APKd!Ow6E!f~fJc2Kapa?oky5hxPp2)31896$d^Oga~*?3V5yD z7$W_Ebw+WDxMo3MQl4Ilp1If%JOOnO6xTW#9Ed`0MPR8$={XIJUaoW=`Ea86SKqUH zpI783#)j8#+zhm|0K5`(OHc$BZ&S-wqXN+Cic}M%MAdiBeoi~JW@4RTGzkvH9%m`F zC%on6z|;-75;}z;lI#@REAkOSLH2xx4@Z}@UJj${(kgEHu44Mb%!ko2l%ihDIMReE zCdfSa$;kpt#0UP=uw%H<;-f{zk5`cf^p zodI)(+Hw#MsF{VES=p*fe)@QkyWbYzQp^+%svUhj0#wbWR< z;;MBr%aMkgZXj*@$J2EAT#i+M^N0BI~RDsHlP$jU1^SsRP5VQLOH|h}>T}YWOTt%RyqJ`q+TVWo2!;_ek z+{m8IR7Ekd&Ka?w)_kC8$)+FFq4>5#%sga7TjZlmUawLvZ9i`NbKoN>3z3WR=$N73 zPOP`hF`72z909kaji|``r$DuPiJ7Y(9g|g`HUgA1rE-^|Spi--pLsq)GZA?2$-3I9 zpfNXO15h$DHC+|J04XV@Tsx;g84!|qJa9ML?i$cXh8`)X&m{y(g{sr+nmR1Ni0Ml3 z15z@tqf~(PVWTrQ8UhT@`X_;{5CmAka31!QAmZzpY8x92K3S>g_}^RrIQ+K9N>7jC zwzU-?S9W$HQdT*?`8$z$MN$Jyq?FCAazUMez7#&oA61&IW8>qPk00#{*O~J{VXL4; zrFU`w%K@Q*K(4F-JpT`31H@!F&Zxs*UJHvD1%_`n3xS~=Ho95JE|f*=+kEWCdM>qe zQ>r}jkEb|LG3N8yHCD}(qTdTVk^)EreBNi}eNjwVt1H9edpem9B2kdchd{3p72Nir z83U~jZU#zASNHvUB1$b}u(G7*1Cf4oG}nOJSmcv=RVElRA1s_kjAG`|FTVqZAy@K4 zrW;=3{v6|-KgV?*4glBv@|@KKTn!B9?J74cv13tof|{}78X_Y{I-dkyk^-m)?;3Y{ zn6k~M)WU&A1Xa-4lffRh@yw2m(cFpqB9eaqsDW?bXw)558F1x`4ZJ?n|7ywIpT0^u zc~b0DPdMo3&8k;o_+B$tp5Eh#1qLhP)2*8GTeR*vN{a!yzJMwW?e%_`v{^?fF`HXL zYS~z^X6IvX|E+EP)1BvY-pf%!XRH|=^VU96ALWr&`aq8;(6J-BnHRr*7AURYbTJpc z>8>Yui3j3F*Snv7qIzm}=kVyr-l=79P?fxv4CoxCzkMF8nE?#7N50^z;+2!Zkah>5fKCnq#^U9h)Kl z(DxC94^RJnVIS81a%5Vqqs#WYx_11!HWy}`K!SulZiRoIzYeyF%5rSSKMS3CA1)3> zjwopNq9e=t^YQw`F|@9IaV%7D6g0r(hLh{dAkqFhZsdf2Nx4NkJ-FQG$odw2whN7R zrKx~+u(GgxQNJg)0Cct$z4*{D%Z*w(Q#G!zz#j(cTE)D^F`dN-H<7nB0`xdOQpgr( zeqpES@S?Jo#^Lo`t|~^%D*-=mfhcTmJ{|^~TEQ$U4rWz-JFwK=xz5_Yh)OA~GGKBe z)#nc+bfWTk_i-XNIXT}+>S~Nh1p}7+uQuO7MZkXtuqq$t6&L@fGYrcE``p4$?wR~6 zQr9M3RoSd7hn&jiO!364Mz=^$XhdFeWv5{ zdrSM#N@YIUI`&r)C-vT)T^xj-`@g^0eG?)DHykt(Z@PSrW^as2EO__UMyvRt*TC&g zUys~eJ{oTLO*iMaH$*qTNWKCN8nPE&4mPJOuwMs|AnC0$HqBQ8ND6|lSOODEDs3kO zy(EUqBNZeD4J6oob1c;f>%RCwJ;&}zFnHz7Q`&rKD3l=JF#R;~l;gPt8Td?xQ4=ii zp35>nY&t9#XT9D5PDSoi5i&=jfVpVp09>`}`aTh!8U)a=sRyrWS$-VA$>!=*SN)*d!B%zQ&6j1&=&( z%osr!G*$jDvd%Inj<8+Rfk1)=ch|usxVwkJ-JM{;-I8EKaF@YJaM$4O?hxGFB?Q~% zoc+%3*8Z6)s_35X>F&25x$o<#tW*}l+L6d?xlW@OE6GMgj@q%x_ZJ2#_?kkXRw1&; zaak{i@Ra>J#SvT$?#NdwK2K7nE)!z)Wn4PAy|!^c*m?Sph<%C1qMyZhEcq1FC1nLu zrk8SlfS%9rIVUE|8A~2p5~vppD*l3(qNMxx(x(Im6(-J)GN}@y$#zkSQ2XI#nCVY? zXqArw8D>n%gk+whCBoLMxxBb9pszQwh@Fs5W1j*`@D;)5+r7Ml?Vdjc@EM_$JU^Gi z{?TIdO@72e&ca4Q`r07ux`w7@h)`>9k>*21jWcP$t2M{p_t!&%#5-7tcW{*)p9~ZBu2eGpE{P*% z_VS9hC1sQZ`}KB0rem@F-X3aL2uY+&5)Um`lcd~4J$xXz0cA@N#ji2LlxMOZ?-K}3 zQhZ`&ayC=_1iK8w#KHs@@h$i2GGbiv$u7Yv*PlS7RO*UjQZH2S2}#)*oi_*MxS?Zm zP+bY-Tml}Oc&snqa=*xKjTT5G_fe4e*=d(YphI1!xz~GnRzOV~4B2YU=+GI-0=8A( zz6}y)N@!~?Ks?R@|(B+V3RZU@OHyi`CfOPfR$&y z&#tw#P{OWD`Et7~l3P(}rry>F=ebRA_aUGSo%i6cwSCc@JAstMFyy(&q9;YqG=wI_ ztR!?{$ry7216>#^TJiq3PDe}G2cT-jT5X~vV{~Z%(#{D>)mlP30ixT zHR9HO^=KA5@uRcIEMJ6-N*?@eIyhFXcwlg0@bur1U50jY{J;U%O74wB6IR~E^bbo(usN}rmcWN}Bm=40giX~p$9Ze5y8bb6%*3PW}BF(nA zkAwaMN8p=;x^p z7ZiL0d?idE{tzXgi_af*0Z<@7z#}PW?kVFhe=SK#mRVz83w1q%i)hPnM|PzwebmG> z;Zy6k6FM$O+v$Nmsall*YRx&5QWikq*MTUz3PA|BTgBAP^2N|@Mm(nleF{SL^nm** z`dVRlSD`#4cfL?<4*Vtq6xs1+Kl?J}%4$|&%v-T^0u^yhr-`sks0sq;L9x?X#lI5b z5suhiPlcQgE-I0@WJeM(wdPY5%tId2C7!|A_4 zy45fp&O{ihzrClk8OD^oBXNEojNX?(6Q@Fs*dyh7XdUe(!iJ+Airicu77;>GNhK zIOqls*sr*;j}uLjy>L)Nz(V9tJ$a|XuJT+;uir(EzXOMC1e`hIRa7kc+v1S&X+YVw zKd?~_3Syl506=BJlucErSF)QqQxq>uou9a88& zjC`p4dH%-R&Eea1tz@Zw173NtyuQCP>9eOPDSWR&fOolH^>*^;;diJVCFpK#%kb8a zo3<X#yM6*9F@V#tYpnodpLp@v8d1(8GmOzlv z6(f`d;V*4~+$KV<=H`z44gmzLGrR{p>&rkvNpuUSwwS{1XnbgC%SNvlVU-kj{`l|C zE~*8p{@C^#p9twTPiyZNgAHZ+qr=0g1aG++i!RT&a=Tue1Dg9Ov)W`l_b7)`WvM)( z{4_P_l((5V#C6;-^t@udz1BHJ|fIe6r1)S%>(f*qNcjJ|&VsbQTK zA3ky|>6TlKL{xvq9~4n5iDLozQL}FRnd|nLu{*I~d!tXJR{F;=^$P>eTOXo%;lZJU zKt_j!2s}`;6~C9B9QV5zNjofh;AwaJ?V|Fc) zRPWBfsJzNxxp#b!c5HkL6x;k48AeoV?+zVvL(XS#cpNqj^A5LpkAPFZP8oZt2g|(J zg|iz$JH9fe8FIsK7sbYUIrEipz(sz@IyMKXd^UA6iw-O`xLgn5HXS7u0H3YBW4@Zg z30mXEHrcwxygo?N;>f3J=b`P9AA_uFmj3xsCV-avWnQrMOJb2fvq}=YLj6XyzfPlr zwJo5G=_OtF*0uW-#dSI)xiHYA4q(J)jb2ZRRg>oyq2=X@^wWbKk#61RZ_ll|b5D@N0Tkm+RM(>GN^Y0b|iVw$NDM+B4qiA0tHh3dMAY+(+6EGy?-VsRv>@I zZ1QkFZvoHh))MHFCDfJji~*>%YiBuWgSz-5W+VAvmHe7;SjQQAeA z0y7h1kbW*LFKX`+1u*v)*3JssyY)t};zXWVeA-j;;7G>z_l_qq`q1S?l0;xB_}VEk z*8QcVP3;TQqd(2RTL+m>sMOhbmGN1Z)w*Sd0fcw9>qRynfL?f#aaeQ#GzgzpNe0#* zGv)l0cEqp|tN+gW>zI9wZIoe?WrKVO&f{Q!MY9(@A4-3A%LZ zOjwudMvZ^!yJP9czJ}PA7ra|(5;$UTc1w$VYkFE*P$SjA;0PM*hvv6~7lXXz4^F&032Kh3 zUV9V(0|x?moMF9hPr}K||Lat&+pG#ElxO+WuLACZ%PgRQAwzt;%82|s@6kN*(~m`W z=l48wto`UOKO48H4`nqmX};zJ-a1?6MsmM($MfZGF%V-ZvQhusmQZAKht7+{I=kZ} zZccQ5|9fR@EbHOF78SkHwL&N>TE6)7aA($?hWdB2o3--#;pcy~d4aY&V96zCXIFVj zNKV3yP3S{H+R6V)f?E#Mtv4vgui^r~z?u8S&$q8YD4zao{B@9V2ID?glUU%)?yuDZ z>&7U4aod3oe9FkuI#ur$ZEfZ(TMX!J5~8DD4Q<~p*w{Xm8M-KQU;Y6{C}X^G=$7L8 zLcPFX@3{#9#Q?;;{Cw)0R~jB&BnI}7+}1z(Z5cJNcoY;w4KO8I_$$yk+L%P69hhe@ zZ=6E=v69MHgAJrC800i7;27cOX+TE}C;ioH9(f+gg4f5};IKrcswjV>XIEnELJ#)Mv*#io> zbU@$o{ZEQXEI=;pUH5hGCzKPN7>(*HI_BTUdCE`s=8SV^<&x9KfVj55d&8CfcZ}2D zRdzaZsu{NLzht9-he z-^H4q$gy;ZWvUGZS1N6bw;4t_nr5!ggZ?&2RNO!V_Am-`%-$jc>n_)(`s4AfQ0T-@ zdv0BxVNt0>11Z&F1_h^+^G_%O!X$`J5$QeKy%yEd1=?y86$&EDK4-1_YwhhrA{YRG zP7pOR6DYmTP2OmPI;)aVv?;;vlAoWPJ+N>6fPHK$!Srk5lBr-(tg0zQX)j&DI1S4W~3Zoj`QjAyTB zF8&L)Ux%4XEnKUdwJWI$6L7oRr&}4@Ziqd$*npbq$5rlW(>;hg=1!#WC-^=jXQTzY zd&$hnUgRJx2g7{>ujkE+bb-kHzBQjVDGWkdT(2efGWT1sT6_Hb5_17m%z*jXxc7VQ zT5RjMx1U<(%@fVsUXd=8I`U8ym1!mi9LPI(W$o*PrkgZd0>U zd_Ydd&0gA-jE?$k!&{KQ{RVu98I7!zlX8Cf5%e{fjJYSGz-k?k2Wpv8+GfceZh;qpW%0U@Z@QiLY+->$BcpGRtENC&((d!!}-$^<}ss7_R@y9t~~5g!+_-H zU`0QQY)QrKz50yM2~Gh5ozJ-DGy-gY8?jMN())6V$#h&ACIF{zs<1sjAQcd%p}mY- z#xgT4ZMOw3t@v7WBtO+ozRF)uHpHOFK9-+u(@YlT5TGVSI09@$mT$kvPA= zx;mtWv6NxPreln|eR|v;Ug?$)9Uc_ATUMh2@t;Y~3C3ES(1SJ((ql3boiRVo2x0(< zA5aI@Q-<2OOK51|yh^ZZ#`uws+)E`=Ynaye%mJp39V{hCN#vdrXfX{603O$7ye@s= z9qJL1j_G(&DnMS+V_8Gbw^(g~ypxad$;PL(w6S`>k z|34Q;320%6e091DBL@(R87|^{kg#%OeVYFe-)7(_HNd#6x)DHEd>cTz&KGROF|s1^ z54}2q582J;P__qjk@^=5y?1F)1bpy;rn>%~;ltfYzkQxV_hZH0{1Qn0WD;~!U?3K{ z+<^t)zYti`fQUg-?MpRtl{C5Pj^v%1g%nL+G(q$?W_V#aaq@@xd6CVt_8VbKVZPT+ zeT$OwN5^x~WxiXmh6b}q4sL>|Gm?zXYn;ln$X5rItustf_t-HfZk7oBKwBbIA^}^a zNKUx(Kh5*LbB;>mQ`l>f-y(e??4;u&H-ecd=Rt?(j~rLF=F$q%K*N`YA3!3O(qLY; z37-P$0^P(!XdDVat2r$gUaNGMC_@;Bdbvy#7?HVU@)&wc%u4+Tje-Ka+|@h5Xos~! zoRZlK)nCMUQkIuB@$5&zIx%FFs0; z-l%UR@`nG_pUjz1r3lz=esw}?){^gw{Jk^;TG?*Pqj_I6yQQT+$B1mYC7u!RT?m3h z3R*JsjKuo3c0Bs{@z)qx7&IxV#ZB#!2YP^3u}1TfyLAbEseb)sir}?lViJ~FYTE~k z;HwYW(4ct#m~o+iXWua80ryd^dAg$W`g=-HTN2JTZ52=tfkA_vWCH0@MksPi^F#zV ziaf2W;V^$*sjmyS8Tj=QcC?I3k~6X6MKpJz*``A7oW4C5M@GW@`?^@c7OsoK*;LT~ zerl&KBrIYwiQ--&0lM!^7=2}zjF4{Uc5x1vWtlJB!Wfo$2zRKLh0wRJ06wkufa6Gu z*Hw$Ol5Z@QL6o}IobviPI7T35{n zBg)`W3_|w|-Y?T7vuT@L=FA;3MrYHOP2WL248)JL^W2i)Q=h-WpS&kB$mu3?%r3H_ z#0M1RE~eFcdFS1LwvSVP1fpcQS^I8d4hh%T(>s|-e&G64b3_|RmHTLgz;L_p7v zJDd_p4TACuCL_@LkWXB*)2Y-RsY^ZB?+B1YNGYjs)1G;U2Nh@&9Jw+9<|sC2(?glP zs$5WiT)b^XD{e*mbCV5`i{hu1-ctPt%rI9z$fSc=%@IWhG#>xABv9Z^eaAFd^_rI) z{%Gt$;OCBq`=kgIOb$;?b_f9<`jn_+tY->463|(gXV9s|jtO2cPxoZa)^f6(p~mz{ zb&KKx8ll=p7Yo*`JJj6&bn2?h_vHXAYnAqlQ@<`1O~`pw5w)>Au-vJ+BQws*!m`tV z^oAMPeU3;6#+i3CkPIGXsBf+g0k=?A@`@~US7aG@m8Sz0M+^1PUwdG)!SwSR z$CY}`@m+6iOB)!9cg#CiF`@S>^1S*iylBH=r{}jtgYwe2*oiYu?@DpA&1~e=6~e95 zsoAO8HOB^p@}fs3*mr;R{2T4MjSnOMI?5vpjHPO3h>~T1HE=tJOV31vm=c4)32nuE zBckOvZD0VGV3WS2XYP_=fc-LHQBw7JG0#t3T17Aq6b(+*QUIszHf>2~)_4>8R9(E* zH9LUrH(VyY0*c7j!UU|?2t?cZ;xLFE+O>746L2~V-+6F}xyMSQzm%Nd6?{l|Rp)hae;`I|VLF=DKf8p(D9s^o0zR>5z;tWY}oZZhg@d_xfGBLhhr`J?u216ivuz(Zc4?_UjAH5XGc zz4Va*1AB3--I>(gAwBx%8ix(0qTfipqzKS^S2Z+@;JyDUo{htR^c z#mw~Ro})V?-Xl3I=k4vSxJ_-kEg8}rtSkHbL)`dm|7aBWufSoA-oa zq&#=Ix}K~hhCP${?7@&~Ox|1sc!Pq`ZM+Lr)$v3I`95$a`^dF&Vu_eNZsUn~+G=#rNK)_Nxa? zr(_gmu$zNnvqF%^rc`?QiBRm*u0EE5U(}+urf3Ib(wegyxH2DT71OBw1Ec-@IKx?z zm5qzEVT9<`)%L$PaUE{9-mOa5*_9H2>Gp!wgSz-J!E|eq(|n+-sGl3L%s#>M+tYKA z=hpfp&7OP%KH??*l7$6o3dxK!(!W6@{O+BQE!qmX=G%;_gXm2^k88HrMQP2B6`UAH z@l~u#==SdJW>&znScAigO=@kY7T(jsffBxm z4_0E&O$tI$R-4FbqBC*PFYetU*#|=4H2)b-QBP?ShR{Mg2>|$zS;`Ad_A~wOU|al5nt}>_%|5kcRsKu5Lv)8WCuPj zN;#@3E0eDWi3^Mi-4Vlnhh@Ki8f3#JV3@!(>O$hx`dUM8<)oNr%jUEx$!R+`f&$v+ z%JGfw=;&b7JXF87s#ViG5^S;{+odi*3d@cGn<|SIAx(#8vPS)cVBV4$r3W>>5vkEr z?{gTGk_XKS{r-0sU;;NmA&9@$5YEiPdbG@5`)4}fg$n+OtWBZz?x@&aHlj{%I?Z+f zQ-0qT7R$DPOL zyq(tZlHkB5h@{NE?acneGl9Qok)dVpedhM z^Q+&(?ZzuABC!A6dX-8v-vW|DCQcy~wjYhGf8u>8Ww9pqyAQ;4E!1$J>U!YtB`7k6 zw$pi0!A<3Vg1M~5sAwn1LWkw_6X!7puA|F?qxEPyJQqp+-Tnbs9gp{6rDPCplBH}z zSD_Y?#dmvxPch1#7!uXDjl|HfB5KCT-wVzMjKZ{1qI11W#0xHOjsgs#8{au?exCr) zuo&I>a!Q~lBk^#;`O?CNN@p^qwjVf!EwDD$GIIhHXNWLE7hC=8{*Rv6x#)R@gu%BN zOIpujz92?p8F*kluG}u6@w`t>zUX+17B z%^xD1F;pt&Ovll$ZqCg3zDBn1%YMFJ!@ph`ZajUhUxOClFt(`gC=~s@8m4Q6WtPiEusjMi4Y!0;!KN<-?9FjqnpcgPWVM5i+tAZg+ zpJ`o{aW2VnacK8j(oM9^lob40>q+rP zXkq|*oUkiq%!J%aGLFe?Ofz$dYyK+uD;Cm$a$^X&ss6NfRdSR?khuQ@-RDoZOuB&7 z=GDsm@^mZG!xPzVI_B&1h?&`j0$S5ILL;HPuRzgyG9JwoCi>B47zCKjOMBi+L^>@s zxsGboZTf#!gBi|p!c^YAG}Y~uXs0_!%nn{HKu6DT#t3ZkR!MIyH7uE$nv!%#tJ_kg zWqa|N_TXQ8!zowm@Mk2IqsnHMVe*5QwSsMhx6dxLpoq`+x}WsvQzC^MEH*60u-a)} z9&P6m=9m)$bfP$|C+it=BY6txm(GvDdWRK4HLFij4-Ru?l|0W$5qXR7xnKGnl)fdG z?3wdgwb^VIsVANvh$;PWyBZg~idf8`Yo+^$Cslqv88m4J$7q}rsEaA~j6uuTj~RiU zAj_81qw_CQA0d17=(KCfGz_qXNDQ#qFV(8SE;>I??#Alz}!e1tUP^|Q~8(W$4wNON3;c)$EC!@zYX9f56?5`{SDo* zfG^gA;d+t0!Nv+hj~P(&Rzv{r^K;d1ol=k>-Ka%QUbn*;xyLMS75xT> zj9H2-eq`PNjK+F^6SS9@EC|pH0BlkG-@c9R&^lpzVu!3c*pw;8-13+N3St8Jitv6( z_o2^@;_pVl;NEp++B3ux+D}Ap+NMU-c@>}G#R9m1-Z?>cC|W;YAc{5PJTYZLgN=W9 z;e~V!Cz`c805`L(Q#qvDs!W>n{4DEbb1+9Kd|O+7DJ~Jw!n2^*Nh#7be$??Tyt-&? zrdg_<>Ag)V`cZy6I~Ny&QNU9jT@F~L-T$e_kTt14^eRwd5WSZ%6pikFB_RP@`A}5n z&bGLF);OY0JmsT$d58nk(WltYiHJLe2F?sn?Ni$01DKX6YFt*HNQ~e)^W&SVaglyN zmvg>b@FfZ1;L}>bhw0lai4BWr#9)_9dt#N{scjp4C4WgShIPI5A4^;|W{pI(n9$KDJuFn2b$xFFbd6Qj=5wVw`@r9ji|op=uT-Ml zp6i1$@*i+k6x?d|vsd}ivilI}S?hMcvl>}^s;c$?Fq3)+Zak*+U zA{nZsd1U+VPk`Fjt?4c$M|O~9Pqxt+%0EGaf75^?(~KvEYeAxM4&jM*Zz5aS)$yV zH=TT`jr({AXq3RfDpmS$3H>SZj`v^cii3%$-Y%MLhGhLBA19}tlj{NaNf>x|R=1f0 zmxCXDpjY5!N9RV-WR3B#pUFY3v~%x00dZc6fJgaX+C;+a;;GA&JCgH$?rAMDFnwEA zdBH>J$`g%0o}ywyL&|ID}IZ%aQWymZRo}T~fu~?biMgoFxUd#O&?NcNCsY zPP{EF-y;m91BoURVKKpm0Z(om(21m#BmvW*iKue^{=RD1(!fz9Vj*vAgCKOSyU2Mr8u{-I3JqGNkM@i714e2sKvYxGxRwKyd6A7r$~d59<=WSk}x$ z;5pxecK^{zQ(azOO1bsS8wM!ORC+$%_e+fr=Jnjn9`hhxFUJMNYZ>{~!2!!ONeGru zG}E6kBy~lY1JoQ5T?8<{$7#e17A99AvN0{uW=ChQJrjnt z$0b`@UV@MAVOKb2$ecd|gW?C{LFpSna9&ML1hke$3yxFe%IPr{@HMkh;H@V+?w2XC z@ku~xDedolTWfD*@(wX5*mPRG>oj;NDi95Z4YB%1qlaoo990Qs|B{Z<8KZ)?!$}VK zOn4_p9IGh6%H-p39y2UOErppW9D~MxBaGU3VUXBTI7|7%a*i$T2IKhn`ek+EhnOACxohAbQAQ~7c31&<)AGjs zgRjso%42!1&A33Ue&W$QK@6PzqTj@#wu4m?S*#)Pcv(A=+WjM8#SKG_rr$#d4hZns z9pU~7&)^C9++iEXICH{t?2Sn_etM{%$`o2RzxdYs_dElQ-S(LY1~i2WONB@kdP~+- z85)u^ztXz=P8lC;m(t-|q{py6<|zKwA(dFKVbCt$>P@6+)aK%gBW0c{7Uv_ln@Kh|^Ase!RBR^tX6Ws8-T zZ}*p~J7nvnRuhV_eu;Z)Ah>1{U*~(e>$n$-s*5zW1y=pQV+ntFZa5E!xs_9jLRDQl zQ4PUrmK#Lfq1fgy0rr{ZCGtV_B({q1>;khH`p9)=4Tfgs!n9~`PjnM9@Sqz zR8UtE&)C>M;cf`(kOJ>wjja;I=x`?JarIoKd(;reJB!@%?sf&11wmX_e_H%8E_qF_ z&HVQwmH1igp4m{d+E5Eiu4T~qdZ8hf?TYe-q_jfl15CV!tvow&>e2gk1*Qh0E$pD8~vsm5=oWkO|m~n;9{9Q{?KLm=wPl|fj;%UB1fDp?AZ6czDo z;+bT#B@$-}VGO9?86Rc|MQ-`e$-@NTV@fKX%`T)u$LgB_nq&DvNwELLRK~BHZxgf> zaGlSFjm1fz+;0r;Kt(#z#DZ3m;GEkH$;V~YIJ2W(*Szf(!b@=GeCnEhdemOK3sNVD6A~}~=}lWO z&O|IM0~Fe-9;mi=rEE-h3!Oo^6lR);ZtF5Fa|W@CIXynG^J4T9o;K z3#qn+a?)t4F-wn$wSs1M%`JJ0x*BC!k;LA63C#p))al^7VG;rzx>VZktW$)3 zq+z^P4v9w^G;fj(#u%=A?`ITZyDd-ZUGb3*^l>}yTi;=pmYzXb-mb6ggFN!lfUs;> zoLu?T7@$Zg-~T?s9y>o(ZSk!tzfX?xEZ7BjoJ4);8Q0<9)p-Y5IVl?gF?D_jf&5o9 z&#%~--+s8g5e?+AZ_#bbS%eo&vPPCg8k9*z8nU7ala-tw62bZb8oAKqo( z@zCtn(spP9{ZO1LS+4KCoOKR0VRnz+=;>3TFjns7`B_$5wP!;zWTGM=_i?;eHv`KJ zUh%U+%4|#ObMzf+>;%Ju%*pc132o_}be%9xCGv60XJ}?dk!oV5f<4acy+8%bi z?Db(azB4LOiODLkpbxT_riw||BY!?SJ9|5h6qvFrAoaw+)-~RbhKfbF*+=w6@@%yg z9vCs@lgxV{gviX0Z(SCR0@5YIh+OJ+%$@vdQltIV8M~5ZFDTB0zEmQ;B+0{kS0bUO zpc0IFwsn5ff`HcRqPqI@==Z=Nnpu3cH@>yL`u*>HXx7C;Mf(ruN5G^0?u4E8jvz05 z5snE{wHApE1$3K1wyev=*pV4;g9{}q5P-M)8b9P-?%x9+^mng&y4#87lF>H3dDX-G z1*7Hp@`yL!R&dq-!Cq2Yx@&w~35uy+ivsNCl;6c5e+>o1@-b!^HIyFsb?#dzx3K|$ zwq2R1QdOR##)pvj;=;W~pU*q9rA0NB)}55T0B*Zbr-t_N>8V#PhO(6|A(=AXlEf;~ zo|yx>@C(nVj2#{y%*jn|7qyE`7mMyQ7ZxE%_1H@8%sgiKw(Q80Vxk#A{jF44fU2QP zp|zfMHcyL?P=}*xrta8-FwD^P#dOt8MOg~J8^gD6-$VuK_1 z{qF@6ygl6*G_Aoare-rlmN6yQuEh;Z6Dhff5PHF+6fW}f8AJqluI~+|x z6u$|QH982PwIxRo1urRWk6Z+18?R1f<*@c>D~ca;@LK2DL)FZ=-+LIyZlUVRoFKz` zzZ3TeLUtse7{@0rF5V+Yij7E@K+U)zi9Gy+01V~T`8%nh1swe$p)+!M8F2L5gc0X? zl~JMZ!B#jq8uqL~_Zr4tV1keAQ0ssX@Sg9opEOP`w&Rs@?f=vls^o>7XQO8iJYu;) zs%m_C95;_K*7vmJU=Tq7iBuY((sp%sW8mUiK9`94@7G@Ai6!!n@YKL^GXPh%XoS)n z4?9u&{1180+vio_B|B8yJS?;Up&thW74KgQW^|mK>W@(MZh_*vo<$OKUZ-1x^Q)44 zQ5{EdGX8H^Wxp9qW=z^raVk|{4CU?ej9Gl|FIkhfnuFIi0K7F$Ko3T?>={JguryI* zn-du%oreL)fPq0!y%7W)j;G6f5q`Ezbg4hkG({QEk8vU#*Bq-(ya28d@Q%d?d$u*! zz$QpnGmZw1w1m%+(=#ziikVOVcNqhd-c#5QgxlfJ_w#&3m6l_Tj$74{o>qqfp7%S+ z@K9OSnn#JKBwRIX8RQaoPDGIU!I&{yc6PRC$6&O`a~NRNH{KWu9$+2v=u5fe;3^jF zt3q)-n<06ns@-@03US-7fYCvXZORUoWQ~*`v;;zd5X$u)8mdcqoiGWJF9-P|2nTzo zK%!XXbLX(^G)}^Xt-&P5%|wUSwi=AHJiZ_mJSWzG0ABUKvX3AUn0pK*-pNFVPE461 zf^@a(@;>uYd;{?UEL(}`Uy4qbk8=1=i!Qm}$3^Q>8~;xCYG0pF0-hJ~4#XX(b`wJ# zwoDnf$zQQjQFv_S&Y)-fk>TNP0R9>ba_+o@f9yAg=bV|Q!31XpJbPV{xm@nibRs^n z7bNCuk9H!Wa$*Q(V1fa_)+nO6}9Po-8T=YZrRe|WX zFI$0^0*@+IuyZg3m59xCU)k?AxtdPT8Gv&oeIr1)fT74 zfk>bv6Cf*?PshOoOGlF$zye?StIpJJOkK3bF_*R%GuzzC>c`C@ki5(2s}lbjfvRqp zGg~2zjMulrzJC!86K=Tf1Zo(sMkNiVU@E$*dIuvn6=&`KXR}V`Lp_)fEWhZivbp4U zphIWVTWCT~vBhoUb*8Ln&Zn&!0xR~@Q73DEdl$X_(2DsgSY#{Kp2CehHqUco*OMg; z^VDJ0k!yLfkN=QGf8e0GF$tuf<|0|6f`2KcMgd`~>EI!awTlE%4u5Nd*Oui7Q~+y( ztNY|5=8WNM@NZuCXFi2)h_)s+ScKy=NYKz^0m z^a||5G(EcXbldz?T|!PY@U=*wC$h8X3$^}kk&d-f$GF(cuNZG-vd<*^CTl#DBFKbD z>1EW8kwkPes8B%e_yh`P5E`I5s!TdGF7gt=tXIE&KG{u2#}Jqtji>Kj<%gl{$+yz? zCmqRSLCh|aTg9C2TTVxyXqG4pRV^7@Yn)aP_%deTq}>A1@;5Pfj(f7p+b?ox*s=;X zw+%ulu9b`_K(#074Yszn97+8ujCTDS7OY+&vv-;SuRbBxA-0+XWIRYp$X?Pw_G7SV zdl@4sDQ&zU(LDiV6dZ4g)HWubB{m;?+)psRlo%#XwSm^!i~cBTKOE^gRUm0&hRr=z z?}l@ixDbAXF38#6e5d+RJsB!fzD}WplyN=J)he@!GsIh9yAw`k)14Tl_PHavJiGi{k#q4#uUBgnTe$3f0yR89P2mlgA5 zkQ;%VdU?Px_E4h=j_PLdy0sS>cdOe&xTo~KriZ++qsHgK0Y(N+drE-ngj#Rg4-$!4 z!X3!HI_hYeXZ+KErBl4jNBmq2osvQd9_z9kh@I+AfMGhD*p=47a#d{&FgHg_a(1ZP zR2xApWUlhO6r!=KSl)@s;%9oAyyk3^>mAi{X)2;W9K{WzVIth{diN$K%ZXV^03`M~uxCoNQ~h&s=m5WB-@8IbV)yuVnD zs^F+>64V9~3u)m>&?V1-bkOjCw1R%@xNZnZ zViFmtn^)Ds!-g|y_&@ox5=Y9Mp2YR-1w`X#%=iwpn|G#%e^l%uxqfd}(T;z&1j_WEMI&l0&gKx!$a&M*(DWk1g*qz8o+aemU|>KW~%e zjkznPAYAMlD-%$-vC*d8)x-v$?)$tyJ#t#ZF=PE&$Pa?=hGfjvzoP>h62adQl(%1Y zp3x75+`0RUMoAQ5gkSp1yYlYdI!%JP`g72d9mOhuB`}d(QpjSUzq*5_!PD z*P?*tx>&Kx>6xi1TXD8O=WO-Tvm!+!W?%}J2CL-b1v@M3XFEpJ%?jLJLU~=5*r2?k zeq23y<=e3_lsQ3$%$+@nf}qg&uR2C)aHO|vG3ZBcs<Rt?T1pOzDuL_U zC((*u1UcXwwRkt=I*}@2|99+nSOgCgts;}g>@0XE7Xzz)mj;HsZhpSb+rb%v^*(G! zF%9_cjnoccn_JbujUGe!!#v=X<`)sqQfAIOxl>s+SsF{9j0%behLKS*F`;a1Y#^YbO3BKGEr=%8!{r?Q(Ono_q0v0rH`86{ zmk+^u*dHjX1j>X(qBI$YGYJ>wQ zKy`L@cDaZ*x9FX!>@pz&IW*G_Z;2;(L37mLW?B(UP(B#G_9fAKf zvYCgnKc%}EI1*$L{Vq{e#SU}Au7 z`|HGns;Vm9GRx79sJ3TsERzkmzW%ZV1sRVzYbV zMo+o3vsr22A4XB4UsH09aamc>$H#WBRm;2EX1oR=&-6b>TMV#&34K*S`5#vO?hF9= zKVk)91{_FCOziybE;I;>*)Dg;gd}5BFa#?D6+e9#$yy)gGPBSzENOeti1#gNu-r}9I$oD}wstvp?aV;9yp z9Ao(7qQD@m-=?8)rW_m`?2hZA*DW<5Qqqe`A+mmZKC%D5uWln78fP+V(KEK%9w7t* zr_gD5QFqH}%xwASz-V@;!q_sp5BOADjg!9OcRkOx?j~|%-s6G`kgzTBa+Ml{W##3& z07L_`OmZ9y#%syVIdi$E*h;PB6_*mlW8vaq;YBjl<8vkW>@z|Skz6|%;%-LV8 z0nt@Rb|JP-(Yq)zC8G-n#BtlKjp@*61*%OzhUZ*R~cmXd@JOGOl zzGH%7L;87b(O~tr3n+?AgrztWDB0g^YLMzIc5Imas=zc2%q9${TCIK76 ze22U~kW?d1LcNf?Asn-NRyDBYC4q1#zvrV$eZ&LB(Q`AeNxii8^EHI4HN!R6gVqlK zg97e%x0k28Jfn91-LHRIuokL^uXoO$Y5F;U0b78i73T|}2qp$*x=oD+4)3&YKanqF zZ)<+TLRv%*8&FFsN=|?L{5d#^fx8>x@GEmr`9HV*zAOw^i^K#)GM?H8Bp8TqqOtfJ zstUCYX=DR`pq?Pr_6e93_sXoUkt1q=4Y1?#yB~>(OB(XoUje8O8vy-bPF!oKPV5_E z>(Duh*!v7P3fH(~$u`W|fizlO8o@cJq+IJ`6FI*1HYYPsH@ zYHyG7Jt2ETJ>Ho-!f! zGg@_mt#g93$9$7JGh0xsj1NTVqe%OzFo;A9g|hfnL3oQ|%rHZb_gAAEsXN2Td1n1l ze=F#nzyE1U0pFy(!kLMYrv3!V4JgC(UcT5M$do8|Ip#K`dMp~=Lib(Q7wj}U29dCF zVTQp3l?=0i1_bY*gL#5)v!g^N7?zP&Y$4|j0ArF&=M5p<6CUO zP7xP0Vts_KXt8K2-5V9HC`X6ny7u(-eM`bPdQzqc{%1O>kn6^V;qIa>W26?lA!)SL zJ68=mrkUM=;OpJ^hT{YFrfd>MA0;fZ=&y3jY|l66w{HmN&wB=>SMkxUS{u_2ajLFk ztOw0>Z~SdH8%9i?1K2E|tym zyaO?7%1}TWX~?tw9Nltt3S(&I@UBH~I{SYM8vmUWe00o3e+Mr+^I=jqa)BIe2KBs$ z%nJ4V3ikBJZRd!sAI5&!aCtJD_h=f|{?yMOo@aGDR$H?F$S+=^%I30PzW=%t@Hl0< z#n_Y(K&sr66fjevP{0Q>P-7YOAT`#(!qFahiLOQdhUFd5Gd(%Kf$QVEkoqo)mcNUe zV`acvdr$LTI8$_fY4z`|x5&!dA>fsNF+dd^Nd8l*WUR3*6j9v&nU?fgh`;vm#%WIu zSPyF^t^N~tU||n%y?J^W>3#uYr*%>f5G^>myfIu;3#?E>+Sq|{E!hgbKY3C<3s?+8 zz7%anVD*jFr(>dZJiy!fKK|z)f6n_`zinU$AG=8x+~ocVT4`TBDwgBr0^tRh*QWuO zuF!fQkeQtGOt3}mmivu)0bd%Z$0*82OGd`fF)eVZ;Q8sXHSl2m@5W8Ql@n(P0vuz2 z8(L2j$2*j@IM5}S4p1Rf!+FDS=shH*eb2?q8I-^zBV!#Y!<$}2p(P%hJVp2jwf3+p z)$IdL3&zYv=c|n-c?o*s?H)1l5U1gVxxDvJk3oegt|8><@(V2E%N>g^kR8-aQqf^H zR=a~!qtVvNmo2(8K=pO#v^{_kOE(;P`+CT$DG8r3x*=olB1Qo{gbIu<%i|N`Thiqe zTf;~R#0pdi!Sk_Me{H|Mu+I;dPA>MWBQ0}E+i9Ox)dIObzq1pxt+b){Qo>!`H#+>d zWpiwpNDAnyh+};yqZeze%qGayoSDd$)PUtm!i*BD0Z?UWABO(Q1uAWl;Z;-bW44M2 z3C+2KaU8Q@z1|sbNBR0X7m5l7cjT*}qCHkfyg7WIA__!36sx2Q?h0>ijXrLUt-170 zZ8APF(Mr(sxqG&}r{&@DE1Ta|DfV)n)zE?n>(Ay=JwKWS|1Y}UIx5O8>>Gt4XGCf! z>F(|Z0cnPiE@@B@=@g_J1VKW&QvqoS=@1Z51O%kJI|StHdEWP1=UZp3^Pg+seeZjA zUi-R!fu_{$s$oK6lDxjd_25$yhM%#xQ#n~r^y)^U23O^y^))+2@4|*c@GZxBFY2lq zo%j=Z>_AvK%8~dI@c8)B%a%05+;n9_se-qbe! znzgB5oUg?XU7kHT)PS5UdugW+WDv#)S&-ifxOBgaK)G} z5p+di$rma$cQJi*1pAMKh%cih$dELfDDO2K9z@gw{rJVVHiPHj(_y?mN8OX!hT!7` zdND7C>Z^j7Cyr{mB(Ye0!jPK9*;}=H>*5{2Q*WHXpns6!3Dh-&vwGg} zZ|)kATl!Df8cDJ)6gTx?+t}M#-^<+8TK>Xh>}9m*3_?YU;s=2lP2>9G{ufo$IWo6T zo|(7qEA=fj`Q%{Q(EB%~eh_g@A%tjZyHOnLO}4-tNos?7;MUUHTuq9jwMNOTA&&0v zCTQ9}@ygm6DK4M*hY~(F$YSrs`gnJAl`2U@9$ZRsV|Dik?Vq~H(%(V3*Phm?R9x#N z6&0No#Ff0Bx4ON8QC&qU$@t{t>=)3J^K;@-7@HqD5y>k&5~h$P=duPysQJNC^moC(d^gjD7+Kdb`;Iq z_s*R&b{%Aw-W|#zOb$kgrr12178Y{S=Ff8q8JOmKbn$$a{tO+iL>>lq0*n>`71hHx zZ{E17D(Ac4Wdi^e&o|yI2bZF6CxIy#U_2(4EIzAL$qKQ{QYXH8inH~VZTeQXq4~qu z`s?JTYHmaV@nYoj2Hf>REea2Qpn1lV?kG!O|l`_P?mHo2|gKR#1^I{Td}p% zix0|kl9nWXzZCgveP_f_vNt3$Eyp&h0MgfVino*N?}CV>>&t`EB1v;7PAEUueLlWD z9b*8M1{4_6IANX^cgzm(HX^i+fWQ1M^tki0MdBB?QbA-FD`LGHwZf<{LS=s@b1I9f zcsN3;S@QY(u<1fR6KuU{I#G=TInBG5rnPFWzLB{sy!p1m)N$6;D!#^IH#gUyIIPP9 z1tlb<)&6*lJb-D=Kz+hIwA1I`4N3)%^uC>{o#v!qB71R5_Onq{5S%DaPXf>RThHg@ z@b1-#Be#X2{3`ldH9k~zU#xH+zbT$h|BrRQ9d&XH$*-i>bK9=xGnF+o`jR!Jqrs&q z9W`7|(v9h@xtnGdF3ZsGmh{Z5n6*7g*B=BFTP)^Sy$Z`E#^OeC2SG#6M=7ixf<9eA zIc`zWmmPp5K3(%b5d3u->DllI9b}_ZW~(Hunl&?C|H=I$NORVXuD2AzO+w|ku3ADf z8;BixgVztFmKgO9L6-FhmuZkNuk6We{k(T+*HG`9WWMc1Yx)f%53v&!8cJ~od-Y=& zUN6R9Ygs2E^XKH1wp3JBnL>xrLdZ^*U)xkPLN()%l|ejpkLC4H>p05OJxiocX8Y)- z71~u)@cH@57uvV9Vb>AMz?DKlK_TpsmQ6_2h}49m;agO?|#lP%+hQC1lS1^)kB4(P@)|j zcfB4Fb&&n6BR2Je_XL0(DUJ=TxDVcP;d6Ljji*6^bAlZVo9K|nAdJk+^qia{ds0cm zvFD$wnvFqPjtPD*h1p|E3hh$9PoHfr*MCURk(3)=_&eo!4oA1-npu7|Q&F5F`L4b> zk=o(Vx5b2%pk$L*8&V!;=c}O~!HM=PSk9Wj?cozczXFu6*}@i=zGxS@-|;{FyDCF5 zCAL$DER*wyXU7kp^RY#ozfF?LQFi&kUQ67cKotvuW0+|E5dvfrl;hs_{XR?d)_Lh7 zXTiU`Xj9j;w$5BjHqEIR=FA#r4c+Gd<}1p9<^HzB^2dS=pVwKwtB9<2J4%`?1JgZ*aAsXa715eeYN<>F!cL?W8ct1*4vik_a>1igg2Bt-WmEqxvnAaZSZ2J2g0S`j8}z8U1=y>uuxu zpAG&+@B!KW-%0L_>$2LJxdl4s3G_RIVfa~O@rq0q1|GumyEIJqG;BR))$`fFEQc285{Txa%~7!@_EM@Ts@DBb`^g~ z{X_WX>_|bO@o-_&FP-M_QXEW~6yos=2o8%lMUCo*%5ErAua2P-xX3>imf~XZYTjhD z?0Y8qE}NrUEYhz&xYU%zROR@s&3eJ^7c=@c`2GEG9Nywa&H|i`X7d9OM>~F56-2>i z0c8Q)RWd0*L6F@sPR`>LP0E3{Pl~&;W{s#J`trDL!lu{irs9tsvI5)``uFqoWS9?! zb`V^DO0+0^HUCN-VgH-2SA1Q-dcWoq!*(Br2aZ7t4ArL~?ffn?Irg}4U^P~=gEv#k zZ{8t}QsM_4+VzlsZl2@YPs&ayQU7;FeA>g%e~d0dv_>1sf}X=qr;jW>5iQgF`HWYW z{IpMk==&oZc?d^9`c`7J=}FI%YRB*YaUc3FpQ%?wlD^v!cWG|;bvF0&Yj1N}1hkM@ zJty2=QM!r?t#X1q<2m;OSh$l?mFNq@S+cMG^|gnz1CK3$^~L$HIR z8=kf+4$~-jr?<{4ZL;MFiDpRKiVMG*kIQhkr*E@s*0bEYX>UEl^nF@_NM|?4!lh!( zvm51MKCC^fSFUNPz7H@wJtaR5xR&~z@OtpwFSW#XSvsFK!%#Mc9&5(TiF+TKcI%(} z|GyO>n$OQBTqn926vpULDnErvu@LKiaFf@6_UXcSvgv7t_n)>v(y1&lo{PXO9S$6h zR}OaHxl3`}#eqXb!k<>}RlugWDzKy|3R9r{YbAbgV=s@v_2b_55oypfz=ZH9x*0W~ zlhnNr_*{%d$Xk}D<>bU^+~gczR>oRO)$I3;N|dR_&`-z7m-*Q+Y|9Llt1DWlI$9_| z52Tr?|E|-(X+lATh`^F81Pc-rHHf|J`TWnP29)r1wbZmAJQFDv8@vXQ*OM+DEyZe3 zp11X}Ihm89<-M1K(vb3<2*Prj9u*9ka9o{sF04mha~DgafZ_qzn2eUF@)gO`g!tcGfE?{I}uSH;9qGD5pdE@MBR z(=@2cM%Kty8P-DT&0FX8{~R49Mk4tTw`-VccrgldHwE&%`!8-7XZ34LUT5?ZUA?@1 z<>P*vsT`-)+ZzqLp%No(}Zfg6-g>>A_^cC`ZF>_(acANciu zrK@o~!(AkMh&hrWMFEhJ11!%1LcFr)-ftZ=4e(g5c|9!vU6XAW@;&o7jHM(YGv>XT z!3vW2(C&BMYfh+3kc8M)(e9BHKjhCGgXtQADFJU>l($iWNr|ep_6? z3#V}XUFGrT07KXuxb3Z`hLISv_CwcaoZXeqAHmK_zMiSI5KX&QQlIwy{qIcvBt3ne zqLXjHimc~ox#zg&l??5t^75s0KTh?Quu|{zC7b2*a~EqH3k`Bk#%&TmlsG8Wp8KUk1VRMN%&C7zqf5^hZjLURbIB) z>t>r+EMgB(giLa(#gCI4vXV~-1E|Cp9wFGvKCz}WuJE{eKF9c3G#y504plD`#b**j z+_;d>dNr6^>_;rVOUg2%os|ky(kbTnu3tm(IwOJT=;EmV4c0BG^nx^*&OfYmhvHbxE`mxfXCY}sv9NFBFpNtkCN(VD?B;eA(ag^ z31I|6k-cujnnoOMTfbi%sQFfUelreV8@%oZAki=0sTJQHLn$OW)&W?Y{o5Ay|1<5B^E{9sV z*8%0c7%H*#Pg&@!FaANNr6;Z}>aK}F;iX89fBPSO1e_xB=(Mn$tj#mGnS+iM1xzJE9@@5$^}@8K{muAKVm`g)LbI}S$msdYsYJUW+~vyjp1fVRvZ z`dsi8*^pX2^~3E@YYDR!!^peYrsef5aYc`GXXnE_@K8%Mz$YvqrGp|B%P5AQGm0LpH-Gm<^3b# zW+xEfp_>QN0Yua?3o3|fzix3bp{qXYUp1eKt$OerKSVpeXIZ6{HPs*MStksI5V7F1 z3aVrH;1mDD|lg zr+NF7`st)BDxDVr07`u7N8^IUH-BrDxeGv(RG2?*E&0fk($aWR13JXl^_BzQ?6nN^ z!qw?$qzzH$K&C;ZEIVlW*&8Z8K0Z6qd_9RZ03xq7d)guY6$YyHcWnW{Cn)-S;xh&{*>TXW=ZuDbQMZbY&bvp5 zwJ|BFJM9vvD4hs^{`5p=1{P3`zXY4uZnp9mDBYliZ88g$2Q|oGg1U;{G3og@Y2=F^ zcEaDhFdW`nz5eJ^i=P*G_xH;MnLt*Gz`xWRp0XQ`6tBt#pxl#d*U54i5b{atOUOlr z)}>qGOQQn}?F{=Fx3}$oZHEOo{6B^zvpp?IIm+6aXg4x?cqI)mWO)ac%=cubH5RBy z3GKHX*Vw?Axc%GJcoW2^+-S?i49opk<N94fBGP^cPz`a~`NyZi#z}zp7aPl#Vrkq>#qxCoSZmczSb*j%OB1y8 z(!uc%fPrF6Ze$jo&1hf+6H|53brn$gP1RLP#x^l`V9b`gpEXaAiFp+@EB@(9?#SV@ z$K>?>>*T5t%Q0K!tcfs^@g_se@0IdqQAUh)kO56gRb2?IUj$S!%T!khL#Mvt>O zmi`A2sc>_#KLM(egkV4=wx2)a0}$m-=-o-i|%_W%Q%&=SGAugcDmG+iS2+ejo}Ef)*(*&UjG? zP44H}CHXwY-3wnRMLQbYw~=e&`svJY>~GyzJagq~XxY25U6F=r?0BZWtjJp%8594X z(v_nIVCbxQ(V?@*+?@f2S$YuHO(QLyudzVpe(mGnMUwjn;9g-3R6yy|l>Ice?%fQ$ zLg4MX{dS^k_D5XqQbnX)#xu4Pw@+5m?z#f701{^VIPYf76CLB^9-yn#40X&62M7_E zxKs`i1ly=dFWYXeThlKmB$KghcYM}tHdC6XjLB5ba}51FbVZXanTR9SPG4S`{=P%f z2h_ej+%ZLcq{;$f&g`lx&bFiO2iP!Z_gY4>B`g0{TiU_%f8{-;<987UWWr8lAbfqf z@Jas9Q}s`i6T>-HI4s2J!&8CUJOJn}_L@Gk=0fc?5KJpJS9++isd zF0W*}#8~e74kfLAQgE5;cZ+A~?@;SecOCL0U0MA|bCBiH@@;XYVzSZN!Z;s~u%KZi#xCp? z>({VOg(+ceHI^+VP`1_i{@TE@_k>jFkE$<4inaEyEOZnbMb+ODhr z;@remg<@1x6h85jYnKj)pg9X7t8*&e`D{z4;d^wU{;rl8Tqp$y*L!IFsPHp1p(>o^FjyM29Uu;dXP|Q! z+|K(RW?wDO(I|WcOWqbzZA%?nC(}BT+8{eS_fvb8ki6*gh#q98DcPZ?)FzXNlOpCD0 z)r)L^KqyEKwi2i`Lxqx{lY4yoC7~;(um6^bH9xsSe_0_S9Ke{uG!DlwBhInf+AGb> zBc-&$;YP~wDB(*Aewx@iYbr}tEgptE7Tr1UNDT((ncv_r7xhQKx;ECA^^=)g?<3T~ zR%A>W=V;e7hqwD65V;tscQBlT(shEGKf+KFAQ6y^d>JI>tU#GH|8o7aWy^!weNE2= zFh;I97q>Q8>>&J*b!~Z`rqxNP#TbMiS5_*-JMnqbW^S=Fi74;zB{!cslX!lFCnxHY zkeIUy!;SQ-xW6u|wz~#nx&yJ+ze@pp0+@%B zLE!zlM|ju+HCX_@vh4lPr0~iD)Iv)$h8ky!z!|UMcHHM&6$GPrfrv&YbhMCjdk%m` zHy#2Q=GK@jK@QUhrO85Fh(gD2qx zALXL=_66X^JH;^9qo_krXow{>EnUsIfMT zfU9SyT+m`Ftusvf{cbDu!Dn=$?I%f%yL@5R8s6ZU5yi#{I}FCGHX!j76&?N9$ESIw zI9XM^ay_fqWKvIhT=+qsNDZWzHP03xp2q*pqVCP0;rNcXNBkmw6Zjm0aM&g%zVih) z-#(s1WMt89M{+rJ00TLC-N)Jo<3lc1-rFsY^*f)#IE``9F(FN!ULT;h77}br9-{d` z-}h=0;7R)WVo8s0GsjN9r+blGc)w(x;UHV?SO)Y+?iar*Y=5~IG_^C&dvdlcR>?jg zPQPGtQBzu~=qGLut^Qd7L4?EID88Kx>9YH7|0o82lRQWNgIB878=c{%Vs+uZrgYwa z%~7J6%iZRBl442K5+KUeTG&JUr$C&HSvZNfrV>)f3|Y;^d=WO&VB|akg*jj%%5>dc zykP$z|Bl6B5erfKY8vzCaHKPqr-QYP$>ZC5 z@e~}jR!?K+C|k9g*IXbI?VyBONMLx$a`clt?~hRDAE|n43KJb)j4T+-ix!&eFbq%is08+%c;g0hcLwZ&G2EOREWtU!*4+7K?UgRfE;o}5wlAA*#RS2jOcyX zrsFkiZ?S>q@~jyPxd%J9tdkIQ18_Gw{N#g{a^#7|q(&_n;@fm;wFO3f0RYM{)BgVa z6P?jxD*8u^r&DA*(Kve6phij2Wtf{Lx7nAlTI&J&yVv6V8dQ-R(}GO~xh+(rx=Wd3 zU%Lb}B}2PHu?iihKhfgTX+}%heuDlISx!uNfIvBTHw?4r|K%Y|TOt`D^Q{5noPy^(;)L){1; z(6l%`%;dWX{ayB~RQjOf#u;G5qJN2^vk+=+>FI|zm=^b#!!NVt=iT=?v>bR*hyKcF z_^*4sz^iXHzVWIH*E0aaT(FU22!TC@t>;&nwh)>$I&}eXvz7%X5=_0M?TOlqfyJSP zPQ?CPo|;0TCEg>8}(fHB?Xc)y-RD0-bDMF%g*0l($jOW4t zLds{p#aBNM2Fn`dMTG{d)G0D+s;q{w3l28zAW(r3?pe;@JlrTH{zTIT7k2kvorU;C z;pJef9LMV|;}%Mzw>Pp|&W*Z1mPR-&7A-C24puPbLV~|&%kGlMx+K1QSlRkY=KwpK zsDkc_78`8ZPjb*Xr#b-%x^ervK^-JPe@W{zRGBr5;Z)^?lK9{9`3@4|ah$9~Q9?m% zNuclmWdjf^?><5V&o80u2>J`-K>W3!)xo#b7_PgT32zA{@WE^4M!dq1`HOH26@`zdy-QByqJsPH#tbVJ`!bnsD&-Nm6At)&tq_fpFa50 zm;WT0qpMF`fHWwWW)|<<%A{x`C}4{rlhVVXZ|!pQ>U_| zND0W z#y_)Y*WbSEjM0M?g`vf-1m~E2l#gKw8>}wJz+G*gx?Ngucoy7tyE3k!PzF^sZkp`) zOWA1qLDM9GWDNi^) z`|YeR`xd4}#Q^&Q6x}JmXy5ycTj$Q$ZL;Tah`N5#z4fr?prr$1zG{9tWo|`GMWS>1 zfzljHxUk!nKe|Ig9HnHcZEf@UoAXLa93TpD2yY2!<>*Yb@>T(dVO}?EZH?s68*cOy zor$P>Ih44j6r9@^y2*1D`WR$76?)Er>6siZ;vYqG*S_d8v#Lb7x@$Mz-~yaTujLQ7 zo?pc%@~WO}qhqd07#GxnkB1iI`|>G_r^c{2mi{Mw#NA}}5yo4jTRDHrOKM>8Qy8AI zwm~c(J)@C@r=Ld-kS*nyN!J9wD#44+cSbecsW3jf$HVI zwN`2`b%W^o6uYk6n)H@zUVu6H6?1EnI?8dW(amK*2xyi8G^tMw_@EM??-3iJO6|1aw*W|1)CGrbNdA-@-b#MYl?y;or^c>T5f{Hq8?8f6s#3L zi&e?8Ap^Wg3k+@!t?Wd%vn}l^qdLq`%!gKYMyRdqM>lrxlsxRM8QiUzsZXQs)>X0% zphI-H_)q1}ih>I1Y`aqNxr)aa+;(7S<>@G3f9f3y9?Sn` z)Xxh6E$M2pc8uH+xeyg4PBQ`-ZftT=QWlhO^J@zXCq3GA8@`mpw6L9Ih3SR{;*K2R z@fq?dGwb#-@Ps7s^bM%7dA%*xuV*_x@;DxA)<=CwcfuimA zJXKluxUjK<0S+GNv1=A*;rB5yV3v1CgHGsZ$c*m%V~atA47J5;AYS?wuiT`iueUh^ zf4@&q%gH!8K9}`Epzb`uD6})AMdXgkIn?mTh29+!-U%rtG=hZVn)JxO?G97m@(@A2y0G%1?NV2(x=QLDPXBOzriQFV5L9*6tne67>su9+ zjNAiGP>xp5t7Q=#+F`EdcmJ?IKgl?3%aR#nv+E2`Oe`%zaK%3w+o*w%1Lm;8Dq8Qx zbCY0tl&^OIxD1>7N2J*7EQ}H9^K-cmkz#)l0tlLGg+mwO;|hJ_ycvW#+9p zDY{BWf6b+c?gpMedu7PXb>CXayk@Wf>FM$HPV$x8Pow#HVa(&S;MK|B>Q4V|1b3!k zio2CD!+sUe+7x$sJY(~=>)fC8l#?4L=PlRaGc6(yIXdpC)21}~)Cwb9?%)sA`58n(XC$u!>Zq= z@v^R;J-I!+|5C%njnI=J6i}Tr+tG~{lP}GNP9v$P{9(@%O zZTAAA-ERh(7C-jxw~LE4{dB%PTU)aceEtLd!B-P#;h4r%KpoZxkqg;@Mj#x6=i@_^ z%Loq`#RB)GnNOex_CFj`RRtLZd-@9;O=jI;KYY;rM}+jS-|K7*qt@nXwxl762=3g` zAt*Z3oF4npU*`$`9@q3hMzxIZ24UboPl1bjVT#|aBn66wIEr8EiSRDsA1k=(Mky7M z6VZ-uP2G7-R!pPv#Xswee)&j#+5%f#iBh`Z_ z0ir9qRym4oW4FK&U-JuCKerstvE;GIog;dp3HVJ z`aDVZK?8jZT^Q{1zSM_=4??$3uKj#%etyeZ!$D=)Hz8s9_O6uaT0wkPo^?HUbeE^&rC`@6dw2ms_nWo0iKyH!b{1;t4ULM3_Ij=CnxxV-K(v0-fPnTG(^hR3|zy11E=JxismyNEEf26Q4utuXQ zC>4oX{^3x=_2sFBfg5vwfIoI=UGRb##RqxO`i#YmubOlv&a9uFTUFpXh9r*+`|qZh zew3%nmbsV4c=k%u!||1B6!Dw<(yW1wP&S{vR4tEYc4hCs&9Pl?K3+cv@H^{5S{>q2 ziAQPSWuvpMsc1{F7D205T+=eT?y5ix$nst<;m{g`wM(cK|Jf&*a6E%-xzec#t8HGY zshw1i7@FEC&?>VZSP)#ZFSfpw*DfPA&T8#manuYxAD*@zd1`$G2q*=>i4hwH`wU~H zT$osxseSSvNZQ}Jn`B!VwF1A@P7^aHr-^2vqa&)^04=5P!~3VSUSzmOmx`gYbSqNg z{B@^&H(kNf^hWyBDJE|G`-Cr^py%s1Klj9A>anx8FO-MB!fEFUNq#0I%_Au#$>+MJ zP*hy9+_IS?4*+eCv{)zQ>8NoJ9bV)AmK;S!!WsD%@@EyD$L=jxOPj0dtp`Le!m(oX zB#7R%(CY84MTIza1$PwqqjNpq{ESbw6go>#!uwD!L_=+iVcqn_jEyfUB1Yzke~LD6FMZQ0XO1XMO3|1Hj8&7}ff;gGQSQ?SPEE5^pW zpcpv)^i_Y7gZZ9O$$pxEPYagEH~-Cth=d?HbMp0HhR=T<%KDebMaFyqKdV9V;WsbW;US z8xxRlYtZoXh$1cC=Q7yEpP^KiW(f*+(|1_?8p`%)##@wly5GOx&9uuTbkh_rrIF5* z%hMHO%fSl_V37GU0f35K%N<-ZG}6}Byt6Vf3f|ELVT|~%4f~dQNa@(-a_o6&&C*-J ztG_q-DwONdJ{Hr#f`XbAOl|brq;5RbQ&5H7%AFO39VVw)Po1^Ac^^+SRA$}jBHK8u zgF~W-F!2%>e44-7ONS5NSdaX)J_3?0w49vkozXi|%i{@w{qMLukrDUzpEY6Q2G3ErUeDQf=_t<&RAZgcg8gwM=E)UKrsedZoZg}(R{ZvvsN$LF_r5d+ZQlLmjZ5<)c00^*(K5IiY937M+sWf2ydxfW3*3E~Fg=-%-K+NjZL^pzr~RYAo#k;Z*59Cii>+#}IR96r z?WM5p`C~vI(n~zF$3TgI=Ku~28u2(`*36I5xHFtMGEq6%uEAP{mn{uHrU`K#`a6(C zyd~#eQmDr2i8fbC*q?d_#?_eoVPoGq5qQkd58?G{kxLT(s_hy>1lUZ1l!ZC{V-2Y0vIzyFc2-k8t8u72cv;SxtJLjIIR9ix2#h?qbG%QVEx z%%GHna%-1^0`De8RXWE%Je!KzEsv*=STyW*rw>*!XPDEyA*Lh*7|-jPuz+7uX!5C~BYG*ZolB%%TIb}HOjC^g__8`4PEWL* zbf8mI0y2wmyi~hAYaojUX#4oFq?{z?Sj6;wY?h}j<8`>`ZSW%!X(H)rN3Ktt~|**o_)CxP1AAL zWm?@k`+_Qj_)$f^o?N}$RzipOQU~>A#$lc5M}}Pc78o#Q_;mbx*}S<4eE5OXzj=Qw zjyxt&R~Lhp>tUG7cc> ztGUs@1b?M)Kd8L}Ls$E?WS$Cow|3$Z9^O1P9P+*XE}=4bU7?sIL~XC$=nx0#Z1f78n&EC|CI*zvALK2afh>wnr-Z?ggx3I8qban=IpU4|%uaq57CI^pTD6FV~Vi`N_ za<2t1Ee{VK04oD--h+(*0laha=}M=%*SQe@CWG8}Lh=|TB`Nds^C1Wb8rt&i?yyV2 z^0D>L`h4)A!u`P?U9>T<5pjwPum=xDUEGGbnk=R^>+t93r=IxlFZ`LkoR*Fw6NdnU zc_J73v85#o&@nmW^ZpdzY^{CF*^xqAqX*y(z?VII6B)+(cnlV9x%gw5WUlUd=5_Ks zc++K1^Cki$fl`mM@UyfGBc)ix$rOYqw!v7424K&i80gD_!S@8!yz?m&q~Ownr_X{2 z6b%kK=FUfldmdOv#uJ-=1_lQMI4nXhCV@bXxw(0k`-)dxsDu;pOlmCaoBsTtOq9yw z$H77GKAJQY0Dkt2w-wFj_}{{fgK3UN!Lnnrj8lkSHJe*K%f8l@{*J%&j%|7%&@=g$fbrDFjB z)Jdw+N|Z(xF)NP2uAM^^I~ zC|-fk1K_W+0WIHYwjO%<$D2m@@ONC<3@e54np#6eXEYki_@^fl>N%2+z%_wbOOC}? zL)AoaBnSR6fq8D-3CzDNDah^XG=ollwp2NZHK}VL=Ur>n2YY>a>W!U%?d3~l+7i0? zbZqt0C+~b9t=@chF^3UXW+7(|SB-d2NA<~das6{@6zeTXBm~mQE|b+wlc`)!7FZWu@t!v3?0duy(K>jEvSnih^+V%UW27 z7Luq_kXm!YJYRb&^eQcmg!B3uxU?#rxqSS5Ay58JC60)YsRtaLK+a5S{y6ZijBE?c zG}w|#K9D+ovzLwK^Zv=j{nzbwQiuvI26j7xo@_CzhJx7x_8MVR|Ht?b@>*j)m$hCr zvc_Sg=o$Z4DAyUfdMvC|BdgUcMC z*HsY9-3>&;!mjdS!?4X55o^uXt7qF&0bSS&r6s zcm|(-Nj*!F94XWD;gJyqRaKa(np$7LiP2y7*c1PTLN0EM3mRcVF%J~{t!l5>u_jGF zu`Q111R%*C78Vv|Cc-H0FchJH?Tgr=50-mY%$xtQ=i59p;7Tn}TEu=-3+jvZ^mTW{ zRqyoijSR!uU!V(?Gbj48WfyadcONIWyWLcu z1to6Ly2|AcuxTkLj$eAHyoEl1?S@w0-nfbwzea$WIEMia|wHRMJhOl@#?4Yoqc%4$Lt-k8C`VvRROza_9!LrXYHl3o) zurMq$)uaLB6>+$oRV=Csb!fe#Z8i>I-IP_fWrMAVXoOR{}aW3xyZ^Juf3 zlWI8=lb=iG!DM#4YLmC!izZ?{(__zz-46=VaZ&~? zaP+$}8>a#)4uTlAP|vB_eI zY{#o=X(v|RB~Wgx^FYF%bZ+H$O2*T$*r?_y=NH_58y3A)`i?G+26vG7=nb=3?MxE3LJ?P)M*?*iY#^#`@_YaX}-go^%XpJWNR>?#4poqYBy zI`A&aDDV^(xzhnVyoMN+gr$*wY@Z+XC3wDI)YZB&Bd7#hiH`m}itpO_hrUB=_$oQ<#&-|o-DtW}K zuXiNX9e>#YvTuB(poqv~bS@%|x&v*C%Kk}c3mf)+o0=Sb=>PD{cfOwHk(19f;0e(}cy%DGW=Cj|>&r%nRh{pzd&^snWV4whWF^?vcXe`0!&~Jd+erd)pZ*JSM=$MEk z4NFJ`Gnm%DdV2c#P|pdl zZzf_9U_q;6uB?9ML;z;d4p@Z>Qr2Cmyr`r2Wfc{KYT_VbaPjgY@kN-LnejNt#KK2$ zcqqQ1JAtJaJsKJG&;l~cAnU6Enz>)TIsB?*ZcdHF-EglKQ`(NP(xzHzvXZ5SShet? zg3&al?_3Gn!~`wv)6=GTUK}pI1wV6TYoc&#wxJUHUBE%hrZEvKCt@}{_e^vBtaEC zSePJrnF;ksL}9Wh?3^B;_QxqNFPF<2Z(Q-*odU+V9Y%q0TR2b0!z^V~!j+)NgDs2I zTQcx%xQ~&|;s|)ZgQmZgeewh&mCGbzxB4sf#KeRTAdmyM20=PtG z!r?XE$dw%s*78QZ6M~M&k&I3=_k&(8`14TvZP9@+bQKu1$X1)T8#~4KMPp!wRN6qi zke`{2%jq2pEsO8O%0->KgwQ?itW%q`qnhhMPY?P4b{FlRAh)M3%YeQmNd=25cB-|t zwe5Z(e)d+9H6?6R*V45hsmoR%BM654zg@I7P<2^H^uT}D_CUu;DIGAaUX5R@yz01C zMDNF?5Z((}2@AZQV*hxazHbXr@B9Ex55r{Pratt&bd>%1{5sFADk^X9%TvF<|FfT@ z8D-5JD=dBDLlpqqjTL5;DF*1G&I|$jqm9g0F;An}KDN7R$G~I6@@L@OVE*%>J_YYQ zYO{c-=lwwk(XH#%k!6;+C+tj$Yxfp7$~3RUaJVc6Ty_l&ZMTWDk)^I6%4$TPi?{^_ zK}Ctc62KLjpEqK*poY}HzXEXz(R=L?6)i1%zzpHD=tObF&nxd<>6P4TAz@y^22F`} zv%1q{1Ytl^($Zqd;7?tdzu6gO8M@#%zhJhoN1l$qgWSB+gM_dJ1qCg3r#>2f@nG{h zTzDuWBa_6J%HJCi9-bjc$A)2e+PG|hw}^U{P!~}=kDR5(j9@*)7WNAZpi;m^-PW*k zd^aAs?$5WtrTorhpFd}7e6`4pi+*-=BswOC+(rbE+X!;oefW?h^Bel49C8D&Qu+?Y zqK_^J!1~F=Jy^|smNAlkNHa37g{;{8Yv`O=ezE;3>s65# z8$6j?-V*f;`Zi{y@13%>4De4h_1|w`ZtYu9s4N`y5Qr;c7PfUNJUMB zH4@%~?Hfr+q7FFIPUd4lkFr8I_(q0UvK@py0Nt7}`8;8->1u+f zb|Rx5+CX*~w6wM98VN6Vr}0|7_Pe{oA1v?h$EQ6DeDvRWRB6DItoZdx*o7Vg9IzdH zwz2=8^$S?U3eL$&)V}B*a>rnJf|%4&EdZ&Em6NmAbJ}cRMS;P3$c`UX2zfyFYg=Zf z2YrJAm$>Ek2IgHrorb#+|LfTgwH5qM;H({*>c26XY5y6VXqe;Mz5neRx(h18Z^8P@ zL>|`yXY;)9ap7Pp39qHqw=yKh%z&Rkte8N_CduMG?~29Uy2nq#GD~gVm;;?j0W&sp zWwSpc$O|fYe|styr|{%SzGkj;0YiPb4=@jK@$|HHE%=jfJDd?T3at^Xy~eLWRhP{~ zcMu!s>nqMU_G_nRVqyXbeE#3%ubNO6U-I1oosZc)5tC6cuh)@}NLo7wLuZ(RBO)+~ zNJ$yQ#2(fAN5YEh0kb$oC^gkTE*Yq`)ee_;W?Mn*K#116r`#gPyhQfjW`?v?M(Xw? z(#b2p{9!2?Dk@zXB7Yd$SkAs=W|}bI!y=0F4B3hB)q-nHk)ao)A1sKYEaWaEk1p&y z&)OU1Hs|8&+ahXh|1E{h#oJq^+MI-iN^TU74>ghjG`Ad)B{70Nq7;410a#!e+{zgQ4PyhjtheB&>Yvc95aH@Lt)f}5h)mn2M$WakgQ=~OUB@=V#TY&Iq zMcbIWpp6aLTP~bn4N*F_wfsL+eRnurLA!4VVe4!qN_4i~61_(6Es0*Dh3K6ig6N`) z5WN#oqeh9cx0)b`UN?g1y>n-O=bU@b{m0{Z7HiF#Su^v_`zvpwdWR!M9F1rQFp#GC(EoJpTQ`_hr^nl5#RkMisXD0>a0nt@yH!PP zI0NBY845b}4_KA*FBvTFgO3qAp?4)ojfXfJWzy}#<23ET*v9IK6-CF>z>qs8ymaBB zd$9G}vXDZrpthLSnP+H&78%vaAJ|lAPG3xb6a2~l2(PoDCe^rJ3AISLJ#W@Rt&}MX z@xbTmy`^%BLUeLEaL!E52n3W&YJ!>OV%&j$)%(AgrgDtJzxzol(07?nKMF0>s)*^J5{VS_azm~rr(DfH9P7uMHtG~2~)Y2 zt&h^sE!j^)!P3c=IuN$2|C(ZF;A@7N2E3sFv48A|sDF03)YwMZ$5{#Q;>7Bj9mBsn z^XIVN@@%pUp!xE}>)i9mjp1bvVQg2smFW4~MasD+?YP;Q)L1TrX8&r+`z;EFz!WC- zbxsALii}ql?S)N!>6brp`it}?mpqz8IpJ;drb}C!=)8m!b$|SMB^dx;f61VkWhzA^ zQDrg`vU9lnvw9-q5wm&&ExYWGY>PAju?K?nVy#ze3_sI|;8+plZ zM*eK^m+C)Mj?@-Seija2mH6<82J+6F@W9Ajkyv0T_2rnA9PuI|MUR@;>BV zfAM?*)K9oS@Qs?Y+{@BI7?JaYHhuhF%8QAR)HfUXll@Trsv9&JFUvoO2hF-!Yd)6Xz4N%!9L{Y{Nt- z7kJTMr?X7?NMN}o21mvdkUmYoyeK*!EajUM$eYE)j6NV=?wY}j%}##lqxpT}H1Y9b zR!Xn+64N_I`VMM+(+TR`^}~<_ zSk{p6O-A(}A_Sec*}vfZrNQ%|YIg>zXy8hezuh$Kz?xRGWPRoG_p*UVnQ@GoL{HST zUTZ@1j(>0h{n9Yqo2zQ>zpKU>!%NLBx^5?R?UDbGSnD3U3B&Kiz+dpz;P(Eie{Eb{ zmIkf$PbPw$qzMTX>tv1$R|VD*mb*muW+pDX>W^E+w7X}_pkmvMl^(sv!QRkZxFMG2 zr{(D?-NZD*Fyb2~zEU3%oapju&I2w92@}^%1xfj~lwQld-;SYJ)Dp1gY&|b~^SGFg zv3r8d@=7bqD9~A?8y}vT)5eN2bsOO&z3|iO(J~4OESO+?y!JNWjTsY~Ts6JR2XU>;LTqAL$q0_w21X9A~yp;&oS+aTsLU**8rYu#UK)Hy73Wx;U`j z-dH_glnqEEf^s$Bu2Z~-uE?!PMB5-iGEuRWmntY~vIn%y|Ca1BZ`Cs`ms9j+AK=^? z;g!Omb*?P^S_!Q>!SU$+oZ-hL2LGmTe{BLeQvFc9*^e{u#)6@C6imrprMeX@O+PRW?F8AsWF|3P89Z8C>;&i>);G5$Y z{eqBS8<2Ns!{U+AMP4D_tS~!eZL>-*JV5WJn~mxk@PjL2b}0~F_%VxWaUG59Qm;{4 zzS1mHHsnnWB0YPy?`Z#u{}LW1w2RF9>w(LuZJZQQmi?o1zASE7Mb}pbWCe&RDWia_ zf(dY3_rYFCOmU+bSVhXIs-;RDKFQ+@;&h7czO0w%6s$5etmb?D2xv}`#c{5)rAh?O z8x3!|esbERm^a*_Y1E)v>9AS%O^hrh^`8ghChm z*Dno|TU9xUxS}$GAa)xs594jMRnaU02WpS_3O6{Rdvu zhjoO0Y)O3awY$OtOVBv(&EA$g-p-@Ar;ugW7m=xScex$m_+c9S%t~5hOK10O zU60g_CSK1VzIpkGW&Tq==rV8Vm`t|PG@?qrX*pZj`LxiJKK__-QS0vZ23SC&`S|#_ zC2H&V>C&j=f}{4JxxivK#uLq#z5OH-=N2S$ZLNGh?t488*4CdaY%R$zdn58)Od=CS z`bjP{Q?ir0lI*ud-Sq-g+dWeld{b5RoJHekhT+@6?M)Wy$$k7`JG)mo-4PBs&>xr9 z-Dhcm2*jgehgP0^|s&}u4%_FSZHA82t0;*{%EbODFSWk7@DVSm2r9`D}XXjInY0>Z-sH0z^u z8Dnhi+6sj|S~Ht*230zgSwSvjb&(WgL}ffoltx)$K9 zmSxl)frv^~ig&U_cVd=l)^PR*o&s$WAVO?BC>xEYS|xvuV}X3LOG9>P^CDIgUNADv zk@s{V7R*uy3l%bsa!*h!U6)L-{)CN2{N~_Ps0wAi?8jkwdQ|gs+zvN|3LB*hJHWbGmD8sl?eYwiZJ-r zglWmaALwuFlXYnH>^Y3X`Re>6{s0lqi*nBG06?G#NEON!_8E|_rLLTgSJe9(X4*Ny zr_5MK(9oGRo!?zOybh2gUTkA$Ei5fGf@dX+?29*Eg@36k{VMm$nKGbtj(ECA<>&aH zO*f$*CXNinB4majGVS}tt5}s_X(Il$^*(vSUE<}X-)iR#_3 z9XXJ))xnvpv}r5|zKOhEUtOL}4ox9y>W$UUV;W}IQvYhElX=z8v-n;0vm`_$0higr@ms<$G zHj{7qyFm$Nq~+9QwGY_$ejzx$3)(v=tsW=|y$ZcqY=0aXw-3E=S{=%SuLg`yZt>^B z)};Bl#{t5P|7D7Lu3)&Zgr%&TsYz`1ng*_gzCVo+=Y~F zRZ@p%Z_3}5D<+vhoi;EOVi(&{xk@5&Y(a8dN!#?wUe=0L|1fS_!jrts55wYRRdtUu zCA|Lvt%lTCcD-sOgWLx9V;D)zBdP2-hn~xqmwm-kWDXvxqNyPnm8}qu^&x~)narLs?B*%Yt~g%h}(U0N6LyQ_^X3VJ9sz!}nF$>g!t%N$PISBN+a|tBrfB zpC4WPUBSjLbgX68G;!r9z&3Z0jB2sPSpE(P-gjLwNRIo^>`=kUc+CU=T4tuH6A!me_?bj&ZVky9_T2xvT3q3akOGJc=krEZ$A|tRo2QTmPM=d z>@YDqJIZDMDg2y6UqaAt^V!1v9E&YyqNEi)`IE=IY9PmLZLfn&|nIgz%UzBkG4#Te#y?j+xM z4v7av7ie4GHWeJjqaQs#_WoRyHJ1Us&i0j> zCEBiGM(Fu&=fglA2=!ap;(I+y_jvLC&990w5X(kfhdubcwfswh!&8}_8|`G9mf4KA zsuXdMA|d}^;w7S$=Zota%0;npsD+GL$dTx7?qiOGN}6^81I2yd_$;=UDRXe(-3tzf zK*i@tnxeP-Z;*tDd>b=;J+#%vvzVl)nUG)~?)B-6I70FE`#N4F%~}lB-_WjzqtBl9 z_RXTr7PlXd_(3Tk0Jj_dTnq}j#~<-}fr@v>ljny8`u}hNzVMSt|3u0o-gg)Cqj`{s zq?pB(NNMy`rU;zBX^DCK!mh;Sg;!Q2Lte_-A@ht_mYH>6QI1WQ&}E8-aU?sNP{**G zHF?pby}ef?wr5Ypv-|vSl%MT?6?JlPG3C+ZF$mbQJcz#@65n&YUS*eLJC4s*gQAhJ zoqd&z+dEy$)5L-+VKO#0k=(4v@;CWB^k#k){1+oCId(SbDQ#oo4U?-x{k^*JMms;E zTLCGe?0`7Uk`l70WK0k8$WX^;#p+MBwG)V7q%>+sdB3}DN$+TcN=XTceg{U~)1Zd< z+r{93#1Gtki^lM@kzL%wBpNMld3E7;@>$}mRZU;1R9=T+AD_wZ(T3lf96h9>(c%m( zX^Gh{PT`%$xI{1@0-;-E_MrYG+9kQ2LT6f#cPhc`D>H2yR zVJycD0qVma%VfX^WZ&V zHw$>Y2nJpjzT5BYoLJPc#(nVUb+Y^PNN~cQqv-ozQDMqIOXaRz#G}2b`GSSe1MUQElPlC}@XLufqU?=>lc>g1iI0H zu-=u89ZT>di-CwJ_9r~OMFGf7vbpacSyWjEkiKmug1N8D85leZz}HIoi^10U$kgk* z-}uBt{`c=xRX+|MxYvF=IRD)Hdug0rAS+XiWAOZ^I;ycG4qTdS>=|zD(8t16pZ^(T zmcC+}B4T|h36kmAw~Uzn&jv?W#`S$=31I7;;N<%$ZaeOaQPzG^f(Yd}Ck+-T6Z_c9 zj=j`h{~a^yT1R&oj<6|7sj7u6GyAUfbiNJaZfKGb`+Zy{Mm%8VQa8fj z1f~J(_B3<~#~(=kg>kvICw{r+yZhrpl0I_kNB4rl2E@=Y&vtG9E#0jf6!t2>9R)qS zOcY5h+g|gwoHcT2o|yKq6m2kh4AquI!||I-Hwn>y_ftmELJ&vQK}Sc99}C~rJA5ip z4)XMETjui4?uV($-6qQ>-ky^qofrG%>?69FBN^N*Hpw|Mn>hghL1^ju3vAyg@|n50 zD-N15amil-Q}>-OO1Q!qB*0+wlnPWqK_xVS@J{~i&A#tU$6&Bv9Q5WDyH)}HqFRrOGa4_TVqvkTxlxFX?h#~P6e z>UCAvLEDS-&^AWNC(wKBh$yov3S?-i*9M~-$)iW}#lie6s;nBHnL`{m%O%MLBa?w# z8yRdvh~3I7eI?L-_s_qz`Bnpd<}4=A`FXp@PItzp?9?z5B-O^}kbdbwuOQ>&<3W{Q zzHqpW?#-My5dYy-O}ukA@nxxM*Z1uw4K?P_>is7|hqG3kcZTqDe&i?4hvL z8iOY;#JheQJb1KH1_9D;hw|6o*Yxq|1Zg<+syYbG?}Gd(<~YCey&hn0z3ePUdDQIg zwD7MdiTd8wuOD<8(=Bb}6&SPz)HJ!A4E)&;E;TRMU?7%1Q|gsRRhS|@3urrWz@rf( z;v}!K3)uNP>q742=V$oJhbjh24*Pr^F{t<$O^qaXNogj}!UehdrM!~F3~DsPFsyR6 zJFj8M%r84Atg0g`oWz!AL!-oIL(x-5H|OFcCE>-EHEk%I+7=QR=W=OdxzHg)k<<=js*2} zv1@X0aw3Ej{SPwhSTzk&o@i*)M?u$W2@KiW*ht^&n!cD<|BzsixIjWe`CK`3cf@PUqIum`_FpCE!Aj+I|O;e5k3fA$wU@Hx*GAUl*y zr>bv?=G~hN!==bxXU|I`@t^0Io4J1WUWA_@@*}d#H!dw26T~1h*bXaaT$*+KnvN{c zY8*7R80eZao{i%@ub~-as5}Ib%7)85pTJks%iUF>ksHF;{YcdPnBEN)9`G#{EWP^-`*h*zj2aUw_P61$ z9IC6-KMtM?ocP^}CerUYZBEM;Ty5Moj8Bff)o7p;fD3JSjcje@j=fmfXrJV3eMg{o zJzJ|XWi(4>rP|TJ^0%;JP)vZ<<}!2BvN_U9)A4LL9uc)O9 zKuhY}`rAD@HD68IA6pR8PvcgHDWX%Y7Y+dzZ;o1-KWUf-sg(drjLu(;n8v%Y=3a8n zUG!r}YlAzQug~*D@(2=S5?j1dT3)B9NjSxdra$pYB4QoLk{Ay+iF2a#xiatRrI|Bn|$f4A;1_O8WX#x6)q#OGR zXL48taqaFNSmaC>=BS|Bf@o?{P|7B@WMg1%EgbMl@zpn{{47ib@TP-e>FKY1_p;XA zP962WeR(8`Jwa-vLxmhBm{x3UqHOl6 z+^6WNB(MgV->J-w))Y~sZ{p(E6J@hWl@5!+YK3rgvQI|!+U$^wa~7mDA&4m&DvHOf zzS=C-!)SAReSz$dRw7~td%;yiKQa^%R+VHU?DqgwPRWc z?zcn7idsS%vVs9=N1FlQy}z)+MrV_S71(t*2yim%^%E^sGh4x_sBdVfCz;n!NbW1n z9rIUbT{R>#J^ei?DXIPa{h*8tY7-NarR|@aTNP3=bMzqcpFm-VPmWUMRqgG+%yXYS zVX-JzGBthl<;xfNZZW7rUn^46l~V|Im;NPCya}*mLV>(02Fkg=&I&NG|FngImbAG$ zqJ30=Fbe9=2@>0X;edb?32?#XqBHZ5%BQw2rg|^l&1KD@7SpcB!rt3cuaNNB*$hbl z%y9!?jt{LIMbi@c$*fsALLJ#gX5|Jp&G&bJu;hE#53BLo(|f*EzEd&yBYEdmdvyDo$bz-qvW3%exw58%f7CU8C-(fdYisN4Sev2@Zn6igG#>ev z%hvY+os16)ESqdYOQUMMi2vGl254Rww-MN6gHhS(uA1C>`iT_w@#9AnYXa%lvwX_Z z*jOdd-tr5>ZivUY4iAAqqzSvwvSI7t*pr|L#sFH4IL;Ii6|HY}u9)w$-TJRAz{{uT z$L#4mBrwtsXA2Q~4By|?VH($&{5hnPtfxmn-r^L!JOBNAW;=P!POvJy6{edBLa^uy zSKzv5;)WnoR#%aikq@d@cPsVQB`iS>l<6Z;+AZMHo>o5a(tre3_e{wTOaPJb4YZdF`>FvVsyMik=E=ixG!RQPA(JNpU45wgr=+ zsh%M6^LjGP1A?uesvt1*du-I|%kKv}?g@#YNUO(pc<~p6$xq$hyP`@gxh%H-LdRud zVydtSXPxCI^O0RhK0I`nxZEgkJ@V}SaeKu3r0I!W?K}I&-}9T$8*kQx04BCl_3nl< z;O*Nmkwl6$VTLNmnuv~{26(U&^E53g%990^klTw)u^N-W-eIQO8l0RJ?^% z`0Mr`4ci?q8SlE03NieksO+3;H$LOWi)iTQ^5Zsl+!`jX%@JSMpHbYlERDY~o+}2K zoU01o0-xZ6-H5&X;XWyjZ^vDKwOheDotj@*D33ut@Q9FEcOyr#V%-Dq!JaKZNh-jh z3f%^9>2g;+`62vG|H8{he6-C&!@{DpPECwhW!{+sYKih(Mx@q6U`Wz6$I`0Pd$myX-BS%R~7!VWDgT+b`ERHQs2&?Mg*c zSA8c2X+>E(yHX+;vwEL~=H33LMvB@j9D>=CbS6K9%dXA#AS`r%_s4YzpiVJeJg-e- z;&J8)x^ZUQ9ItylBAnY^NxM6=yFs?7#wAQZD`9|5NJ7u7*{3E;0U^EQ2#azX@FRz1 zQQ-upfw|93oGVQ4$HYh>)du+uTUCf5w-^C@?bURp+z7LidG=qNh`O3F_z=mATOl47 zvxV&4@%#7hUn~*|K4fbH#}a}l{pM|$0?ykaUsB2{=JkZRIQ5%^L3#U)WNxQ~5ZS+M zc}H%_o(Up(z9fKUTsUH*nx_5elt+Ea!*bAY!09m>8A$^FgJV{C7op>R5ou|2j7?L4 z6B4dKznU+Ys($Wb&h3Y3*~tc;XjP&1$Q7==%#tOM4w@`nWN#7_bmZ9g9jf~Os&?tzi+h{Jxk-k1QeTyvR8 zaFC0_rxv0wRU;|}L}$o-lBM-MTPXT5YkEdjjO4rR&dak2tEnXmR8B`EVOXSk#P=pU zaJXm(BZZd8DpA%_-fZ-UbuV$azK!MT$1^{z6g6>XZRJQdUO$b66}zrbN!aO~Plu#6 z;4Z%8=#jx8H9{s*V9KCsyirn8mR6RBCwn}@ur@Y1ulJHsN$;$?C*3h$VfrfiVR-oE z0}M=zVE5FKW?qnwM?zs0V`D{l98b)ClxUTj%qYpkmAj`a@th>E>G-K__!sfL9?Z1M z5u9l?_LKa88Et~p2^2KzaU+e7qA^@h{rXFENbfOP46%0m#R$yOhKLzcisL@LN|Ulr zd%%19!IHIaq8&Zl;XFUH@jQ1%Z+H8={GU0T4SW})?e#!?7@s-G45v6F_cOf!N9w(j(Gi6AXtcqFOFZkhb%!ku`{8^3~J>QsHRb5 zi%$3U_4$s5NAT{WKGv#ZP-{WHa+32t&d1=effIkFYv!473zsu))u)!KAFBEIW5*40 z`&v>4rFLlX#QgzzD+`~^Cjycd6I3IUXhzy>Eay!5;=$7f!6ACV`{%>32WoeIl0>sZ zav>jc_&&}GtR=+?bZGNj^5Abq30pBb?#HcjF7=t=bU;dNpzp|r z8f&i$r3Zy$*O6kBkut0Dsu_Pz&3w>WJK?(Ch8vvC@AT&1wSS7U>zmNlvRqjkSBqXF zWC@5ys#!r~G*S4=i60Fg%15?u$E7;+FH$lcr}a7;t>=CtdYh&AgC5`5_M#wJ?{uFJ zywV5^M+NZy6@4Bp>cGNwh zBlA@wbJhyoTRyif9}KfuK=1yTT%(U!CR<|dCwLs|Lmz|%V4t{6<*mm(Mw=z3AMXF$ zh`%Ep5b*|_5d09_sQd7M`}|Z$+5&8#++To&RYys-*oQ%rgaXHDymy~KtGU6;G^`C* zJVvWWv3*X7Ew9po9s%B)WyJddQxwbwLbnfm%_v6vj3OZU&x#zFs(0w19zCA89th}| zs6UoFpL+rwK@k$E9x@9hLZ+y}uct!!b9AgP%}|XPOm?sWjlf4W0*z#`3xg&NGy;n@ zU{~z_qr`&``3H{-Fr&94z^_-7YP*1%hymJ@nmgbnfX3?j6g0>;1VnPKD3OJ4AS$NQLx27H zwE-yFjWU!2iHx+bEfvUBklg46g;Z<2cZ}3OKk5JK?QR2jwWXiHeNW=>je7toUIr%_ zn1M2|vOWNu<}4BzD0G@D#{2x!U;3I(@V9k3t`EMirLF_j|0NOW0$=Lv2AVkKv73M^Ysu2Wt{g$ZS!3f^d063ZsV9;d9IGDvx zz*QWE#f40FC85>tz#DA8`_LSr-tiB^=qMYUwx=8{PZ(Anqz8RLaajMjR`aWO1Y(=? zUAZy1b(ul0((lhfSx0ohKZ>cw<$zIH3c=u6m26HBv8aM*ae;;cx*iRR^J$4;bQn^{ zjJjh@-cmG5rU3X(N3XQTK0dg67&z>TV5|ASFI`VG~URmM?p_NPa#}AU}-^y;5PiY zihzJ-l7?dMNYnK7F8)wg(9^*`F4U#ECxXVqGZZTu8XEl#I#QBBcmRHrJnm1BT!N=)aFh@(eEk#WltD=vGF}`+96r%Cc5Id zC6kXnU&r@~O8@tK&qA_> zbcqlYHpa8^*z@@l6Gt3qwJ7*dgy_(PI?N!-7PB))f5@irH=vtbiHW?LP{cH z_CIU$lf#aUMmJ?qXgkxTLavr0w(5XGs7zVa*AA#Y!rnVdX;U)lLv-hdH{sBjALev1 zKOYAiR$~@3==WnhL1}AVMa1Fja|Y+*Jd!#W#4Z0J9$U(D`*7rO3eqew-8e3JGi+m? z>EV1=K-fiC(I4eO4q|@Rx>dQN{O<()n+m06<-JP_%dS2iPhTr=>k8oT*G35I4Q~}q z(;F6@S&tsq=l_@ud|4G`v@S6FzZPR4>q+&Xz1mYDwneUOKA0g^&+q`qhUIK^d`ZSs zk(`45V$kOqzozdZo!#?Ai7KX9W?TorrnTb_!mzb+QaD#B66;oo1xMfE$*ugRO31Ze9rmCQbNApd761_)zZynEXEfEH zR{laj-e_LSw0K$fbAKhJC6lJ}`9MeY=lpW>D@kGIK##d1#?rvD#z|TYu3nk_uR%JC z3uuhIG3Om9l^M9iT3+W6tC*Py$_1=#I~wFC|7Z-C1WJGrM(|)G8o>s`dW_pW87bP! zedhcYOv|3ob4BsjSOiYQw35}--+fMmNnqg;FjY5Q6TSD6O0^2ChBMw=gVWdUG@@?g zEB;N$21uS=t`{?Y>f+tc4%2rn6l+DBQ-_06@UxMZun+32oq43R%<@LxLC7st@)mvW zKI=;yq$k}$Z6 zn+m(-+o2`o#@I|aSC-VNTRX$CnB?KNBR9J}2AY|-*kimoaTiDH?}zZ*Jv5*Bi3Q0-)bMpIy9t;Ns!}Ji#D|vgl!{0jng0 zxTG1eB*I?>KnFe-qIZmIfQ;;Z9`^ZbIbFiuq|9sqG*NDr9K5PJuLZqn2V{lsIKHM) z5K!2PLncN}6B_$3N9S}u&PC*$PQ zh8=!#>=~R9!%!g!$#D)IYT6`u_p_<=wRr7`e;>DZXh)A1b zpY-Fz((yD2#)W@=Z}T+_negK=hylEw-ucSq*VjfHWr{ruz17k5MPBlqzY)ypw)z(5 z-o3-P1X4I=rv4VF`sTn~|N7=;d1Zx3f{m0*4Lz(4wgWm~mLJst5>0c0v&2)`&p*JV zCBu%p#6HlDlXYKtp|)Xf)@+4OL@pnwE&DE2t8{)wSv1Bm$Z=)qs+aAu|B|#x<}NSo ztn9Yc(J>13w~cuDT=tn1>Fh~@u`@54EzFkdhi$X(HjrH@%E$!m=YsV4pt$OuivQO7 zReF#lO7)>t(EnBkA5C@c`-vSx>f59bNmMWA5|o$ur{6Lg)1Zr3$!7LBSq3x^WGMzL z$rFs$s`9TOMK+G{r#||UH@~@P^0Fs-_2HPJgvR4HYp_O+V^=R-;0K_cQ;&omX7`$dWvfsQ?r2M8gHAj4Jv;z2ETh}T7RJ>4UdwY}n zLa%7$f4Bf<%OYthG13H?o%`*?%8~dzdsoA`U-CbMMP>ag>;6I4lN9kOvSX^FqvO>A zw7E`B+{bq^E(=e@r=S~*vggA`(tQ|4Fd6i<_(IFC=i8(tj|Z0bR)X(IcdH=eNV=9c zcS8!;F_BBs14J!e`eLmTCdB01VaX-9za_^heKZMsN*5Nk`CmV3{I@4^y3Q}*yZ7D~ zR8eqj7=>K#}HEtf~&LRsh@t%-v`jb2??aL)njn&%m1{D^O~$KZ#Z?f+{jjNH{q3 z;CykXL}72TT-t^;ewhCOMCD{dTB!yuad2^{Kbaf($Nej?ZRz!<=u(WvC()3E`UxFn zKIGjRX>(~kf3RS3$I4j1H0zkdo%$89i4TWUV;j)Gs0alOX^8Ql)yF_rrl2HPlqHX; z7Oz+QdvTZd5tqF1B(1|JYX;52MtOEpf?dg}e;z%w)XkwxZLo?csMYV4%{BJa(n8_L zS4L{5I_6(Z!SOIdq_G6`(bb8$J2tYSdX5bddicxe;=x^SgEV|JruLY6T+5dO=Lk20 z8<&0S>h#EE_B!)}N8TDW3A65VaBk#D_v?Riz*Y>8B7MqzGHH|?g@~$G_7FEhiS)Oa z`c569gJ$3=YW%Q)$yiC4>Qc|Jd7p=S-uj16_9-W3U^}lsAr+r5A6rWH3=-1jbJp@R?H5yOXKsR$z>?Y4&-q7(o3hBwL(~{El3}4lM9j{&hFJ zADZ|nW3q`U0)v#B`?qGMQnnvP{KAc0OpBMD5+UXmRd3FSGqc&m>n-&)kmGPdO$zRJ z&hwqvr7to?rue45w$ON>#Cp{|s8jA#P)+j;O2<9BGHJMFnCY2HFTKYGW~9h~vWN5w zlrWhiyz`YJxC^D9vw;=3V&~W~W#WWNqwE}PeLVr^Yqf+NA5t(XG&Y6JIbVPhU!JV{ zn`F(osHG#@kv-Ay%jf$w5^YhPP7F}I z@NDXdhu{hoHJ_0FEb4*&*J2KBq%cmsuQD%R(gRUC5fRZnAf^T3MrU{TeGo4K#dvsf z@-y3vm30)e0X%1Wq-OcQ)wHjqGI*IaTie=}cXx-7@PMXfR(w?RmpiS->Xl@olL5mM za3OO4*NQVPsqFvAGG5901g8( z&@hp70UMkJqbqVhyzM+5t7)ol(5ZuW;?@7?%Bwv$M~~nT?yc%|_;z2jY%FRL{tmYK zR;4{6SY0aE#-LFZN>Qm!em8P{cQ^ z;`od>pwNE^${N{$w5A9ErHGM$b&d~4aQL&sh!p7a89KS$;Bag)^IATz6=$ z*#iYPIWZN#G?-CT_mFXBdgV46ICLF)gOY+vTlGu+#zw=56eNfS!e0b1ZmD)$6Hspn zx6*ndkm4kCR4^&kg|!zLWHXo=EWrZMsk|yu7vQ1;u)0Dy3fyF&f;H+Ll=f8ok-=`N zALL{-(&932r}74k0Vho5*? zs%e6ZnK!MO-(QyNi`g8M&rcX1122SorBAKr^9Z@6+2}F^fq_!tFHZv}3l!_iXeQ58 zd;qMUY++$xzBeb6HOpi8O-G&L{B8sCaCmQ|un^BbR&8C~kd$Qhsq39rU;P~(y&B4l za;R$4+lDg`LZXPNl)kSLJfd{yYVjPGY;er-LahosF3zzKZ1f(m7kflV0FtpBBMTGL z{R|`>@ zcqWCK2(uI*wkU+iN0S;2Bo2xW9C?Z?z=f;^E55{l9`}mHGG3tvpMo|hE@}i^fk;W% zJlFodu;^{K-#ojFuMeEYc?94In%S1{;lu4d4a z4=l#{w5S_DCU=Z_PjYUhbw63jOS?8_`m zk>=F9aforFTCnVestFOvY6x|eyMk#xXz;4k(| zjaeO4;z5Qf`Nj=ur$p>sb`SN}m%_&|IfOvmyFwhYM#SUH z+-oZj0HI|B8@2dTvI#w##Yh^%3t>KJdYYjA5I+wJB~0RazZ)595lzWY&JKh?7Bx`sZJ(|)Y3k6(Wgku8ctdW2%b?o?l1C#bo0)84 z^^OpX(?>#)N%@xV=@~4Le`oyO7fUep(2|^{)eZfg^Vwc#qvmZpPEuC5TaKWMHhGfr z`;+EJXA)YC3JwL;r^MB7d8rhlTVv!0e)a=Lg})7{TUO{ZETF$zta?++Q|=Y4s~}mlk^tcTnIWvj)x9(Q4GZ|&Fr!==05DpL_?t2) ztXmk+Sah+&rTbIV$mG)mYDc@ouD$ufplviksx`_vL9cpw{5SovWl-S$0TRp=|TvLqqb85p`|&~BdCZ6_}AOUL3-tle-nu79oN_f zCVDH4aDqo1t*isJfj54Ig@xFJs!BL9DRJ5>w%b{tyZq@ac5@Ke+TPkEEM=P-Pb&kZ z$Q|N18yJG+A_y!%RE}~f8L4-eR8+IeI0H}uN}?sc*ZS=ld9Cs$sZ`+95Grl{4Q*}L zAiE>(ZFpMJ%#26Ab;{c8D!HRl5XrL6h=Yj(*f==4q;C%hX++&I;w28TSv51+YFl+P z`$vn^e*bv)&IA+(@?8qX3Z+Nw>L_cBu@WsS;ERJaBVh$-y#VmWc%Pe_D^&lJu}CBB zoK+kQJv{aP>`2f9)3?3cxgHWGree1e($gHl*ImW*lX>^?vXh#2E2Mgarzp{8(vv@b z=4c=W-Uq{xadG6ckuI$Viivxx;Ct>tdGI{E7&O0SbWcxc3`_Mx833GhM-cXc9dcHq zXNHjl_+HF5ICY0$;?6j6N&_AU3VLf+_AaD-d*6QSNc;Sfa3^r4UX4CvFCER6u+dw3 zkg!gZo@Jh1^_0#T#~mNv`9`$8`xfQ*0I>k?OaWXBg8~DOe=E6l;|mA1a)I_dK-Cm2 zP>M%xmgJDDiPa5)0K@6zb6UO~exhvtDoQ9HVh>WYX-{4!-4L>!X@3N3!j!wgF@C97 zO89ZQR^u#Ad?=ge-7-6%_OSXaV-e8s!;@FngfW}_nlhS+D~BqvpX=+#tYrbS07G9T zHpMkijg(AOd$;Y(?5k0|>Z)S8kQ3EJg>ghq;3Wi@7bCbE=g{eLPL;Hcb%9b&_P#uN zSgV2wsMClVa7?dhK<+Xgb(s)))TPAF;=CK~oAkT;xfK<4KF|ayE&%%j23=KERaZc3 zt7(-p{?PAm2pEhgVh_~ioY@j(5Cly8qOzoJZ*RM^WjBD~ZGW~Nu zDMi#;lKOZ!>gwcZNqN*eX244uWHi-E0*J9NzBU?+_0;YIEtMZ;LV{7$lYD5=e{$!= z`uqD0>g02G``;5vMgF)wsj{>k20l+9yHh840UT%?Nd*9}X(#`s zbE51Gfa~%i#q(qj1eguL0_K1U`ZQ*GoV;W+n_%*c_A4tvE#=Au+`KES<4Kou?}@F&tnN2lf$w{etrR zAPxzW$8(a~oo(dZ{c#sqSW*%*FOjlQ!Gy?U48y=dWRK{_NpJSq?LW=}-+JLU4Dq7? z7(B{&&pGnkJ&FhhlAVPzIx&1YjJmX;#iWd$wVXHV=4)p?vPF+eH>X$nALzIX)U)^f zS*-e2e|V(c@gx|SRAq{KDAM34gU@Tt_jG$2xp&eLeE%HeoZzP`$uKP>s(Rbeurwiv z_iGf=L)Ad}vW%ksPZcB68nADiZel;Eie89~ZyqCEdI#qzJEffWJ-w9-6S0I`JT}MO z2_eZ-QwG0*ynCOkQ3x!96ReevRZt|nUSA*M-64_Z5Pt5vkd!jrXi|IG*e-eRtXnjH ze}7>p69}_qQ%3YJ+H^}jdtz$0f}W;4e{mnGNEsR>QlE_rttLT>ewt^(zRI5WNb1M+ zVN74FED$M`$X@91v>od@PE|kk)#Leb?M~e2jv&*I+!;6))+ryeGPkE3J^Zr2Rl`W5 z%qgd-^2pxPPedFoc)>Xm?^Fi(G~jLT#<0CJ7nwX?+R)KwE_$MIe#-2zat`IxAaedI z0pbKlQFbu~&BL2a*Z4u&!Zlm^T7PDfc~hrp;Hy+oHOU0y#0sPhd??|{hjPYB($mT3 zSW&|v+thg-FH<%~i2=cEet=1Z(O-?`B$Vu84a`pxK7E3DZ*5Q2$T^C$@`6f^sB-hy zM>%(-v&nnkw|EkrQoYYc$gOeIi@pU&$XeFGib&~hvSU{>?Njt7I)DA4B+ip6t*lVW zs-!gyd8=)p8l(b;1f!rh`6$_{2`OFeueCKNxhyW%5YOG)hR~oc#)#l%|Yqtc)d@xLmKDiOcEj) z;&I*>D*uGzWrTDWEuXX35ScAx13*pD`za=}AcU{goPxQ8g6T&S3DCVUmgJ&e#jVjx z^ic;&?e-1vDyb*n-U@KgK(8>D_kln3l*828m|kMn0XW1`|M>&B+zmAGnvu};1=FRQ zUyDntdHC`DVSFwNO_YT57YS3#GR<@nl9GrECeK9eycmpu)&67!UAAZ9Sfc`X`POHh z#lA`V+QtMtfZb*U+n=`0S(d)Lh>sM_t4g7|18HdIpNcIv2DET05I>(PLdiA|QAK?XMZlycHbvl>fZNX6Bo2j8Ma?sHoG8-o zeHpU5&NIJc98O4M7zgvLz+@I`+$56X9d77Y_fHEF!yY-rhwP&q_CW0hgI3>~^Ec+Y zLbvszgjb{GBaOBXfhsoSa6s((*p})6EHuyDq|{&r7b(L+1TYQniA_lM1*D%DO1v;NDK+Fn*kG*g`&6eC%Z1dF5Ybml zug4zRnuHN$-3GKMrnX80a~Knym`X@FE(#vz*UCxtS@OlDZXzy=%Z{k1)5jwv?5PX1 zS_XW)z&#>@yOfBQc$e2!yNppfCoVKulj!#pHXAsS5h_R7pl4tl#um^^PO~1rS`VBt z{ArFp37U#l;^L@W_huG2j!}P)y!qr%lKwW8Jz`C_QNFLyUJh8G5@_R6PPT$>Kh2q* zFUj8QSpNyFtrY^$H}CGLZvdp{p;~+!RnWfIz(I!<`Qqp@l>WWV7w~#>X7DBcdyV;4 zIYObkjIejT=KU%-J#!0IyFFU6R#>D`w4TH#5m6nVt`*(6(q?4I8F%)aq@63P3TS@M z7u(K9VG-gd6->Tdr#4=`bJA~hx5Nq!7<-&vDUoDg+Oa5C z6Bb@4(l{iewb#Ohz3sQH9 zAa9Sn?wea+We0!`?@gXW{EM(A-{sYM;fl>$={zCugZ9y8KmM(tSc@h9Z%^XWh?Y_| z$@q^@#eHJaKrf<5w4=<>ScHn^6VnHg#7@IOzyw47LzrMGcHeUV*+c>&nsnPE*Bcx8 zx;dJWicIP{Bhe}1sXhaB(Fj)rr zMIN`O&Kh1P2(s(JLEw%>mFHwnx-S84u;PIbA#SoM1)k#odWM)|(fUZ?nT* zZqeRXSP4_l+BjxAATl6;nAmTN;ekS%f@iy|KYGFsxMa86h!-1cnH*#iR4yP^r1dt2 z@5{uw}e)I(n!2%--npEQO02Pkv=GyU-JrWANW6S-O;=baQzWMjlp}M8-fg z_c~~;dsm(qI52YHdcLCK53l5MuRnK`6!jPuR%3gyeM)@cZ6W%3(9d>aohPZWS|CD& zfJs;b+*r@J*n!dQCc;Se@1^c{rKAHVQeZmm<=d~kh4%4Td3kxUgQoyJZ6x33)0i(c zZ6mz`m6d*0A4rt1Nd^Jq6e|58O>~%smNstLbU0C|!>4TASnaz+PXzuq$`JLr-2S<@ z$HD=&Lj7tu;@+>O&YrYN%h{>?!Na1n^4;@WoFlr9>ePc_C-kxj>Ke_HAnqGH! z_QD^#;O3M^KtR>oyICVWC?5rDw5a)rA?=T$0mB{Eno9CV+a0A12R*(dF|mBKloQ#T ze{CyIYcA`mvXLkHh_AZg5V%x8=F#Uuo+&wP!BF?R%vVh)qyqtwqvEP_M2w#Br+t)@r(v=1CpklgmY{Qj%T*~@cq^uk|=5ju-z>u z;|5d$tMU{ST{^`B$+bBTNIP>!AS2ts^__iefcKKPf*Wayn`do^RiW5)F3Mx=)s+EQXdB& z^!_}<{dEhl8|$C+(;AGY1CDCyun448kJkGZa$H7!^^{qPJ&{pg@U*ezF~H!|8VNmTh)V$ui1g1q zU_3y<;yD(#17ZhI;g(IK_&?6?@NW=#pa$+!3K{tG%kH0s;XDApN2#bhy%_M#569H+ zAZWOW;?&M-bV36G-pp2IockOagidg=P^cQsuLD=Gz0XRGHPWq7f+@yG*NKXYHy*W; z`$}dVkIyC$Pyuu_dXH!>Ce5BAK#@={ZPp!l>$@6W|G8dTf1=3Va0G61+Tvu|AwWo} zJ`j6BkvVhmjD|Mpr|zT z)sNMxJX&-sMfANP9bx=MYOQ;%rD{`qqV(#PJ*0kPNJ6^xfc4&I;r=69o^sSQ&$It6 z;8RoOsQIhjSPg%weue_9ocgFdWL*THh8Ey|DKQNX?gE>l_w`+L1=Rs27v6DcF)ai& z%%i05MC|89suawkihA(%Gcb?HxPD1&&2Y3jwUy?BV}>pr$E8@i-m?0CBqFb9!=~ne z3V!N)jS0wlcPxo%e&d*IgRtaL4}}AMcv=Qt{$kfdN(%fdHUTKTn2vIQ0Ko~Y`bcS+ zG*5!K4T0VX<F;w_gEiLroi;fN_S z^!o=fYH~SkUlkm&ycwG?s<`~J52;ZEF?2C((F#kP*-h??`;4x=oidx;*FUaVHokJT zZSFRlcl*G*s+!Ks(^AJpvTW^Y3hRUmw2Ye2eG$A_!s19~dS>0BBfLnj`Fi2{4s2iS zMo#A#j{}WiTpX%$9-)1vplV1kWmrjv#LDxt(0TMY2kHEShs*s)|5iEz@p1+GQTwbv zS0a7~C$FbZK4a;+riA`M>7RPI?##r<-ep8rAF5>XZu|U$++07Qw67r1^*i|ba*%Ye zf{OW1!uJTH2}4rO$-Ji%RQX0+pPwj%AbD9&$Ls6spGf$EsoanLC1Jj=Knn7!2B=01 z3@6!ttg)t^P)d7uf${2QO3nV6*`M!zr2lRq)5{ZeidRzx>QGoV0(mf=y6cpNMpqy5 zfZG73TQmg9n|4b(u=)ECpyG^!%cnV-3JH)+`?DohQtTiQIR;Ec@kx1QW$7YIAdE>) zWh$?0h`P~3X znY&99)sU_wLd0sNK{X-=hN!>riA$?|F@m#N4Fm;?Qs|IWMsX>Pq#ahAd zZ{;3WCeLCtEynN{5_0%Ulf@i<(_$7vUu!UW#fHfZ?(Ot8-W~V_&~`Sh37FT}goIMU zvW8|UNfKVgIO8I0$N5{hQKoiqEa83+_SxjUphdV)H(Io_{*tZOajceY%~aF(Z-wTllNlLXmt3^+Y|nBf zd=0dQrOh-=pG3Zqwekz;dT5~t&8{gWnK+$>HixL4x#{*ze(y^QqoxrC(jv^(n(693 zzV$5hbEKgAGH+MRtowR^>y!jYr6Fl`C$&o>-FEQlI`s=KlJd_coyq+$>`|v#d?t!DOFv{g{mzd~wa&Ua(gAeIM);Zs&+>haUjn^A zey>k*oB#*e32@A&UOy8wnlrhcXNN~&oB@d~%&sTRUy{IY7C&INB;5MCS4GSQQx3{9 z^hDNKK!R5boJ{y^B2oZV`1ck!mgWALhV8qrgeZQ?)^TU9OQZ_~2SwK?2!fb!V*=x> zK*i*pK@S6}?$>=>M;(ez!Z3e^z6bVxOllbmL9wpI*w;`V{LgZ@&(-Ml>Bma7Du`Dj zR9!(Zohj}|>yk-;{OZ|R6Q)s`5%1H)LSFDY*J|_eum}# zMx$Ls5D2hsQR!4!gre9#NFcNFnzDFX1M1keC1Y7|txZ9rhJU#v2uNusOH8Dan)J$D zXWox-7B;z7A0m&k7N)8>CrfbyPeHebx1_ubk}Q_%;)0J7yzgF>;=(zzG2F<;7nc9* zf~KwO}@*X)nDb z1I8bZSU%b%E%LJ5++vzHd8b`1)t4fZdMI*zv~n#T7}>Xk(zg6LOK4%RpZnU%(dQ=Z zRFNxBVo1^x0~I6B3;bILb8|;Y4Jx1;0Sm!t5AN`+5@fzJS71NLme-vpdSvnkTfms; z?$^!5&0uZpuW>d-1vQZJB&X>or7A|s674+KhwZ+xx%I^*&M!^2ml`^@7aGl`wkD!j zjNWsSaR@R$tl`{|GHXQ4D(UJ!aUO}OMW!U3C%9lK_&we;PV+fd$3UzWW#Kdz_rdJ# zxpcB+(_V~bsw#gb5~*teQjhJ<&I1ry2Mcq5|Bn@(LlH%-WmF_QWU&OT#PBMww&V^@ zK0Y-igHQ~Tn3eZ!RBtYemML?W!v*MfUCEvCS_=DMS9zY;LPT`O^gp|AT-xfp-c*W6 zy7UWULtL7mR~69-Ofn@kdyBPFLk>io1EsMHry^tsQC2&Jl-qUw#S+F~O2ZfI3b!DX zcr)rv7-h{&k5iJnLWtgzo@xX;lA;-i4xQKtwX4o;n)WD|!`(ss$aH1#zLwB(+Zxav zi0yTbf2P`XHsdk5SK>Mx4~Tg!N{f+{hI8`E{nMH5W!6NHo7JjB7nw|%*W5apk`epE zAHU?wwH9S+soc8l=>piC!kH$gjBQa}_)f~sI zv9aJUU%sS5AtDAX-u~2_+R!~|ftut7UH$8nB^}7#d9fOo3P7pLuza+&iTEKkIaZ!a z2^g-Cl*}!rT+icbOvx_9+&aAI@Ur4$$mb%vEYyGAec6lcD86|9VX(L;sJnbo)=#*` zvJ&@ez0v1(3-u_Lfb@8;782!@)~0W168_T&YX2{5zc4$zqTjR4eog6JamI!Np%c_7 zm-+e#Aolim6KbxkIe&JgBXi+Lvq{UuS5&q*Kouse7KT(ppw@J zVh8JTWNvPbuZ5%!e{O__kFOA51IwEGr`jglhWevTB5A3aRe`)j#reunlK}ik9>M;r zg&qzh7FAXvB%&ZNr3RsFbTZ07%l-Xk?sd8t5a7_uyI)jL5PHvEkJXJXjo_m-z?6`F zBPI5a?8Tkpa8|Y|py@Q&XILuckn@tJla!Usx?sYk!c)ZtLGq<{HWKL(ws(y4+iZRK z-E?ry{i3q6Xu$EW&d}mggqE9n)#P?HKx{-T&TfYl&-~EbOa}{oVbx5ouBr;1Bl+7t z5YW8YQ5Lb~{u`P48Rfvk=+p3(a4R{Nhx1(l9Tl?eC%4(tg}S5`=fbC}(UEvrNSXKt z+YFAM-_aAO(P?tdhFi(FNUTgQ+$3NUgco20r|6-)P6mmjMS>DsPRFm7lLQ86g`O4x z)a9`Hh6d=h(7d=m8ewrRvbSnDsH;Ca!mp{RT>v#K;c1EQ!S5E!KpaanX8}2d;9!FP ztA@UZrkHl~ejdLkxxRP!2vwUkL|zf^s*7!mwJa z0oSEbvE2eCa)E)kT&3KG&pR{akK$A8uTYj*XQ9 z=c&iW`~tnBA}-HN#FOiqj*9#`I%hgL zI(+E#q&1M%H$lGcPpM$b+`+wj9&#m2AB8Wu-hb-J?~4Hubf3i0HU;D7^3DAtDTu}; zXpF>IT7C}j7aRRAJ^aoKeab7kDkR!N-YSHs5$rC0NSCbosX$1>fB5_qIZ9-EiF_;w zh6q~AFM%T1!mD|%;<_OSc8esP<{Ugryu8EEnQ90ThiqyzpL$EiMSH7N7uI+H4UBua{v~ND5cDwx2*-5QbyshB z)_$b1LQ=(m3v2~9<)cM4w`(Y6Bng8!#)9=7|D@DOiC#) zbn6!%JqX6Q;~_Jngh81MpH##F8e1t|8FsTyZ1|1)7fkp~W`v}y32AauXzWZ{A*K$4 zSIhhYfsN^+oUtjn@WhyuyZjacxV)sv4qv>i8> z8^IWEn82n8t|h=jZK*2BjDoJOabFM>$$Z%eS78$5Pi!{HLqCTS@5`Cm3m+`B)Z%Iv z>G2)3H||d#&0vsxfh~;HT0g8aSE~|aocg4KQz@iZDKW4h6BrYolCMCkTz}7I_ z%vF)4ifomJ=L5-%=0ul)7a?aKmmaGl)%e;Nr#^>;E(xP_Uh`|gr(GG`qbfJBaqZS; zm@CN~i8_Ao{LowZnh6?eZbPrwxzy25$nMO0!H`HD*>+6qJP=hY62osd(*=s;pHxp^ z%-_rn%1LhLo}kpq$$Q5}KlhR(R~ej3#dBTruG#gwCSOp8fg--cInrgxz*VJ3g~D;$ zBKr1njS{gsmAcHy1H#S=mLV{mBHA)5DjpdC5&`i*AW^*qy^i1hedhT(_aEq$-xIW? z0}bXJWf1GKd1qN|W$9$H0q=zac<-$n%c9sZ^8+AjL~%(;1lOb{#_KI6B z2r`#N?@w}HXJI|?qF;eS67raaF{)PxK51-fssZFEsMuA-{Btexw$Wno6AoM*;a$F> z`5o7L?oe_CjrP+xs=)}u$yj6edlsll26dV{l$t6#{H@6h)?#y*eae87x;=op+7$cqou|sEY`ejdc4jm3m*XV2yHeF!g0lf5x}b zUE(h=5I3cc5*T>S+z`At(6^kQ-fY7#x2CIi`3|j)T0^EofE#a{AW1P}0xWGaK%_IX)V+3|Z&+PLOfmSJi zS*RQ6u%{x z`#<5U0MT&3JO7TP0AQ6rlTac2-;yu_5S)>UQb+Oc7eG|Oz)1^)`Zh-<@SjKSOGtP@ z((ZcN;@J1C48H$kzL|g!w${pxp#PRg-|s>cMJA~J^9A5x8*6Y+OaSo&#(zte^Du%b faR>hY6}n*2-4P8n@J&tz0UwwuT%|_ICiH&*GemZF diff --git a/files/Model/Model-AIModuleCreate.svg b/files/Model/Model-AIModuleCreate.svg index 1553798..30c347b 100644 --- a/files/Model/Model-AIModuleCreate.svg +++ b/files/Model/Model-AIModuleCreate.svg @@ -1 +1 @@ -(0)(1)GenerateDelete ModuleBeginEndSelectModuleSelectGroupSelectDomaininteractionPromptAIGenerationRemoveModuleCreateModuleChoiceGrantUserTranslateDomainNewScope \ No newline at end of file +(0)(1)GenerateDelete Module(0)(1)BeginEndSelectModuleSelectGroupSelectDomaininteractionPromptAIGenerationRemoveModuleCreateModuleChoiceGrantUserTranslateDomainNewScopeneedConfigCheckAIConfig \ No newline at end of file diff --git a/module-info.json b/module-info.json index ded6d93..31bf8d7 100644 --- a/module-info.json +++ b/module-info.json @@ -1,12 +1,9 @@ { - "date": "2024-06-12 14:50:29", + "date": "2024-06-17 12:11:18", "name": "AIBySimplicite", "format": "json", "files": ["AIBySimplicite.json"], - "repository": {"origin": { - "uri": "https://github.com/simplicitesoftware/module_ai.git", - "branch": "6" - }}, + "repository": {"origin": {"uri": "https://github.com/simplicitesoftware/module_ai.git"}}, "version": "0.11", - "platform": "6.0.12" + "platform": "6.0.13" } \ No newline at end of file diff --git a/pom.xml b/pom.xml index 60f5c17..1eac945 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ UTF-8 https://candicetest.demo.simplicite.io - 6.3-SNAPSHOT + 6.0-SNAPSHOT 11 11 simplicite-modules-AIBySimplicite diff --git a/src/com/simplicite/commons/AIBySimplicite/AITools.java b/src/com/simplicite/commons/AIBySimplicite/AITools.java index de58900..1727e48 100644 --- a/src/com/simplicite/commons/AIBySimplicite/AITools.java +++ b/src/com/simplicite/commons/AIBySimplicite/AITools.java @@ -444,7 +444,7 @@ public static String parseExpresion(String prompt,ObjectDB obj) throws ScriptExc public static List getJSONBlock(String txt, Grant g){ List list = new ArrayList<>(); - String regex= "([^\0{]*)(?:```)?(?:json)?(\\{[^`]+\\})(?:```)?([^\0}]*)"; + String regex= "([^\0{]*?)(?:```)?(?:json)?\s*(\\{[^`]+\\})(?:```)?([^\0}]*)"; if(!txt.matches("[\\s\\S]*\\{[\\s\\S]*\\}[\\s\\S]*")){ return list; } @@ -455,9 +455,9 @@ public static List getJSONBlock(String txt, Grant g){ try { if (matcher.find()) { - list.add(matcher.group(1)); + list.add(matcher.group(1).replaceAll("(?:```)?(?:json)?","")); list.add(matcher.group(2)); - list.add(matcher.group(3)); + list.add(matcher.group(3).replaceAll("(?:```)?(?:json)?","")); } } catch (Exception e) { AppLog.error(e, g); diff --git a/src/com/simplicite/workflows/AIBySimplicite/AIGenData.java b/src/com/simplicite/workflows/AIBySimplicite/AIGenData.java index 5c9104e..675716f 100644 --- a/src/com/simplicite/workflows/AIBySimplicite/AIGenData.java +++ b/src/com/simplicite/workflows/AIBySimplicite/AIGenData.java @@ -32,7 +32,32 @@ public String callIA(Processus p, ActivityFile context, ObjectContextWeb ctx, Gr String moduleId = getContext(getActivity("GGD_0100")).getDataValue("Field", "mdl_name"); JSONObject response = AIData.genDataForModule(moduleId,getGrant()); if(response.has("error")) return response.getString("error"); - return ""; + String divId = "ace_json_return"; + String aceEditor ="$ui.loadAceEditor(function(){\n" + // + "\t\t\tvar aceEditor = window.ace.edit('"+divId+"');\n" + // + "\t\t\taceEditor.setOptions({\n" + // + "\t\t\t enableBasicAutocompletion: true, // the editor completes the statement when you hit Ctrl + Space\n" + // + "\t\t\t enableLiveAutocompletion: true, // the editor completes the statement while you are typing\n" + // + "\t\t\t showPrintMargin: false, // hides the vertical limiting strip\n" + // + "\t\t\t maxLines: 25,\n" + // + "\t\t\t fontSize: \"100%\" // ensures that the editor fits in the environment\n" + // + "\t\t\t});\n" + // + "\t\t\t\n" + // + "\t\t\t// defines the style of the editor\n" + // + "\t\t\taceEditor.setTheme(\"ace/theme/eclipse\");\n" + // + "\t\t\t// hides line numbers (widens the area occupied by error and warning messages)\n" + // + "\t\t\taceEditor.renderer.setOption(\"showLineNumbers\", true); \n" + // + "\t\t\t// ensures proper autocomplete, validation and highlighting of JavaScript code\n" + // + "\t\t\taceEditor.getSession().setMode(\"ace/mode/json\");\n" + // + "\t\t\taceEditor.getSession().setValue($(\"#json_return\").val(), 0);\r\n" + // + "\t\t\taceEditor.getSession().on('change', function() {\r\n" + // + "\t\t\t\tlet val=aceEditor.getSession().getValue();\r\n" + // + "\t\t\t\tconsole.log(val);\r\n" + // + "\t\t\t\t$(\"#json_return\").val(val);\r\n" + // + "\t\t\t});\n" + // + "\t\t\t\n" + // + "\t\t});"; + return "
"+""; } } \ No newline at end of file diff --git a/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java b/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java index d11f308..17ada70 100644 --- a/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java +++ b/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java @@ -1,5 +1,9 @@ package com.simplicite.workflows.AIBySimplicite; +import static org.mockito.ArgumentMatchers.contains; + import java.util.*; + +import org.checkerframework.checker.units.qual.t; import org.json.JSONArray; import org.json.JSONObject; import com.simplicite.bpm.*; @@ -10,6 +14,8 @@ import com.simplicite.util.tools.*; import com.simplicite.webapp.ObjectContextWeb; +import ch.simschla.minify.cli.App; + /** @@ -32,19 +38,20 @@ public class AIModuleCreate extends Processus { private static final String ACTIVITY_GEN ="AIC_0600"; private static final String ACTIVITY_TRL_DOMAIN ="AIC_0015"; private static final String ACTIVITY_NEW_SCOPE="AIC_0017"; - - @Override - public void postLock(ActivityFile context) { - AppLog.info("postLock: "+context.getActivity().getStep(), getGrant()); - // TODO Auto-generated method stub - super.postLock(context); - } - @Override - public void postInstantiate(Grant g) { - AppLog.info("postInstantiate ", g); - - //getContext(getBegin()).setNextStep(ACTIVITY_SELECT_MODULE); - super.postInstantiate(g); + private static final String ACTIVITY_NEED_CONFIG_END="AIC-NC-END"; + private static final String ACTIVITY_CHECK_CONF="AIC_CHECK_CONF"; + + public String checkConf(com.simplicite.bpm.ActivityFile context,com.simplicite.util.Grant g,java.util.List list){ + AppLog.info("checkConf: "+context.getActivity().getStep()+" "+String.join(", ", list), getGrant()); + String pSetting = Grant.getSystemAdmin().getParameter("AI_API_PARAM"); + String pUrl = Grant.getSystemAdmin().getParameter("AI_API_URL"); + AppLog.info(HTMLTool.getListURL("AiSettings",""), getGrant()); + if("/".equals(pSetting) || "/".equals(pUrl)) { + AppLog.info(("AI_SETTING_NEED"),getGrant()); + return "AIC-NC-END"; + + } + return "AIC_0005"; } /** * This method is used to generate the HTML content for the chat bot. @@ -177,13 +184,39 @@ public String form(Processus p, ActivityFile context, ObjectContextWeb ctx, Gran public String ai(Processus p, ActivityFile context, ObjectContextWeb ctx, Grant g){ if(context.getStatus() == ActivityFile.STATE_DONE) return null; + String divId = "ace_json_return"; + String aceEditor ="$ui.loadAceEditor(function(){\n" + // + "\t\t\tvar aceEditor = window.ace.edit('"+divId+"');\n" + // + "\t\t\taceEditor.setOptions({\n" + // + "\t\t\t enableBasicAutocompletion: true, // the editor completes the statement when you hit Ctrl + Space\n" + // + "\t\t\t enableLiveAutocompletion: true, // the editor completes the statement while you are typing\n" + // + "\t\t\t showPrintMargin: false, // hides the vertical limiting strip\n" + // + "\t\t\t maxLines: 25,\n" + // + "\t\t\t fontSize: \"100%\" // ensures that the editor fits in the environment\n" + // + "\t\t\t});\n" + // + "\t\t\t\n" + // + "\t\t\t// defines the style of the editor\n" + // + "\t\t\taceEditor.setTheme(\"ace/theme/eclipse\");\n" + // + "\t\t\t// hides line numbers (widens the area occupied by error and warning messages)\n" + // + "\t\t\taceEditor.renderer.setOption(\"showLineNumbers\", true); \n" + // + "\t\t\t// ensures proper autocomplete, validation and highlighting of JavaScript code\n" + // + "\t\t\taceEditor.getSession().setMode(\"ace/mode/json\");\n" + // + "\t\t\taceEditor.getSession().setValue($(\"#json_return\").val(), 0);\r\n" + // + "\t\t\taceEditor.getSession().on('change', function() {\r\n" + // + "\t\t\t\tlet val=aceEditor.getSession().getValue();\r\n" + // + "\t\t\t\tconsole.log(val);\r\n" + // + "\t\t\t\t$(\"#json_return\").val(val);\r\n" + // + "\t\t\t});\n" + // + "\t\t\t\n" + // + "\t\t});"; String pSetting = Grant.getSystemAdmin().getParameter("AI_API_PARAM"); String pUrl = Grant.getSystemAdmin().getParameter("AI_API_URL"); if("/".equals(pSetting) || "/".equals(pUrl)) return g.T("AI_SETTING_NEED"); List listResult = getJsonAi( getPreviousContext(context).getActivity().getStep(), g); - if(Tool.isEmpty(listResult)) return EMPTY_TEXTAREA; + if(Tool.isEmpty(listResult)) return EMPTY_TEXTAREA+""; if(listResult.size()!=3)return Message.formatError("AI_ERROR_RETURN", listResult.get(0),null ); - return "

"+listResult.get(0)+"

"+""+"

"+listResult.get(2)+"

"; + + return "

"+listResult.get(0)+"

"+"
"+"

"+listResult.get(2)+"

"+""; } From 32f6fb737dacb476d0c077fb35bb226b0dc95ce5 Mon Sep 17 00:00:00 2001 From: "designer (Designer)" <> Date: Tue, 25 Jun 2024 17:33:40 +0200 Subject: [PATCH 03/74] Clean Code and Sonar check --- AIBySimplicite-openapi-3.0.2.yml | 4 + AIBySimplicite-swagger-2.0.yml | 4 + AIBySimplicite.json | 242 +++++++++++-- README.md | 2 + module-info.json | 4 +- pom.xml | 6 - .../Disposition/responsive5/CHATBOT_SCRIPT.js | 2 +- resources/ObjectExternal/AIChatBot/HTML.html | 4 +- resources/ObjectExternal/AIChatBot/SCRIPT.js | 139 ++++---- .../ObjectExternal/AIChatBot/STYLES.less | 12 +- resources/ObjectExternal/AIExpTool/HTML.html | 5 +- .../ObjectExternal/AIMetricsChat/HTML.html | 2 +- .../ObjectExternal/AIMetricsChat/SCRIPT.js | 181 +++++----- .../ObjectExternal/AIMetricsChat/STYLES.less | 3 +- .../AIProcessResource/AI_GEN_MODEL.js | 305 ++++++++-------- .../AIProcessResource/CHAT_BOT_MODEL.html | 9 +- .../AIProcessResource/CHAT_BOT_SCRIPT.js | 299 ++++++++-------- .../ObjectExternal/AIPromptTool/HTML.html | 4 +- .../ObjectExternal/AIPromptTool/SCRIPT.js | 70 ++-- .../commons/AIBySimplicite/AIData.java | 6 +- .../commons/AIBySimplicite/AIField.java | 18 +- .../commons/AIBySimplicite/AIModel.java | 167 +++++---- .../commons/AIBySimplicite/AITools.java | 326 +++++++++++------- .../commons/AIBySimplicite/AiMetrics.java | 27 +- .../extobjects/AIBySimplicite/AIChatBot.java | 46 ++- .../AIBySimplicite/AIMetricsChat.java | 7 +- .../extobjects/AIBySimplicite/AIRestAPI.java | 64 ++-- .../objects/AIBySimplicite/AiSettings.java | 25 +- .../AIBySimplicite/AIModuleCreate.java | 139 ++++---- 29 files changed, 1231 insertions(+), 891 deletions(-) diff --git a/AIBySimplicite-openapi-3.0.2.yml b/AIBySimplicite-openapi-3.0.2.yml index 1dc477e..d17bd51 100644 --- a/AIBySimplicite-openapi-3.0.2.yml +++ b/AIBySimplicite-openapi-3.0.2.yml @@ -131,6 +131,8 @@ components: type: string enum: - MISTRAL + - HUGGINGFACE + - AIML - OPENAI aiSetConfig: description: Setting @@ -450,6 +452,8 @@ paths: type: string enum: - MISTRAL + - HUGGINGFACE + - AIML - OPENAI in: query name: aiSetModele diff --git a/AIBySimplicite-swagger-2.0.yml b/AIBySimplicite-swagger-2.0.yml index 5cf36dd..15917c9 100644 --- a/AIBySimplicite-swagger-2.0.yml +++ b/AIBySimplicite-swagger-2.0.yml @@ -262,6 +262,8 @@ paths: required: false enum: - MISTRAL + - HUGGINGFACE + - AIML - OPENAI - in: query name: aiSetConfig @@ -432,6 +434,8 @@ definitions: type: string enum: - MISTRAL + - HUGGINGFACE + - AIML - OPENAI aiSetConfig: description: Setting diff --git a/AIBySimplicite.json b/AIBySimplicite.json index 5a226b4..2e84dd5 100644 --- a/AIBySimplicite.json +++ b/AIBySimplicite.json @@ -35,7 +35,7 @@ "sys_code": "AI_API_PARAM", "sys_value": "/", "sys_type": "PRV", - "sys_desc": "configuring api calls to an llm.\n===============================\n----\n**If necessary, specify the api key in the AI_API_KEY system parameter.**\n# Parrameters\n## hist_depth\nDefines the number of messages in the history used for the context.\nThe greater this number, the more tokens the request uses, but the more relevant is the response. \n## max_token\n*optional* \nLimits the number of tokens in the ia response\n### default_max_token\nMaximum number of tokens in a usual context.\n### code_max_token\nMaximum number of tokens for thecnical calls.\n## trigger\nTo define a trigger for ia calls in fields (under development)\n\n# LLM spesific configuration exemple\n## OpenAI:\n```json \n{\n\t'model':'',\n\t'OpenAI-Project': \"\",\n\t'OpenAI-Organization': \"\",\n\t'hist_depth' : 3,\n\t'code_max_token' : 2000,\n\t'default_max_token':1500,\n\t'trigger':''\n}\n\n```\n## Mistral\n```json \n{\n\t'hist_depth' : 3,\n\t'code_max_token' : 2000,\n\t'default_max_token':1500,\n\t'trigger':''\n}\n\n```", + "sys_desc": "configuring api calls to an llm.\n===============================\n----\n**If necessary, specify the api key in the AI_API_KEY system parameter.**\n# Parrameters\n## hist_depth\nDefines the number of messages in the history used for the context.\nThe greater this number, the more tokens the request uses, but the more relevant is the response. \n## max_token\n## provider\nDefine provider for warning about data sovereignty\n*optional* \nLimits the number of tokens in the ia response\n### default_max_token\nMaximum number of tokens in a usual context.\n### code_max_token\nMaximum number of tokens for thecnical calls.\n## trigger\nTo define a trigger for ia calls in fields (under development)\n\n# LLM spesific configuration exemple\n## OpenAI:\n```json \n{\n\t'provider': 'OpenAI',\n\t'model':'',\n\t'OpenAI-Project': \"\",\n\t'OpenAI-Organization': \"\",\n\t'hist_depth' : 3,\n\t'code_max_token' : 2000,\n\t'default_max_token':1500,\n\t'trigger':''\n}\n\n```\n## Mistral\n```json \n{\t\n\t'provider': 'MistralAI',\n\t'hist_depth' : 3,\n\t'code_max_token' : 2000,\n\t'default_max_token':1500,\n\t'trigger':''\n}\n\n```", "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -74,7 +74,7 @@ "item": { "viw_name": "AIViewExpTool", "viw_type": "V", - "viw_ui": "
<\/div>", + "viw_ui": "
\n
<\/div>\n
<\/div>\n<\/div>", "viw_order": 1, "viw_icon": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -283,6 +283,32 @@ "icon": "img/system/static_text", "field": "row_module_id", "list": [ + { + "object": "ListOfValue", + "userkey": "TEXT~AI_CONFIG_AIML~ANY", + "item": { + "lov_name": "TEXT", + "lov_code": "AI_CONFIG_AIML", + "lov_lang": "ANY", + "lov_value": "{\n \"provider\": \"AI/ML\",\n \"model\": \"\",\n \"hist_depth\" : 3,\n \"code_max_token\" : 2000,\n \"default_max_token\":1500,\n \"trigger\":\"\",\n \"showDataDisclaimer\":true\n}", + "lov_order_by": 1, + "lov_event_id__lev_code": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "ListOfValue", + "userkey": "TEXT~AI_CONFIG_HUGGINGFACE~ANY", + "item": { + "lov_name": "TEXT", + "lov_code": "AI_CONFIG_HUGGINGFACE", + "lov_lang": "ANY", + "lov_value": "{\n \"provider\": \"Hugging Face\",\n \"model\":\"\",\n \"hist_depth\" : 3,\n \"code_max_token\" : 2000,\n \"default_max_token\":1500,\n \"trigger\":\"\",\n \"showDataDisclaimer\":true\n}", + "lov_order_by": 1, + "lov_event_id__lev_code": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "ListOfValue", "userkey": "TEXT~AI_CONFIG_MISTRAL~ANY", @@ -290,7 +316,7 @@ "lov_name": "TEXT", "lov_code": "AI_CONFIG_MISTRAL", "lov_lang": "ANY", - "lov_value": "{\n 'hist_depth' : 3,\n 'code_max_token' : 2000,\n 'default_max_token':1500,\n 'trigger':''\n}", + "lov_value": "{\n \"provider\": \"Mistral AI\",\n \"hist_depth\" : 3,\n \"code_max_token\" : 2000,\n \"default_max_token\":1500,\n \"trigger\":\"\",\n \"showDataDisclaimer\":true\n}", "lov_order_by": 1, "lov_event_id__lev_code": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -303,7 +329,7 @@ "lov_name": "TEXT", "lov_code": "AI_CONFIG_OPENAI", "lov_lang": "ANY", - "lov_value": "{\n 'model':'',\n 'OpenAI-Project': \"\",\n 'OpenAI-Organization': \"\",\n 'hist_depth' : 3,\n 'code_max_token' : 2000,\n 'default_max_token':1500,\n 'trigger':''\n}", + "lov_value": "{\n \"provider\": \"Open AI\",\n \"model\":\"\",\n \"OpenAI-Project\": \"\",\n \"OpenAI-Organization\": \"\",\n \"hist_depth\" : 3,\n \"code_max_token\" : 2000,\n \"default_max_token\":1500,\n \"trigger\":\"\",\n \"showDataDisclaimer\":true\n}", "lov_order_by": 1, "lov_event_id__lev_code": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -348,6 +374,19 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, + { + "object": "ListOfValue", + "userkey": "TEXT~AI_DISCLAIMER_DATA~ENU", + "item": { + "lov_name": "TEXT", + "lov_code": "AI_DISCLAIMER_DATA", + "lov_lang": "ENU", + "lov_value": "By using this chatbot, you agree that your data will be sent to [PROVIDER].", + "lov_order_by": 1, + "lov_event_id__lev_code": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "ListOfValue", "userkey": "TEXT~AI_ERROR_RETURN~ENU", @@ -374,6 +413,19 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, + { + "object": "ListOfValue", + "userkey": "TEXT~AI_GRAPH_DISCLAIMER~ENU", + "item": { + "lov_name": "TEXT", + "lov_code": "AI_GRAPH_DISCLAIMER", + "lov_lang": "ENU", + "lov_value": "

Disclaimer on the Use of AI and the Reliability of Generated Charts<\/h1>\n

The charts generated by this artificial intelligence, provided by Simplicité Software, are for informational purposes only. While considerable efforts are made to ensure the accuracy and relevance of the information provided, it is important to note that the results may contain inconsistencies and are not guaranteed.<\/p>\n\n

Responsibility<\/h2>\n

No Guarantee:<\/strong> The charts generated by the AI may contain errors or omissions. Simplicité Software does not guarantee the accuracy, reliability, or relevance of the information provided by the AI.<\/p>\n

Prudent Use:<\/strong> The use of the charts and information generated by the AI should be done with caution. Users are encouraged to independently verify the data and consult qualified professionals before making any decisions based on this information.<\/p>\n

Limitation of Liability:<\/strong> Under no circumstances shall Simplicité Software be liable for any direct, indirect, special, incidental, or consequential damages arising from the use or inability to use the charts generated by the AI. This includes, but is not limited to, financial losses, loss of profits, loss of opportunities, business interruptions, loss of data, material damage, or harm to professional reputation, even if Simplicité Software has been advised of the possibility of such damages.<\/p>\n\n

Recommendation<\/h2>\n

We strongly recommend verifying all information obtained through the AI and consulting additional sources or qualified professionals before making any decisions based on these charts.<\/p>", + "lov_order_by": 1, + "lov_event_id__lev_code": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "ListOfValue", "userkey": "TEXT~AI_JSON_ERROR~ENU", @@ -452,6 +504,19 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, + { + "object": "ListOfValue", + "userkey": "TEXT~AI_DISCLAIMER_DATA~FRA", + "item": { + "lov_name": "TEXT", + "lov_code": "AI_DISCLAIMER_DATA", + "lov_lang": "FRA", + "lov_value": "En utilisant ce chatbot, vous acceptez que vos données soient envoyées à [PROVIDER].", + "lov_order_by": 1, + "lov_event_id__lev_code": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "ListOfValue", "userkey": "TEXT~AI_ERROR_RETURN~FRA", @@ -478,6 +543,19 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, + { + "object": "ListOfValue", + "userkey": "TEXT~AI_GRAPH_DISCLAIMER~FRA", + "item": { + "lov_name": "TEXT", + "lov_code": "AI_GRAPH_DISCLAIMER", + "lov_lang": "FRA", + "lov_value": "

Avertissement sur l'utilisation de l'IA et la fiabilité des graphiques générés<\/h1>\n

Les graphiques générés par cette intelligence artificielle, fournis par Simplicité Software, sont présentés à titre informatif uniquement. Bien que des efforts considérables soient déployés pour assurer l'exactitude et la pertinence des informations fournies, il est important de noter que les résultats peuvent contenir des incohérences et ne sont pas garantis.<\/p>\n\n

Responsabilité<\/h2>\n

Absence de garantie :<\/strong> Les graphiques générés par l'IA peuvent comporter des erreurs ou des omissions. Simplicité Software ne garantit pas l'exactitude, la fiabilité ou la pertinence des informations fournies par l'IA.<\/p>\n

Utilisation prudente :<\/strong> L'utilisation des graphiques et des informations générés par l'IA doit se faire avec discernement. Les utilisateurs sont encouragés à vérifier indépendamment les données et à consulter des professionnels qualifiés avant de prendre des décisions fondées sur ces informations.<\/p>\n

Limitation de responsabilité :<\/strong> En aucun cas, Simplicité Software ne saurait être tenu responsable des dommages directs, indirects, spéciaux, accessoires ou consécutifs découlant de l'utilisation ou de l'impossibilité d'utiliser les graphiques générés par l'IA. Cela inclut, sans s'y limiter, les pertes financières, les pertes de profits, les pertes d'opportunités, les interruptions d'activité, les pertes de données, les dommages matériels ou les atteintes à la réputation professionnelle, même si Simplicité Software a été informé de la possibilité de tels dommages.<\/p>\n\n

Recommandation<\/h2>\n

Nous recommandons vivement de vérifier toutes les informations obtenues par l'intermédiaire de l'IA et de consulter des sources supplémentaires ou des professionnels qualifiés avant de prendre des décisions basées sur ces graphiques.<\/p>", + "lov_order_by": 1, + "lov_event_id__lev_code": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "ListOfValue", "userkey": "TEXT~AI_JSON_ERROR~FRA", @@ -553,6 +631,36 @@ "icon": "img/system/list_of_values", "field": "row_module_id", "list": [ + { + "object": "FieldListCode", + "userkey": "AI_CONF_MODELE~AIML", + "item": { + "lov_list_id__lov_name": "AI_CONF_MODELE", + "lov_code": "AIML", + "lov_order_by": 10, + "lov_label": "ai/ml", + "row_module_id__mdl_name": "AIBySimplicite", + "lov_color": null, + "lov_color_bg": null, + "lov_icon": null, + "lov_display": ["L"] + } + }, + { + "object": "FieldListCode", + "userkey": "AI_CONF_MODELE~HUGGINGFACE", + "item": { + "lov_list_id__lov_name": "AI_CONF_MODELE", + "lov_code": "HUGGINGFACE", + "lov_order_by": 10, + "lov_label": "huggingface", + "row_module_id__mdl_name": "AIBySimplicite", + "lov_color": null, + "lov_color_bg": null, + "lov_icon": null, + "lov_display": ["L"] + } + }, { "object": "FieldListCode", "userkey": "AI_CONF_MODELE~MISTRAL", @@ -673,6 +781,28 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, + { + "object": "FieldListValue", + "userkey": "AI_CONF_MODELE~HUGGINGFACE~ENU", + "item": { + "lov_code_id__lov_list_id__lov_name": "AI_CONF_MODELE", + "lov_code_id__lov_code": "HUGGINGFACE", + "lov_lang": "ENU", + "lov_value": "huggingface", + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "FieldListValue", + "userkey": "AI_CONF_MODELE~AIML~ENU", + "item": { + "lov_code_id__lov_list_id__lov_name": "AI_CONF_MODELE", + "lov_code_id__lov_code": "AIML", + "lov_lang": "ENU", + "lov_value": "ai/ml", + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "FieldListValue", "userkey": "AI_CONF_MODELE~MISTRAL~FRA", @@ -695,6 +825,28 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, + { + "object": "FieldListValue", + "userkey": "AI_CONF_MODELE~HUGGINGFACE~FRA", + "item": { + "lov_code_id__lov_list_id__lov_name": "AI_CONF_MODELE", + "lov_code_id__lov_code": "HUGGINGFACE", + "lov_lang": "FRA", + "lov_value": "huggingface", + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "FieldListValue", + "userkey": "AI_CONF_MODELE~AIML~FRA", + "item": { + "lov_code_id__lov_list_id__lov_name": "AI_CONF_MODELE", + "lov_code_id__lov_code": "AIML", + "lov_lang": "FRA", + "lov_value": "ai/ml", + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "FieldListValue", "userkey": "AI_EX_TYPE~OTHER~ENU", @@ -1551,7 +1703,7 @@ "obo_exportorder": null, "obo_distinct": false, "obo_indexable": false, - "obo_groupby": false, + "obo_groupby": null, "obo_dfltref": null, "obo_template_id__tpl_name": "AiConfiguration", "obo_copy": true, @@ -1570,13 +1722,13 @@ "obo_useform": true, "obo_title": null, "obo_icon": "icon/color/define", - "obo_refcount": false, - "obo_tree": false, + "obo_refcount": null, + "obo_tree": null, "obo_viewmode": "T", "obo_historic": null, "obo_printable": true, "obo_followlink": true, - "obo_mergeable": false, + "obo_mergeable": null, "obo_social": ["1"], "obo_rowid_id__fld_name": null, "obo_extend_id__obj_name": null, @@ -1607,7 +1759,7 @@ "obo_sortable": true, "obo_list_areas": null, "obo_minifiable": "M", - "obo_minified": false, + "obo_minified": null, "obo_permalink": null, "obo_btn_searchform": true, "aiFieldsParam": null @@ -4699,30 +4851,56 @@ "label": "View areas", "icon": "object", "field": "row_module_id", - "list": [{ - "object": "ViewItem", - "userkey": "AIViewExpTool~1", - "item": { - "vwi_view_id__viw_name": "AIViewExpTool", - "vwi_position": 1, - "vwi_type": "E", - "vwi_title": false, - "vwi_research_id__rch_name": null, - "vwi_research_id__rch_object_id__obo_name": null, - "vwi_research_id__rch_user_id__usr_login": null, - "vwi_search_spec": null, - "vwi_lov_code": null, - "vwi_show": null, - "vwi_url": "[EXPR:HTMLTool.getExternalObjectURL(\"AIExpTool\")]", - "vwi_image": null, - "vwi_subview_id__viw_name": null, - "vwi_treeview_id__trv_name": null, - "vwi_crosstab_id__ctb_name": null, - "vwi_printtmpl_id__prt_name": null, - "vwi_printtmpl_id__prt_lang": null, - "row_module_id__mdl_name": "AIBySimplicite" + "list": [ + { + "object": "ViewItem", + "userkey": "AIViewExpTool~1", + "item": { + "vwi_view_id__viw_name": "AIViewExpTool", + "vwi_position": 1, + "vwi_type": "E", + "vwi_title": false, + "vwi_research_id__rch_name": null, + "vwi_research_id__rch_object_id__obo_name": null, + "vwi_research_id__rch_user_id__usr_login": null, + "vwi_search_spec": null, + "vwi_lov_code": null, + "vwi_show": null, + "vwi_url": "[EXPR:HTMLTool.getExternalObjectURL(\"AIExpTool\")]", + "vwi_image": null, + "vwi_subview_id__viw_name": null, + "vwi_treeview_id__trv_name": null, + "vwi_crosstab_id__ctb_name": null, + "vwi_printtmpl_id__prt_name": null, + "vwi_printtmpl_id__prt_lang": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "ViewItem", + "userkey": "AIViewExpTool~2", + "item": { + "vwi_view_id__viw_name": "AIViewExpTool", + "vwi_position": 2, + "vwi_type": "C", + "vwi_title": true, + "vwi_research_id__rch_name": null, + "vwi_research_id__rch_object_id__obo_name": null, + "vwi_research_id__rch_user_id__usr_login": null, + "vwi_search_spec": null, + "vwi_lov_code": "AI_GRAPH_DISCLAIMER", + "vwi_show": null, + "vwi_url": null, + "vwi_image": null, + "vwi_subview_id__viw_name": null, + "vwi_treeview_id__trv_name": null, + "vwi_crosstab_id__ctb_name": null, + "vwi_printtmpl_id__prt_name": null, + "vwi_printtmpl_id__prt_lang": null, + "row_module_id__mdl_name": "AIBySimplicite" + } } - }] + ] }, { "object": "Resource", diff --git a/README.md b/README.md index a9d4418..952d421 100644 --- a/README.md +++ b/README.md @@ -117,6 +117,8 @@ In a `view` add an `external page` of source `External object`: `AIMetricsChat?m ### Lists * `AI_CONF_MODELE` + - `AIML` ai/ml + - `HUGGINGFACE` huggingface - `MISTRAL` Mistral - `OPENAI` OpenAI diff --git a/module-info.json b/module-info.json index 31bf8d7..bc8dc6c 100644 --- a/module-info.json +++ b/module-info.json @@ -1,9 +1,9 @@ { - "date": "2024-06-17 12:11:18", + "date": "2024-06-25 17:28:22", "name": "AIBySimplicite", "format": "json", "files": ["AIBySimplicite.json"], "repository": {"origin": {"uri": "https://github.com/simplicitesoftware/module_ai.git"}}, "version": "0.11", - "platform": "6.0.13" + "platform": "6.0.14" } \ No newline at end of file diff --git a/pom.xml b/pom.xml index 1eac945..16a226d 100644 --- a/pom.xml +++ b/pom.xml @@ -80,11 +80,5 @@ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ ${simplicite.version} javadoc - - com.simplicite - simplicite-api - ${simplicite.version} - sources - diff --git a/resources/Disposition/responsive5/CHATBOT_SCRIPT.js b/resources/Disposition/responsive5/CHATBOT_SCRIPT.js index 3732e8c..25a1baf 100644 --- a/resources/Disposition/responsive5/CHATBOT_SCRIPT.js +++ b/resources/Disposition/responsive5/CHATBOT_SCRIPT.js @@ -14,7 +14,7 @@ // Send message $('#sendMessage').click(function() { - var userInput = $('#userInput').val(); + let userInput = $('#userInput').val(); if (userInput !== '') { $('#messages').append('

You: ' + userInput + '
'); // Here, you can process the user's input and generate a bot response diff --git a/resources/ObjectExternal/AIChatBot/HTML.html b/resources/ObjectExternal/AIChatBot/HTML.html index 2e4ffbf..4a1cd04 100644 --- a/resources/ObjectExternal/AIChatBot/HTML.html +++ b/resources/ObjectExternal/AIChatBot/HTML.html @@ -2,10 +2,10 @@
-
+
- +
\ No newline at end of file diff --git a/resources/ObjectExternal/AIChatBot/SCRIPT.js b/resources/ObjectExternal/AIChatBot/SCRIPT.js index ff7b9c7..8024391 100644 --- a/resources/ObjectExternal/AIChatBot/SCRIPT.js +++ b/resources/ObjectExternal/AIChatBot/SCRIPT.js @@ -1,21 +1,26 @@ -var specialisation=""; -var app = $ui.getApp(); -var botTemplate; -var userTemplate; -var userName ="user"; -var AIChatBot = (function() { +var AIChatBot = AIChatBot || (function() { + let specialisation=""; + const app = $ui.getApp(); + let botTemplate; + let userTemplate; + let userName ="user"; - function render(params,spe) { + function render(params,spe,dataDisclaimer) { + console.log("AIChatBot render"); botTemplate = $("#botTemplate").html(); app.getSysParam(function(param){ botTemplate = Mustache.render(botTemplate, {botName:param}); },"AI_CHAT_BOT_NAME"); + if(app.getGrant().firstname ){ userName =app.getGrant().firstname; }else{ userName =app.getGrant().login; } - + if(dataDisclaimer){ + $('#data_warn').html(dataDisclaimer); + $('#data_warn').show(); + } userTemplate = $("#userTemplate").html(); specialisation = spe; document.getElementById('chatbot_input_message').addEventListener('keyup', function(event) { @@ -26,67 +31,67 @@ var AIChatBot = (function() { } - - return { render: render }; -})(); -function chatbotSendMessage() { - var userMessage = document.getElementById('chatbot_input_message').value; - var chatMessages = document.getElementById('chatbot_messages'); - // Ajoutez ici la logique de votre chatbot pour générer une réponse en fonction de userMessage - var historic =[]; - $(".user-messages").each(function() { - var text ={}; - text.role = "user"; - text.content = $(this).find(".msg").text(); - historic.push(JSON.stringify(text)); - text={}; - text.role = "assistant"; - text.content = $(this).next(".bot-messages").find(".msg").text(); - historic.push(JSON.stringify(text)); + function chatbotSendMessage() { + let userMessage = document.getElementById('chatbot_input_message').value; + let chatMessages = document.getElementById('chatbot_messages'); + // Ajoutez ici la logique de votre chatbot pour générer une réponse en fonction de userMessage + let historic =[]; + $(".user-messages").each(function() { + let text ={}; + text.role = "user"; + text.content = $(this).find(".msg").text(); + historic.push(JSON.stringify(text)); + text={}; + text.role = "assistant"; + text.content = $(this).next(".bot-messages").find(".msg").text(); + historic.push(JSON.stringify(text)); + + }); + // Affichez la question de l'utilisateur et la réponse du chatbot dans le chat + + + chatMessages.innerHTML += Mustache.render(userTemplate, {user:userName,ask:userMessage}); + chatMessages.innerHTML += botTemplate; + // Params + let useAsync = true; // use async callback pattern + let url = Simplicite.ROOT+"/ext/AIRestAPI"; // authenticated webservice + let postParams = {prompt:userMessage, specialisation: specialisation, historic: JSON.stringify(historic)}; // post params - }); - // Affichez la question de l'utilisateur et la réponse du chatbot dans le chat + // Efface le champ de saisie utilisateur + document.getElementById('chatbot_input_message').value = ''; + // Faites défiler vers le bas pour afficher les messages les plus récents + chatMessages.scrollTop = chatMessages.scrollHeight; + // Call Webservice (POST requests only) - chatMessages.innerHTML += Mustache.render(userTemplate, {user:userName,ask:userMessage}); - chatMessages.innerHTML += botTemplate; - // Params - var useAsync = true; // use async callback pattern - var url = Simplicite.ROOT+"/ext/AIRestAPI"; // authenticated webservice - var postParams = {prompt:userMessage, specialisation: specialisation, historic: JSON.stringify(historic)}; // post params + app._call(useAsync, url, postParams, function callback(botResponse){ + if(!(botResponse.hasOwnProperty('type') && botResponse.type == 'error')){ + let result = botResponse.response.choices[0].message.content; + result = escapeHtml(result); + result = $view.markdownToHTML(result).html(); + result = result.replaceAll("\n","
"); + + $(".bot-messages:last-child span").html(result); + + }else{ + $(".bot-messages:last-child span").text("Sorry, an error occurred"); + } + + chatMessages.scrollTop = chatMessages.scrollHeight; + }); - // Efface le champ de saisie utilisateur - document.getElementById('chatbot_input_message').value = ''; - - // Faites défiler vers le bas pour afficher les messages les plus récents - chatMessages.scrollTop = chatMessages.scrollHeight; - // Call Webservice (POST requests only) - - app._call(useAsync, url, postParams, function callback(botResponse){ - if(!(botResponse.hasOwnProperty('type') && botResponse.type == 'error')){ - var result = botResponse.response.choices[0].message.content; - result = escapeHtml(result); - result = $view.markdownToHTML(result).html(); - result = result.replaceAll("\n","
"); - - $(".bot-messages:last-child span").html(result); - - }else{ - $(".bot-messages:last-child span").text("Sorry, an error occurred"); - } - - chatMessages.scrollTop = chatMessages.scrollHeight; - }); + + } + function escapeHtml(text) { + let map = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }; + return text.replace(/[&<>"']/g, function(m) { return map[m]; }); + } + return { render: render, chatbotSendMessage: chatbotSendMessage}; - -} -function escapeHtml(text) { - var map = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''' - }; - return text.replace(/[&<>"']/g, function(m) { return map[m]; }); -} \ No newline at end of file +})(); diff --git a/resources/ObjectExternal/AIChatBot/STYLES.less b/resources/ObjectExternal/AIChatBot/STYLES.less index 19f2715..9b08412 100644 --- a/resources/ObjectExternal/AIChatBot/STYLES.less +++ b/resources/ObjectExternal/AIChatBot/STYLES.less @@ -32,6 +32,16 @@ border: none; height: 40px; } - + .warning { + background-color: #ffeeba; + border: 1px solid #ffc107; + color: #856404; + padding: 10px; + margin: 10px 0; + border-radius: 5px; + } + #data_warn{ + display: none; + } } \ No newline at end of file diff --git a/resources/ObjectExternal/AIExpTool/HTML.html b/resources/ObjectExternal/AIExpTool/HTML.html index 4e7f759..918caf5 100644 --- a/resources/ObjectExternal/AIExpTool/HTML.html +++ b/resources/ObjectExternal/AIExpTool/HTML.html @@ -1,8 +1,7 @@ - +{{{script}}}
+ diff --git a/resources/ObjectExternal/AIMetricsChat/HTML.html b/resources/ObjectExternal/AIMetricsChat/HTML.html index 33f08c8..8f4219b 100644 --- a/resources/ObjectExternal/AIMetricsChat/HTML.html +++ b/resources/ObjectExternal/AIMetricsChat/HTML.html @@ -4,7 +4,7 @@
- +
diff --git a/resources/ObjectExternal/AIMetricsChat/SCRIPT.js b/resources/ObjectExternal/AIMetricsChat/SCRIPT.js index 2d8ef87..9e0daa0 100644 --- a/resources/ObjectExternal/AIMetricsChat/SCRIPT.js +++ b/resources/ObjectExternal/AIMetricsChat/SCRIPT.js @@ -1,15 +1,17 @@ -var app = $ui.getApp(); -var botTemplateMetrics = "
{{botName}}: ...
"; -var userTemplateMetrics ="
{{user}}: {{msg}}
"; -var swagger; -var userName = "user"; -var AIMetricsChat = (function() { +var AIMetricsChat = AIMetricsChat || (function() { + const app = $ui.getApp(); + let botTemplateMetrics = "
{{botName}}: ...
"; + let userTemplateMetrics ="
{{user}}: {{msg}}
"; + let swagger=""; + let userName = "user"; function render(params,s) { // set button text + console.log("AIMetricsChat render: "+s); + $('#metrics_user_text').click(function() { showWarn();}); app.getTexts(function(textes){ - sendText = textes?.AI_BUTTON_SEND ||"Send"; - cancelText = textes?.AI_BUTTON_CANCEL || "Cancel"; - var length = Math.max(sendText.length, cancelText.length); + let sendText = textes?.AI_BUTTON_SEND ||"Send"; + let cancelText = textes?.AI_BUTTON_CANCEL || "Cancel"; + let length = Math.max(sendText.length, cancelText.length); $('.chat-button').css('min-width', length + 'em'); $('.user-message').css('width', 'calc(100% - ' + (length + 1) + 'em)'); $('#metrics_send_button').text(sendText); @@ -27,92 +29,99 @@ var AIMetricsChat = (function() { },"AI_CHAT_BOT_NAME"); $('#metrics_user_text').keypress(function(e) { if (e.which === 13) { - sendMetricsMessage(swagger); + sendMetricsMessage(); } }); } - - return { render: render }; -})(); -function sendMetricsMessage(){ - let isCancelled = false; - $('#metrics_cancel_button').show(); - $('#metrics_cancel_button').click(function() { - isCancelled = true; - resetChat(); - }); - let input = ''; - $('#metrics_messages').html(''); - canvas = $('canvas'); - canvas.each(function(canva) { - let id = canvas[canva].id; - let graph = Chart.getChart(id); - if(graph) graph.destroy(); - - - }); - $('#ia_html').html(''); - input = $('#metrics_user_text').val(); - $('#metrics_user_text').val(''); - $('#metrics_send_button').prop('disabled', true); - $('#metrics_send_button').hide(); - $('#metrics_user_text').prop('disabled', true); - var params = {prompt:input, reqType:"metrics",swagger:swagger,lang:app.grant.lang}; - $('#metrics_messages').append(userTemplateMetrics.replace('{{msg}}',input)); - $('#metrics_messages').append(botTemplateMetrics); - var url = Simplicite.ROOT+"/ext/AIRestAPI"; - var useAsync = true; - app._call(useAsync, url, params, function callback(botResponse){ - if(isCancelled){ + function sendMetricsMessage(){ + console.log("sendMetricsMessage: "+swagger); + let isCancelled = false; + $('#metrics_cancel_button').show(); + $('#metrics_cancel_button').click(function() { + isCancelled = true; + resetChat(); + }); + let input = ''; + $('#metrics_messages').html(''); + let canvas = $('canvas'); + canvas.each(function(canva) { + let id = canvas[canva].id; + let graph = Chart.getChart(id); + if(graph) graph.destroy(); - return; - } - reOpenChat(); - if(botResponse.html == null && botResponse.js == null && botResponse.text != null){ - $('#metrics_messages .bot-messages:last .msg').text(botResponse.text.replace(/\\n/g, "
")); - return; - } - if(botResponse.error !=null || ((botResponse.js == null && (botResponse.html == null || !botResponse.html.includes("script"))))){ - $('#metrics_messages .bot-messages:last .msg').text("Sorry, I can't understand your request. Please try again."); - return; - } - if(botResponse.text == null){ - botResponse.text = ""; - } - $('#metrics_messages .bot-messages:last .msg').text(botResponse.text.replace(/\\n/g, "
")); - $('#ia_html').html(botResponse.html); - - if(botResponse.js != ""){ - try { - eval(botResponse.js); - //check if function is auto call - if(botResponse.js.indexOf(botResponse.function) == -1) { - eval(botResponse.function); - } + }); + $('#ia_html').html(''); + input = $('#metrics_user_text').val(); + $('#metrics_user_text').val(''); + $('#metrics_send_button').prop('disabled', true); + $('#metrics_send_button').hide(); + $('#metrics_user_text').prop('disabled', true); + let params = {prompt:input, reqType:"metrics",swagger:swagger,lang:app.grant.lang}; + $('#metrics_messages').append(userTemplateMetrics.replace('{{msg}}',input)); + $('#metrics_messages').append(botTemplateMetrics); + let url = Simplicite.ROOT+"/ext/AIRestAPI"; + let useAsync = true; + app._call(useAsync, url, params, function callback(botResponse){ + if(isCancelled){ - }catch(e){ + return; + } + reOpenChat(); + if(botResponse.html == null && botResponse.js == null && botResponse.text != null){ + $('#metrics_messages .bot-messages:last .msg').text(botResponse.text.replace(/\\n/g, "
")); + return; + } + if(botResponse.error !=null || ((botResponse.js == null && !botResponse?.html?.includes("script")))){ $('#metrics_messages .bot-messages:last .msg').text("Sorry, I can't understand your request. Please try again."); + + return; } - } - // Définir les options globales pour Chart.js - Chart.defaults.responsive = true; - Chart.defaults.maintainAspectRatio = false; + if(botResponse.text == null){ + botResponse.text = ""; + } + $('#metrics_messages .bot-messages:last .msg').text(botResponse.text.replace(/\\n/g, "
")); + $('#ia_html').html(botResponse.html); + + if(botResponse.js != ""){ + try { + eval(botResponse.js); + //check if function is auto call + if(botResponse.js.indexOf(botResponse.function) == -1) { + eval(botResponse.function); + } + + }catch(e){ + $('#metrics_messages .bot-messages:last .msg').text("Sorry, I can't understand your request. Please try again."); + } + } + // Définir les options globales pour Chart.js + Chart.defaults.responsive = true; + Chart.defaults.maintainAspectRatio = false; + + + }); - - }); + } + function reOpenChat(){ + $('#metrics_user_text').prop('disabled', false); + $('#metrics_send_button').show(); + $('#metrics_send_button').prop('disabled', false); + $('#metrics_cancel_button').hide(); + $('#metrics_cancel_button').onclick = null; + } + function resetChat(){ + $('#metrics_messages').html(''); + reOpenChat(); -} -function reOpenChat(){ - $('#metrics_user_text').prop('disabled', false); - $('#metrics_send_button').show(); - $('#metrics_send_button').prop('disabled', false); - $('#metrics_cancel_button').hide(); - $('#metrics_cancel_button').onclick = null; -} -function resetChat(){ - $('#metrics_messages').html(''); - reOpenChat(); + } + function showWarn(){ + app.getTexts(function(textes){ + $ui.alert(app.getText(textes?.AI_GRAPH_DISCLAIMER, false)); + $('#metrics_user_text').unbind('click'); + }); + } + return { render: render ,sendMetricsMessage:sendMetricsMessage}; +})(); -} diff --git a/resources/ObjectExternal/AIMetricsChat/STYLES.less b/resources/ObjectExternal/AIMetricsChat/STYLES.less index a2b43fa..b425934 100644 --- a/resources/ObjectExternal/AIMetricsChat/STYLES.less +++ b/resources/ObjectExternal/AIMetricsChat/STYLES.less @@ -10,7 +10,6 @@ width: calc(33.33% - 10px); /* Adjust the width as needed */ height: 100%; margin-right: 10px; /* Adjust the margin as needed */ - height: 100%; } //specific to metrics .result-space { @@ -35,7 +34,7 @@ display: none; } canvas{ - max-sheight: 100% + max-height: 100% } } \ No newline at end of file diff --git a/resources/ObjectExternal/AIProcessResource/AI_GEN_MODEL.js b/resources/ObjectExternal/AIProcessResource/AI_GEN_MODEL.js index 71d6404..a55c18e 100644 --- a/resources/ObjectExternal/AIProcessResource/AI_GEN_MODEL.js +++ b/resources/ObjectExternal/AIProcessResource/AI_GEN_MODEL.js @@ -1,172 +1,161 @@ -var app = $ui.getApp(); -var data = app.getBusinessProcess("AIModuleCreate").activity.data.Data; -var moduleID = data.moduleId.values[0]; -function AINewModel() { - var idsData = data.allIds; - var ids = null; - if (idsData != null){ - ids = data.allIds.values; - } - if(!ids || !ids.length || ids.length==0) { - ids = data.createdIds.values; - newModel(ids); - }else{ - var obj = app.getBusinessObject("Model"); - obj.searchForList(function(list) { - if(list.length>0){ - $ui.confirm({ - name: "modeler", - title: "modeler", - content: "Do you want to create a new model or add to the existing model?", - okLabel: "New", - cancelLabel: "Add", - onOk: function() { - newModel(ids); - }, - onCancel: function() { - choiceModel(list); - } - }); - }else{ - newModel(ids); - } - }, - { - row_module_id: moduleID, - }, - null) - - } - - -} -function newModel(ids){ - let moduleName = data.moduleName.values[0]; - var list = []; - // Needs objects to insert - if (!ids || !ids.length || ids.length==0) { - $ui.alert("no selection"); - return; - } - - $(ids).each(function(i,id) { - list.push({ - object: "ObjectInternal", // node object - id: id, // node row_id - template: "BusinessObject" , // node template name - x: i*50 + 30, // dummy position - y: i*30 + 30, - //container: null // no container - }); - }); - // Load SVG engine - $ui.loadDiagramEngine(false, function() { - try { - // Create the model in silent mode - let currentDate = new Date(); - let formattedDate = currentDate.toLocaleString('en-US', { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit' }).replace(/[/:\s]/g, '-'); - let name = moduleName + "IaGeneratedObjects" + formattedDate; - $ui.diagram.create("ModelBusinessObject", name, { - hidden: true, // hide the modeler - docked: false, - nodes: list, // nodes to insert - module: moduleID, - fetch: false, - silent: true +var aiGenModel = aiGenModel || (function() { + const app = $ui.getApp(); + const data = app.getBusinessProcess("AIModuleCreate").activity.data.Data; + const moduleID = data.moduleId.values[0]; + function AINewModel() { + let idsData = data.allIds; + let ids = null; + if (idsData != null){ + ids = data.allIds.values; + } + if (!ids?.length || ids.length==0) { + ids = data.createdIds.values; + newModel(ids); + }else{ + let obj = app.getBusinessObject("Model"); + obj.searchForList(function(list) { + if(list.length>0){ + $ui.confirm({ + name: "modeler", + title: "modeler", + content: "Do you want to create a new model or add to the existing model?", + okLabel: "New", + cancelLabel: "Add", + onOk: function() { + newModel(ids); + }, + onCancel: function() { + choiceModel(list); + } + }); + }else{ + newModel(ids); + } + }, + { + row_module_id: moduleID, }, - function(diagram) { - // auto-placement - if(diagram.layoutSprings) diagram.layoutSprings({ - stiffness: 0, - repulsion: 750, - damping: 0, - remoteness: 75, - gravity: 70, - maxDuration: 5000, // 5sec - - callback: function() { - // Save and close - diagram.save(function() { - - diagram.close(); - // Re-open in a window - $ui.displayModeler(null, diagram.modelId, { - svg: true, - docked: false, - popup: false - }); - },true); - } - }); - }); + null) } - catch(e) { - alert("error see log"); - } - }); -} -function choiceModel(list){ - $(".extern").append("
"); - $("#modeler").append("
"); - $("#choice").css("display","grid"); - $("#choice").css("grid-gap","10px"); - $("#choice").css("grid-template-columns", "repeat(4, 1fr)"); - var row=1; - var col=1; - for(var i=0; i
"+list[i].mod_name+"
"); - $("#"+row_id).css("grid-column",col); - $("#"+row_id).css("grid-row",row); - $("#"+row_id).css("height","100%"); - var url = app.imageURL("Model", "mod_image", row_id, list[i].mod_image, true); - $("#"+row_id).append(""); - col++; - if(col>4){ - col=1; - row++; + + + } + function newModel(ids){ + let moduleName = data.moduleName.values[0]; + + // Needs objects to insert + if (!ids?.length || ids.length==0){ + $ui.alert("no selection"); + return; } - $("#"+row_id).click(function(){ - $("#modeler").remove(); - updateModel($(this).attr("id")); + let list = construcNodesList(ids); + // Load SVG engine + $ui.loadDiagramEngine(false, function() { + try { + // Create the model in silent mode + let currentDate = new Date(); + let formattedDate = currentDate.toLocaleString('en-US', { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit' }).replace(/[/:\s]/g, '-'); + let name = moduleName + "IaGeneratedObjects" + formattedDate; + $ui.diagram.create("ModelBusinessObject", name, { + hidden: true, // hide the modeler + docked: false, + nodes: list, // nodes to insert + module: moduleID, + fetch: false, + silent: true + }, + function(diagram) { + // auto-placement + if(diagram.layoutSprings) diagram.layoutSprings({ + stiffness: 0, + repulsion: 750, + damping: 0, + remoteness: 75, + gravity: 70, + maxDuration: 5000, // 5sec + callback: saveOpenModeler(diagram) + }); + }); + + } + catch(e) { + alert("error see log"); + } }); - - } -} -function updateModel(modelId){ - let ids = data.createdIds.values; - let moduleName = data.moduleName.values[0]; - $ui.loadDiagramEngine(false, function() { + } + function choiceModel(list){ + $(".extern").append("
"); + $("#modeler").append("
"); + $("#choice").css("display","grid"); + $("#choice").css("grid-gap","10px"); + $("#choice").css("grid-template-columns", "repeat(4, 1fr)"); + let row=1; + let col=1; + for(let item of list){ + let row_id = item.row_id; + $("#choice").append("
"+item.mod_name+"
"); + $("#"+row_id).css("grid-column",col); + $("#"+row_id).css("grid-row",row); + $("#"+row_id).css("height","100%"); + let url = app.imageURL("Model", "mod_image", row_id, item.mod_image, true); + $("#"+row_id).append(""); + col++; + if(col>4){ + col=1; + row++; + } + $("#"+row_id).click(function(){ + $("#modeler").remove(); + updateModel($(this).attr("id")); + }); + + } + } + function updateModel(modelId){ + $ui.loadDiagramEngine(false, () => openAndUpdateModel(modelId)); + } + function openAndUpdateModel(modelId){ + let ids = data.createdIds.values; $ui.diagram.open(modelId, { svg: true, docked: false, hidden: true }, function(diagram) { - var list = []; - $(ids).each(function(i,id) { - list.push({ - object: "ObjectInternal", // node object - id: id, // node row_id - template: "BusinessObject" , // node template name - x: i*50 + 30, // dummy position - y: i*30 + 30, - //container: null // no container + let list = construcNodesList(ids); + diagram.insertNodes(list, saveOpenModeler(diagram)); + + }); + } + function saveOpenModeler(diagram) { + // Save and Re-open + return function(){ + diagram.save(function() { + diagram.close(); + + $ui.displayModeler(null, diagram.modelId, { + svg: true, + docked: false, + popup: false }); + },true); + } + } + function construcNodesList(ids){ + let list = []; + $(ids).each(function(i,id) { + list.push({ + object: "ObjectInternal", // node object + id: id, // node row_id + template: "BusinessObject" , // node template name + x: i*50 + 30, // dummy position + y: i*30 + 30, + //container: null // no container }); - diagram.insertNodes(list, function() { - diagram.save(function() { - diagram.close(); - $ui.displayModeler(null, modelId, { - svg: true, - docked: false, - popup: false - }); - },true); - }); - }); -/* } */ - }); + return list; + } + return{AINewModel:AINewModel}; +})(); + -} \ No newline at end of file diff --git a/resources/ObjectExternal/AIProcessResource/CHAT_BOT_MODEL.html b/resources/ObjectExternal/AIProcessResource/CHAT_BOT_MODEL.html index a4b016c..e31cbf8 100644 --- a/resources/ObjectExternal/AIProcessResource/CHAT_BOT_MODEL.html +++ b/resources/ObjectExternal/AIProcessResource/CHAT_BOT_MODEL.html @@ -1,6 +1,5 @@ - - +{{{script}}} @@ -17,9 +16,9 @@
- - - + + +
diff --git a/resources/ObjectExternal/AIProcessResource/CHAT_BOT_SCRIPT.js b/resources/ObjectExternal/AIProcessResource/CHAT_BOT_SCRIPT.js index 2cb1ac2..8af5ead 100644 --- a/resources/ObjectExternal/AIProcessResource/CHAT_BOT_SCRIPT.js +++ b/resources/ObjectExternal/AIProcessResource/CHAT_BOT_SCRIPT.js @@ -1,162 +1,171 @@ -var botTemplate; -var userTemplate; -var app; -var userName ="user"; -$(window).resize(function() { - resizeUp(); -}); -var image_base64 =""; -$(".btn-validate").remove(); -function resizeUp(){ - const vh = window.innerHeight * 0.01; - const maxHeight = `${45 * vh - 250}px`; - const minHeight = `40px`; - - $("#module_user_message").css("height", minHeight); - var textheight = $("#module_user_message").prop('scrollHeight')-5 ; - var areaheight = $("#chat-container").height(); - var imgheight = $("#input-img").is(':hidden')?0: $("#input-img").height(); - if(textheight >maxHeight-imgheight){ - textheight = maxHeight-imgheight; - - }else if(textheight < minHeight){ - textheight = minHeight; - } - $("#module_user_message").css("height", textheight); -//$("#user-input").css("height", textheight); - areaheight = areaheight - (textheight +30)-imgheight; - $("#module_chat_messages").css("height", areaheight); -} -$(document).ready(function() { - // add url to img bootstrap $ui.getApp().getIconURL("icon/color/camera"); - $("#add-img-icon").attr("src", $ui.getApp().getIconURL("icon/color/camera")); - botTemplate = $("#botTemplate").html(); - userTemplate = $("#userTemplate").html(); - app = $ui.getApp(); - app.getSysParam(function(param){ +var AIWfChatBot = AIWfChatBot || (function() { + let botTemplate; + let userTemplate; + const app = $ui.getApp(); + let userName ="user"; + let image_base64 =""; + function resizeUp(){ + const vh = window.innerHeight * 0.01; + const maxHeight = `${45 * vh - 250}px`; + const minHeight = `40px`; - botTemplate = botTemplate.replace("{{botName}}",param); - $("#AIchatbotProcess").html($("#AIchatbotProcess").html().replaceAll("{{botName}}",param)); - },"AI_CHAT_BOT_NAME"); - - if(app.getGrant().firstname ){ - userName =app.getGrant().firstname; - }else{ - userName =app.getGrant().login; + $("#module_user_message").css("height", minHeight); + let textheight = $("#module_user_message").prop('scrollHeight')-5 ; + let areaheight = $("#chat-container").height(); + let imgheight = $("#input-img").is(':hidden')?0: $("#input-img").height(); + if(textheight >maxHeight-imgheight){ + textheight = maxHeight-imgheight; + + }else if(textheight < minHeight){ + textheight = minHeight; + } + $("#module_user_message").css("height", textheight); + areaheight = areaheight - (textheight +30)-imgheight; + $("#module_chat_messages").css("height", areaheight); } - userTemplate=userTemplate.replace('{{user}}', userName); -}); - - -function sendModuleMessage() { - var userMessage = document.getElementById('module_user_message').value; - var userImage = $("#input-img img").attr("src"); - var chatMessages = document.getElementById('module_chat_messages'); - var historic = []; - if ($("#context").length >0) { - text = {}; - text.role = "assistant"; - text.content = $("#context").text(); - historic.push(JSON.stringify(text)); - } - $(".user-messages").each(function() { - var text ={}; - text.role = "user"; - let contents =[]; - let content = {"type":"text","text":$(this).find(".msg").text()}; - contents.push(content); - let img = $(this).find(".img"); - if(img.length >0){ - content = {"type":"image_url","image_url":{"url":img.attr("src")}}; - contents.push(content); - } - text.content = contents - historic.push(JSON.stringify(text)); - text={}; - text.role = "assistant"; - text.content = $(this).next(".bot-messages").find(".msg").text(); - historic.push(JSON.stringify(text)); + function render() { + $(".btn-validate").remove(); + $(window).resize(function() { + resizeUp(); + }); + // add url to img bootstrap $ui.getApp().getIconURL("icon/color/camera"); + $("#add-img-icon").attr("src", $ui.getApp().getIconURL("icon/color/camera")); + botTemplate = $("#botTemplate").html(); + userTemplate = $("#userTemplate").html(); + app.getSysParam(function(param){ + botTemplate = botTemplate.replace("{{botName}}",param); + $("#AIchatbotProcess").html($("#AIchatbotProcess").html().replace("{{botName}}",param)); + },"AI_CHAT_BOT_NAME"); - }); - - // Affichez la question de l'utilisateur et la réponse du chatbot dans le chat - userCompletMessage =userTemplate.replace('{{msg}}', userMessage.replaceAll("\n","
")); - if(userImage){ - userCompletMessage = userCompletMessage.replace('{{img}}', ""); - }else{ - userCompletMessage = userCompletMessage.replace('{{img}}', ""); - - } - chatMessages.innerHTML += userCompletMessage; - chatMessages.innerHTML += botTemplate; - $("#send-button").attr("disabled", "disabled"); - // Params - var useAsync = true; // use async callback pattern - var url = Simplicite.ROOT+"/ext/AIRestAPI"; // authenticated webservice - let prompt =[]; - prompt.push({"type":"text","text":userMessage}); - if(userImage){ - prompt.push({"type":"image_url","image_url":{"url":userImage}}); + if(app.getGrant().firstname ){ + userName =app.getGrant().firstname; + }else{ + userName =app.getGrant().login; + } + userTemplate=userTemplate.replace('{{user}}', userName); } - var postParams = {prompt:JSON.stringify(prompt), specialisation: "You help design uml for object-oriented applications. Without function and whith relation description. Respond with a text", historic: JSON.stringify(historic)}; // post params - - // Efface le champ de saisie utilisateur - document.getElementById('module_user_message').value = ''; - $("#input-img img").removeAttr("src"); - $("#input-img").hide(); - resizeUp(); + function sendModuleMessage() { + let userMessage = document.getElementById('module_user_message').value; + let userImage = $("#input-img img").attr("src"); + let chatMessages = document.getElementById('module_chat_messages'); + let historic = []; + if ($("#context").length >0) { + let text = {}; + text.role = "assistant"; + text.content = $("#context").text(); + historic.push(JSON.stringify(text)); + } - // Faites défiler vers le bas pour afficher les messages les plus récents - chatMessages.scrollTop = chatMessages.scrollHeight; - // Call Webservice (POST requests only) - - app._call(useAsync, url, postParams, function callback(botResponse){ - var text ={}; - text.role = "user"; - text.content = userMessage; - historic.push(JSON.stringify(text)); - if(!(botResponse.hasOwnProperty('type') && botResponse.type == 'error')){ - var result = botResponse.response.choices[0].message.content; - result = result.replaceAll("\n","
"); - $(".bot-messages:last-child span").html(result); - + $(".user-messages").each(function() { + let text ={}; + text.role = "user"; + let contents =[]; + let content = {"type":"text","text":$(this).find(".msg").text()}; + contents.push(content); + let img = $(this).find(".img"); + if(img.length >0){ + content = {"type":"image_url","image_url":{"url":img.attr("src")}}; + contents.push(content); + } + text.content = contents + historic.push(JSON.stringify(text)); text={}; text.role = "assistant"; - text.content =result; + text.content = $(this).next(".bot-messages").find(".msg").text(); historic.push(JSON.stringify(text)); - + }); + + // Affichez la question de l'utilisateur et la réponse du chatbot dans le chat + let userCompletMessage =userTemplate.replace('{{msg}}', userMessage.replaceAll("\n","
")); + if(userImage){ + userCompletMessage = userCompletMessage.replace('{{img}}', ""); }else{ - $(".bot-messages:last-child span").text("Sorry, an error occurred"); - - text={}; - text.role = "assistant"; - text.content ="Sorry, an error occurred"; - historic.push(JSON.stringify(text)); + userCompletMessage = userCompletMessage.replace('{{img}}', ""); + + } + chatMessages.innerHTML += userCompletMessage; + chatMessages.innerHTML += botTemplate; + $("#send-button").attr("disabled", "disabled"); + // Params + let useAsync = true; // use async callback pattern + let url = Simplicite.ROOT+"/ext/AIRestAPI"; // authenticated webservice + let prompt =[]; + prompt.push({"type":"text","text":userMessage}); + if(userImage){ + prompt.push({"type":"image_url","image_url":{"url":userImage}}); } - $("#AI_data").html(JSON.stringify(historic)); - $("#send-button").removeAttr("disabled"); + let postParams = {prompt:JSON.stringify(prompt), specialisation: "You help design uml for object-oriented applications. Without function and whith relation description. Respond with a text", historic: JSON.stringify(historic)}; // post params + + // Efface le champ de saisie utilisateur + document.getElementById('module_user_message').value = ''; + $("#input-img img").removeAttr("src"); + $("#input-img").hide(); + resizeUp(); + + // Faites défiler vers le bas pour afficher les messages les plus récents chatMessages.scrollTop = chatMessages.scrollHeight; - }); - -} -function addImage(){ - var input = document.createElement('input'); - input.type = 'file'; - input.accept = 'image/jpeg'; - input.onchange = function(event) { - var file = event.target.files[0]; - var reader = new FileReader(); - reader.onload = function(event) { - image_base64 = event.target.result; - $("#input-img img").attr("src", image_base64); - $("#input-img").show(); - resizeUp(); + // Call Webservice (POST requests only) + + app._call(useAsync, url, postParams, function callback(botResponse){ + let text ={}; + text.role = "user"; + text.content = userMessage; + historic.push(JSON.stringify(text)); + if(!(botResponse.hasOwnProperty('type') && botResponse.type == 'error')){ + let result = botResponse.response.choices[0].message.content; + result = result.replaceAll("\n","
"); + $(".bot-messages:last-child span").html(result); + + text={}; + text.role = "assistant"; + text.content =result; + historic.push(JSON.stringify(text)); + + + }else{ + $(".bot-messages:last-child span").text("Sorry, an error occurred"); + + text={}; + text.role = "assistant"; + text.content ="Sorry, an error occurred"; + historic.push(JSON.stringify(text)); + } + $("#AI_data").html(JSON.stringify(historic)); + $("#send-button").removeAttr("disabled"); + chatMessages.scrollTop = chatMessages.scrollHeight; + }); + + } + function addImage(){ + let input = document.createElement('input'); + input.type = 'file'; + input.accept = 'image/jpeg'; + input.onchange = function(event) { + let file = event.target.files[0]; + let reader = new FileReader(); + reader.onload = function(event) { + image_base64 = event.target.result; + $("#input-img img").attr("src", image_base64); + $("#input-img").show(); + resizeUp(); + }; + reader.readAsDataURL(file); }; - reader.readAsDataURL(file); + input.click(); + } + + return { + sendModuleMessage: sendModuleMessage, + addImage: addImage, + render: render, + resizeUp: resizeUp }; - input.click(); -} \ No newline at end of file +})(); +$(document).ready(function() { + AIWfChatBot.render(); + +}); \ No newline at end of file diff --git a/resources/ObjectExternal/AIPromptTool/HTML.html b/resources/ObjectExternal/AIPromptTool/HTML.html index 8581206..498a13d 100644 --- a/resources/ObjectExternal/AIPromptTool/HTML.html +++ b/resources/ObjectExternal/AIPromptTool/HTML.html @@ -1,6 +1,6 @@

-
+
\ No newline at end of file diff --git a/resources/ObjectExternal/AIPromptTool/SCRIPT.js b/resources/ObjectExternal/AIPromptTool/SCRIPT.js index 946293c..eaf2144 100644 --- a/resources/ObjectExternal/AIPromptTool/SCRIPT.js +++ b/resources/ObjectExternal/AIPromptTool/SCRIPT.js @@ -1,45 +1,43 @@ -var objectID; -var objectName; -var AIPromptTool = (function() { + +var AIPromptTool = AIPromptTool || (function() { + let objectID; + let objectName; function render(params,json) { - var template = $("#selector").html(); + let template = $("#selector").html(); objectID = json.objectID; objectName = json.objectName; $('#AIprompttool').html(Mustache.render(template, json.fields)); - //callApi("[VALUE:aiTestLongString]",json.objectName,json.objectID,"tu est un chatbot d'aide a la décisition dans le domaine de l'informatique."); + } + function selected(self){ + let val = self.value; + if( val ) { + $('#result').html("[VALUE:"+val+"]"); + }else{ + $('#result').html(""); + } + + } - - return { render: render }; -})(); -function selected(self){ - var val = self.value; - if( val ) { - $('#result').html("[VALUE:"+val+"]"); - }else{ - $('#result').html(""); + function sendPrompt(){ + let prompt = $('#prompt').val(); + callApi(prompt,null, $('#AIAnswer')); } + function callApi(prompt,specialisation=null,ctn=null){ + let app = $ui.getApp(); + // Params + let useAsync = true; // use async callback pattern + let url = Simplicite.ROOT+"/ext/AIRestAPI"; // authenticated webservice + let postParams = {prompt:prompt,objectName:objectName,objectID:objectID , specialisation: specialisation}; // post params + // Call Webservice (POST requests only) + ctn.text(""); + $('#AIProcess').show(); - + app._call(useAsync, url, postParams, function callback(rslt){ + ctn.text(rslt.response.choices[0].message.content); + $('#AIProcess').hide(); + }); -} -function sendPrompt(){ - var prompt = $('#prompt').val(); - callApi(prompt,null, $('#AIAnswer')); -} -function callApi(prompt,specialisation=null,ctn=null){ - var app = $ui.getApp(); - // Params - var useAsync = true; // use async callback pattern - var url = Simplicite.ROOT+"/ext/AIRestAPI"; // authenticated webservice - var postParams = {prompt:prompt,objectName:objectName,objectID:objectID , specialisation: specialisation}; // post params - // Call Webservice (POST requests only) - ctn.text(""); - $('#AIProcess').show(); - - app._call(useAsync, url, postParams, function callback(rslt){ - ctn.text(rslt.response.choices[0].message.content); - $('#AIProcess').hide(); - }); - -} \ No newline at end of file + } + return { render: render ,sendPrompt:sendPrompt,selected:selected}; +})(); diff --git a/src/com/simplicite/commons/AIBySimplicite/AIData.java b/src/com/simplicite/commons/AIBySimplicite/AIData.java index 3fc1dae..16389c4 100644 --- a/src/com/simplicite/commons/AIBySimplicite/AIData.java +++ b/src/com/simplicite/commons/AIBySimplicite/AIData.java @@ -2,7 +2,6 @@ import java.util.*; -import org.apache.xmlbeans.impl.xb.xsdschema.Public; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; @@ -261,9 +260,8 @@ private static JSONObject getJsonModel(String[] ids, Grant g){ */ private static JSONObject callIADataOnModule(String[] ids, Grant g) throws PlatformException{ JSONObject data = getJsonModel(ids, g); - JSONObject json = new JSONObject(); - String response = AITools.AICaller(g, /* "module uml: "+json */"", " generates consistent data in json according to the model: ```json "+data.toString(1)+"``` with at least 2 entries per class",false,true).getJSONArray("choices").getJSONObject(0).getJSONObject("message").getString("content"); - json = AITools.getValidJson(response); + String response = AITools.aiCaller(g, /* "module uml: "+json */"", " generates consistent data in json according to the model: ```json "+data.toString(1)+"``` with at least 2 entries per class",false,true).getJSONArray("choices").getJSONObject(0).getJSONObject("message").getString("content"); + JSONObject json = AITools.getValidJson(response); if(Tool.isEmpty(json)){ List listResult = AITools.getJSONBlock(response,g); diff --git a/src/com/simplicite/commons/AIBySimplicite/AIField.java b/src/com/simplicite/commons/AIBySimplicite/AIField.java index 784e341..deab256 100644 --- a/src/com/simplicite/commons/AIBySimplicite/AIField.java +++ b/src/com/simplicite/commons/AIBySimplicite/AIField.java @@ -17,7 +17,7 @@ public class AIField implements java.io.Serializable { private static final long serialVersionUID = 1L; private static final String AI_ERROR_RETURN = "AI_ERROR_RETURN"; private static final String JSON_ERROR_KEY = "error"; - private static String AIApiParamTrigger = Grant.getSystemAdmin().getJSONObjectParameter("AI_API_PARAM").getString("trigger"); + private static String aiApiParamTrigger = Grant.getSystemAdmin().getJSONObjectParameter("AI_API_PARAM").getString("trigger"); public static List validateAIField(ObjectField fld,Grant g){ return validateAIField(fld,null,g); } @@ -119,7 +119,7 @@ public static List validateNotepadAIField(ObjectField fld,ObjectDB obj,b private static List validateNotepadAIFieldInternal(ObjectField fld, ObjectDB obj, Grant g, String spe) { List msgs = new ArrayList<>(); Pattern p = Pattern.compile("\\[.{4}\\-.{2}\\-.{2} .{2}\\:.{2} - (.+)\\]"); - JSONArray historic = AITools.formatMessageHistoricFromNotePad(fld.getOldValue(),AIApiParamTrigger); + JSONArray historic = AITools.formatMessageHistoricFromNotePad(fld.getOldValue(),aiApiParamTrigger); String prompt =""; boolean begin = true; StringBuilder promptBuilder = new StringBuilder(); @@ -136,7 +136,7 @@ private static List validateNotepadAIFieldInternal(ObjectField fld, Obje } } prompt = promptBuilder.toString(); - p = Pattern.compile("(?i)^" + AIApiParamTrigger + "((?:.|\\s)+)"); + p = Pattern.compile("(?i)^" + aiApiParamTrigger + "((?:.|\\s)+)"); Matcher m = p.matcher(prompt); if(m.matches()){ @@ -147,7 +147,7 @@ private static List validateNotepadAIFieldInternal(ObjectField fld, Obje msgs.add(Message.formatError(AI_ERROR_RETURN,e.toString(),fld.getName())); return msgs; } - JSONObject result= AITools.AICaller(g, spe, historic, sentence ); + JSONObject result= AITools.aiCaller(g, spe, historic, sentence ); if(result.has(JSON_ERROR_KEY)){ msgs.add(Message.formatError(AI_ERROR_RETURN,result.getString("code")+": "+result.getString(JSON_ERROR_KEY),"demoPrdDescription")); return msgs; @@ -179,7 +179,7 @@ public static List validateLongStringAIField(ObjectField fld,ObjectDB ob ObjectDB fldObj = Grant.getSystemAdmin().getTmpObject("Field"); synchronized(fldObj){ fldObj.select(fld.getId()); - if(!(String.valueOf(ObjectField.TYPE_LONG_STRING).equals(fldObj.getFieldValue("fld_type")) && "AI".equals(fldObj.getFieldValue("fld_rendering")))){ + if(!isAILongStrField(fldObj)){ msgs.add(Message.formatError("AI_NO_LONGSTRING_AI",null,null)); return msgs; } @@ -189,7 +189,7 @@ public static List validateLongStringAIField(ObjectField fld,ObjectDB ob String length = String.valueOf(fld.getSize()); String lengthDeclarasion = "FRA".equals(g.getLang())?("en maximum"+length+" caracteres"):("in maximum"+length+" characters"); String prompt = fld.getValue() + " "+lengthDeclarasion; - Pattern p = Pattern.compile("(?i)^"+AIApiParamTrigger+"((?:.|\\s)+)"); + Pattern p = Pattern.compile("(?i)^"+aiApiParamTrigger+"((?:.|\\s)+)"); Matcher m = p.matcher(prompt); if(m.matches()){ @@ -200,7 +200,7 @@ public static List validateLongStringAIField(ObjectField fld,ObjectDB ob msgs.add(Message.formatError(AI_ERROR_RETURN,e.toString(),fld.getName())); return msgs; } - JSONObject result= AITools.AICaller(g, spe, null, sentence); + JSONObject result= AITools.aiCaller(g, spe, null, sentence); if(result.has(JSON_ERROR_KEY)){ msgs.add(Message.formatError(AI_ERROR_RETURN,result.getString("code")+": "+result.getString(JSON_ERROR_KEY),"demoPrdDescription")); return msgs; @@ -211,5 +211,9 @@ public static List validateLongStringAIField(ObjectField fld,ObjectDB ob } return msgs; } + private static boolean isAILongStrField(ObjectDB fieldObject){ + return String.valueOf(ObjectField.TYPE_LONG_STRING).equals(fieldObject.getFieldValue("fld_type")) && "AI".equals(fieldObject.getFieldValue("fld_rendering")); + + } } \ No newline at end of file diff --git a/src/com/simplicite/commons/AIBySimplicite/AIModel.java b/src/com/simplicite/commons/AIBySimplicite/AIModel.java index c6c66e9..27ca8dc 100644 --- a/src/com/simplicite/commons/AIBySimplicite/AIModel.java +++ b/src/com/simplicite/commons/AIBySimplicite/AIModel.java @@ -49,6 +49,7 @@ public class AIModel implements java.io.Serializable { private static final String JSON_VALUES_UPPER_KEY = "Values"; private static final String NOT_WORD_CHAR_REGEX = "[^\\w]"; private static final Random rand = new Random(); + private static final String SHORT_TEXT ="Short text"; private static class LinkObject { private String objId; private String en; @@ -67,12 +68,14 @@ private static class ModuleInfo { private String mPrefix; private String[] groupIds; private String domainID; + private Grant g; public ModuleInfo(String moduleId, String mPrefix, String[] groupIds, String domainID) { this.moduleId = moduleId; this.mPrefix = mPrefix; this.groupIds = groupIds; this.domainID = domainID; + this.g = Grant.getSystemAdmin(); } @@ -105,7 +108,7 @@ public DataMapObject() { static { typeTrad = new HashMap<>(); typeTrad.put("Short text < 4000", ObjectField.TYPE_STRING); - typeTrad.put("Short text", ObjectField.TYPE_STRING); + typeTrad.put(SHORT_TEXT, ObjectField.TYPE_STRING); typeTrad.put("Long text", ObjectField.TYPE_LONG_STRING); typeTrad.put("Integer", ObjectField.TYPE_INT); typeTrad.put("Decimal", ObjectField.TYPE_FLOAT); @@ -333,55 +336,71 @@ public static List genModule(String moduleId,String[] groupIds, String d String objPrefix=getOboPrefix(jsonObj, objName); //createObject String oboId = createObject(jsonObj, objName, objPrefix, domainOrder,mInfo, dataMaps, g); - objPrefix = SyntaxTool.getObjectPrefix(oboId); domainOrder+=100; //createFields if(jsonObj.has("attributes")){ - for(Object field:jsonObj.getJSONArray("attributes")){ - - JSONObject jsonFld = (JSONObject) field; - String fldType =jsonFld.optString("type","Short text"); - if(linkType.contains(fldType)){ - String class2 = jsonFld.getString("name"); - if(jsonFld.has("class")){ - class2 = jsonFld.getString("class"); - }else if(jsonFld.has(JSON_LINK_CLASS_TO_KEY)){ - class2 = jsonFld.getString(JSON_LINK_CLASS_TO_KEY); - } - json.getJSONArray(JSON_LINK_KEY).put(new JSONObject().put(JSON_LINK_CLASS_FROM_KEY, objName).put(JSON_LINK_CLASS_TO_KEY,class2).put("type",fldType)); - }else{ - String fldId=addField(jsonFld, oboId, objPrefix, fieldOrder,mInfo, dataMaps, g); - if(jsonFld.has("key") && jsonFld.getBoolean("key")){ - fKs.add(fldId); - } - fieldOrder+=10; - } - } + fKs.addAll(parsefield(jsonObj, json, oboId, fieldOrder, mInfo, dataMaps, g)); } //check if AI mis placed link - if(jsonObj.has(JSON_LINK_KEY)){ - JSONArray links = jsonObj.getJSONArray(JSON_LINK_KEY); - for (Object link : links){ - if(link instanceof JSONObject){ - JSONObject rel = (JSONObject) link; - if(!rel.has(JSON_LINK_CLASS_FROM_KEY)){ - rel.put(JSON_LINK_CLASS_FROM_KEY, objName); - if(rel.has("name")){ - - String class2 = rel.getString("name"); - rel.remove("name"); - rel.put(JSON_LINK_CLASS_TO_KEY, class2); - } + json.getJSONArray(JSON_LINK_KEY).putAll(checkMisplacedLink(jsonObj,objName)); + + } + + createLinks(json.getJSONArray(JSON_LINK_KEY),mInfo, dataMaps, g); + return new ArrayList<>(dataMaps.objCreate.values()); + } + private static List parsefield(JSONObject jsonObj,JSONObject json, String oboId, int fieldOrder,ModuleInfo mInfo, DataMapObject dataMaps,Grant g) throws GetException, ValidateException, SaveException{ + String objName = formatObjectNames(jsonObj.getString("name")); + String objPrefix = SyntaxTool.getObjectPrefix(oboId); + List fKs = new ArrayList<>(); + for(Object field:jsonObj.getJSONArray("attributes")){ + + JSONObject jsonFld = (JSONObject) field; + String fldType =jsonFld.optString("type",SHORT_TEXT); + if(linkType.contains(fldType)){ + String class2 = getClassFromJson(jsonFld); + json.getJSONArray(JSON_LINK_KEY).put(new JSONObject().put(JSON_LINK_CLASS_FROM_KEY, objName).put(JSON_LINK_CLASS_TO_KEY,class2).put("type",fldType)); + }else{ + String fldId=addField(jsonFld, oboId, objPrefix, fieldOrder,mInfo, dataMaps, g); + if(jsonFld.optBoolean("key")){ + fKs.add(fldId); + } + fieldOrder+=10; + } + } + return fKs; + } + + private static String getClassFromJson(JSONObject jsonFld){ + String class2 = jsonFld.getString("name"); + if(jsonFld.has("class")){ + class2 = jsonFld.getString("class"); + }else if(jsonFld.has(JSON_LINK_CLASS_TO_KEY)){ + class2 = jsonFld.getString(JSON_LINK_CLASS_TO_KEY); + } + return class2; + } + private static JSONArray checkMisplacedLink(JSONObject jsonObj,String objName){ + if(jsonObj.has(JSON_LINK_KEY)){ + JSONArray links = jsonObj.getJSONArray(JSON_LINK_KEY); + for (Object link : links){ + if(link instanceof JSONObject){ + JSONObject rel = (JSONObject) link; + if(!rel.has(JSON_LINK_CLASS_FROM_KEY)){ + rel.put(JSON_LINK_CLASS_FROM_KEY, objName); + if(rel.has("name")){ + + String class2 = rel.getString("name"); + rel.remove("name"); + rel.put(JSON_LINK_CLASS_TO_KEY, class2); } } } - json.getJSONArray(JSON_LINK_KEY).putAll(links); } + return links; } - - createLinks(json.getJSONArray(JSON_LINK_KEY),mInfo, dataMaps, g); - return new ArrayList<>(dataMaps.objCreate.values()); + return new JSONArray(); } private static String getOboPrefix(JSONObject jsonObj, String objName){ String objPrefix = ""; @@ -482,7 +501,7 @@ private static String getRandomIcon() { } private static String addField(JSONObject jsonFld,String oboId, String objPrefix, int fieldOrder,ModuleInfo mInfo, DataMapObject dataMaps,Grant g) throws GetException , ValidateException, SaveException{ String fieldName = jsonFld.getString("name").replaceAll(NOT_WORD_CHAR_REGEX,"").replaceAll("\\s",""); - String fldType =jsonFld.optString("type","Short text"); + String fldType =jsonFld.optString("type",SHORT_TEXT); int type = ObjectField.TYPE_STRING; if(typeTrad.containsKey(fldType)){ type = typeTrad.get(fldType); @@ -504,17 +523,19 @@ private static String addField(JSONObject jsonFld,String oboId, String objPrefix if(type == ObjectField.TYPE_ENUM || type == ObjectField.TYPE_ENUM_MULTI){ String enumId = createListOfValue(objPrefix, fieldName, mInfo, g); field.put("fld_list_id",enumId); - if(jsonFld.has(JSON_VALUES_LOWER_KEY) && jsonFld.get(JSON_VALUES_LOWER_KEY) instanceof JSONArray|| jsonFld.has(JSON_VALUES_UPPER_KEY) && jsonFld.get(JSON_VALUES_UPPER_KEY) instanceof JSONArray){ - completeList(mInfo.moduleId, enumId, jsonFld.has(JSON_VALUES_LOWER_KEY)?jsonFld.getJSONArray(JSON_VALUES_LOWER_KEY):jsonFld.getJSONArray(JSON_VALUES_UPPER_KEY), g); - }else if(jsonFld.has(JSON_ENUM_KEY) && (jsonFld.getJSONObject(JSON_ENUM_KEY).has(JSON_VALUES_LOWER_KEY) || jsonFld.getJSONObject(JSON_ENUM_KEY).has(JSON_VALUES_UPPER_KEY) ) ){ - completeList(mInfo.moduleId, enumId, jsonFld.getJSONObject(JSON_ENUM_KEY).has(JSON_VALUES_LOWER_KEY) ?jsonFld.getJSONObject(JSON_ENUM_KEY).getJSONArray(JSON_VALUES_LOWER_KEY):jsonFld.getJSONObject(JSON_ENUM_KEY).getJSONArray(JSON_VALUES_UPPER_KEY), g); - }else if(jsonFld.has(JSON_ENUM_KEY.toLowerCase()) && (jsonFld.getJSONObject(JSON_ENUM_KEY.toLowerCase()).has(JSON_VALUES_LOWER_KEY) || jsonFld.getJSONObject(JSON_ENUM_KEY.toLowerCase()).has(JSON_VALUES_UPPER_KEY) ) ){ - completeList(mInfo.moduleId, enumId, jsonFld.getJSONObject(JSON_ENUM_KEY.toLowerCase()).has(JSON_VALUES_LOWER_KEY) ?jsonFld.getJSONObject(JSON_ENUM_KEY.toLowerCase()).getJSONArray(JSON_VALUES_LOWER_KEY):jsonFld.getJSONObject(JSON_ENUM_KEY.toLowerCase()).getJSONArray(JSON_VALUES_UPPER_KEY), g); - } + completeList(enumId, jsonFld, mInfo, g); } String fldId = createOrUpdateWithJson(OBJECTFIELD,field, g); dataMaps.fieldCreate.put(fieldName, fldId); + translateField(jsonFld, fldId, dataMaps, g); + String oboFldId = createObjectField(oboId, fieldName, fieldOrder, mInfo, dataMaps, g); + if(type == ObjectField.TYPE_ENUM && ("status".equalsIgnoreCase(fieldName) || jsonFld.has("isStatus") && jsonFld.getBoolean("isStatus"))){ + addStateModel(oboId, oboFldId,mInfo, g); + } + return fldId; + } + private static void translateField(JSONObject jsonFld, String fldId, DataMapObject dataMaps,Grant g) throws UpdateException, GetException, ValidateException{ String en =""; String fr=""; if(jsonFld.has("en") && jsonFld.get("en") instanceof JSONObject){ @@ -537,12 +558,6 @@ private static String addField(JSONObject jsonFld,String oboId, String objPrefix updateTradField(Grant.getTranslateFieldId(fldId, Globals.LANG_FRENCH), fr, g); dataMaps.fldEn.put(fldId, en); dataMaps.fldFr.put(fldId, fr); - - String oboFldId = createObjectField(oboId, fieldName, fieldOrder, mInfo, dataMaps, g); - if(type == ObjectField.TYPE_ENUM && ("status".equalsIgnoreCase(fieldName) || jsonFld.has("isStatus") && jsonFld.getBoolean("isStatus"))){ - addStateModel(oboId, oboFldId,mInfo, g); - } - return fldId; } private static void addStateModel(String oboId, String oboFldId,ModuleInfo mInfo, Grant g){ String pcs = "CreateStateModel"; @@ -642,7 +657,7 @@ private static Message activityTranslation(Processus p,ActivityFile act,Grant g) } return p.validate(act, null); } - private static String createObjectField(String oboId,String fieldName,int fieldOrder,ModuleInfo mInfo, DataMapObject dataMaps,Grant g) throws GetException, ValidateException, SaveException{ + private static String createObjectField(String oboId,String fieldName,int fieldOrder,ModuleInfo mInfo, DataMapObject dataMaps,Grant g){ JSONObject oboField = new JSONObject(); oboField.put(OBJECTFIELD_OBJECT_FIELD, oboId); oboField.put(OBJECTFIELD_FIELD_FIELD, dataMaps.fieldCreate.get(fieldName)); @@ -650,13 +665,13 @@ private static String createObjectField(String oboId,String fieldName,int fieldO oboField.put(MODULE_ID_FIELD,mInfo.moduleId); return createOrUpdateWithJson(OBJECT_FIELD_SYSTEM_NAME,oboField, g); } - private static String createListOfValue(String objPrefix,String fieldName,ModuleInfo mInfo,Grant g) throws GetException, ValidateException, SaveException{ + private static String createListOfValue(String objPrefix,String fieldName,ModuleInfo mInfo,Grant g){ JSONObject enumObject = new JSONObject(); enumObject.put("lov_name",SyntaxTool.join(SyntaxTool.UPPER, new String[]{mInfo.mPrefix,objPrefix,fieldName})); enumObject.put(MODULE_ID_FIELD,mInfo.moduleId); return createOrUpdateWithJson("FieldList",enumObject, g); } - private static void createLinks(JSONArray links, ModuleInfo mInfo, DataMapObject dataMaps, Grant g) throws GetException, CreateException, ValidateException, UpdateException { + private static void createLinks(JSONArray links, ModuleInfo mInfo, DataMapObject dataMaps, Grant g) throws GetException, ValidateException, UpdateException { int linkorder = 10; for (Object link : links) { JSONObject jsonLink = (JSONObject) link; @@ -682,14 +697,14 @@ private static void createLinks(JSONArray links, ModuleInfo mInfo, DataMapObject case "m2o": case "manytoone": case "many-to-one": - createLink(class1Name, class2Name, linkorder, mInfo, dataMaps, g ,true); + createLink(class1Name, class2Name, linkorder, mInfo, dataMaps,true); linkorder += 10; break; case "o2m": case "onetomany": case "one-to-many": default: - createLink(class1Name, class2Name, linkorder, mInfo, dataMaps, g,false); + createLink(class1Name, class2Name, linkorder, mInfo, dataMaps,false); linkorder += 10; break; } @@ -697,7 +712,7 @@ private static void createLinks(JSONArray links, ModuleInfo mInfo, DataMapObject } } - private static void createManyToManyLink(String class1Name, String class2Name, int linkorder, ModuleInfo mInfo, DataMapObject dataMaps, Grant g) throws GetException, CreateException, ValidateException, UpdateException{ + private static void createManyToManyLink(String class1Name, String class2Name, int linkorder, ModuleInfo mInfo, DataMapObject dataMaps, Grant g) throws GetException, ValidateException, UpdateException{ String oboId = dataMaps.objCreate.get(class1Name.toLowerCase()); String oboId2 = dataMaps.objCreate.get(class2Name.toLowerCase()); if (!dataMaps.linkDone.contains(class1Name + class2Name + "m2m") && !dataMaps.linkDone.contains(class2Name + class1Name + "m2m")) { @@ -706,7 +721,7 @@ private static void createManyToManyLink(String class1Name, String class2Name, i } } - private static void createLink(String class1Name, String class2Name, int linkorder, ModuleInfo mInfo, DataMapObject dataMaps, Grant g, boolean isManyToOne) throws GetException, CreateException, ValidateException, UpdateException { + private static void createLink(String class1Name, String class2Name, int linkorder, ModuleInfo mInfo, DataMapObject dataMaps, boolean isManyToOne) throws GetException, ValidateException, UpdateException { String oboId1 = dataMaps.objCreate.get(class1Name.toLowerCase()); String oboId2 = dataMaps.objCreate.get(class2Name.toLowerCase()); String linkType = isManyToOne ? "m2o" : "o2m"; @@ -714,10 +729,10 @@ private static void createLink(String class1Name, String class2Name, int linkord if (!dataMaps.linkDone.contains(linkKey)) { if (isManyToOne) { LinkObject linkObject = new LinkObject(oboId2, dataMaps.objEn.get(oboId2), dataMaps.objFr.get(oboId2), linkorder); - manyToOneLink(oboId1, linkObject, mInfo, dataMaps, ObjectCore.DEL_RESTRICT, false, false, g); + manyToOneLink(oboId1, linkObject, mInfo, dataMaps, ObjectCore.DEL_RESTRICT, false, false); } else { LinkObject linkObject = new LinkObject(oboId1, dataMaps.objEn.get(oboId1), dataMaps.objFr.get(oboId1), linkorder); - manyToOneLink(oboId2, linkObject, mInfo, dataMaps, ObjectCore.DEL_RESTRICT, false, false, g); + manyToOneLink(oboId2, linkObject, mInfo, dataMaps, ObjectCore.DEL_RESTRICT, false, false); } dataMaps.linkDone.add(linkKey); } @@ -738,7 +753,7 @@ private static String getClassFromJsonLink(JSONObject jsonLink, String key) { } return formatObjectNames(className); } - private static void createLinkObject(String name,ModuleInfo mInfo, DataMapObject dataMaps,Grant g) throws GetException, CreateException, ValidateException{ + private static void createLinkObject(String name,ModuleInfo mInfo, DataMapObject dataMaps,Grant g){ JSONObject linkFields = new JSONObject(); String namewp = getNameWithoutPrefix(name,mInfo.mPrefix,""); linkFields.put(OBJECT_NAME_FIELD, SyntaxTool.join(SyntaxTool.PASCAL, new String[]{mInfo.mPrefix,namewp})); @@ -783,7 +798,7 @@ private static void createOrUpdateTranslation(String obj,String objId,String lan } } - private static void manyToManyLink(LinkObject objectData1,LinkObject objectData2, ModuleInfo mInfo,DataMapObject dataMaps,Grant g) throws GetException, CreateException, ValidateException, UpdateException{ + private static void manyToManyLink(LinkObject objectData1,LinkObject objectData2, ModuleInfo mInfo,DataMapObject dataMaps,Grant g) throws GetException, ValidateException, UpdateException{ String childId=""; String prefix1=SyntaxTool.getObjectPrefix(objectData1.objId); String prefix2=SyntaxTool.getObjectPrefix(objectData2.objId); @@ -803,11 +818,12 @@ private static void manyToManyLink(LinkObject objectData1,LinkObject objectData2 grantGroup(gId,childId,mInfo.moduleId,g); } - manyToOneLink(childId, objectData1, mInfo, dataMaps,ObjectCore.DEL_CASCAD,true,objectData1.objId.equals(objectData2.objId), g); - manyToOneLink(childId, objectData2, mInfo, dataMaps,ObjectCore.DEL_CASCAD,true,objectData1.objId.equals(objectData2.objId), g); + manyToOneLink(childId, objectData1, mInfo, dataMaps,ObjectCore.DEL_CASCAD,true,objectData1.objId.equals(objectData2.objId)); + manyToOneLink(childId, objectData2, mInfo, dataMaps,ObjectCore.DEL_CASCAD,true,objectData1.objId.equals(objectData2.objId)); } private static HashMap linkIds = new HashMap<>(); - private static void manyToOneLink(String childId,LinkObject objectData, ModuleInfo mInfo, DataMapObject dataMaps,char del,Boolean key,boolean recursive,Grant g) throws GetException, CreateException, ValidateException, UpdateException{ + private static void manyToOneLink(String childId,LinkObject objectData, ModuleInfo mInfo, DataMapObject dataMaps,char del,Boolean key,boolean recursive) throws GetException, ValidateException, UpdateException{ + Grant g = mInfo.g; String triObj = SyntaxTool.getObjectPrefix(objectData.objId); String triChild = SyntaxTool.getObjectPrefix(childId); String fkFieldName=SyntaxTool.join(SyntaxTool.CAMEL, new String[]{mInfo.mPrefix,triChild,triObj,"id"}); @@ -877,6 +893,21 @@ private static List getFonctionalKeys(String objId,Grant g) { } return fks; } + private static void completeList(String enumId,JSONObject jsonFld,ModuleInfo mInfo,Grant g) throws GetException, ValidateException, UpdateException{ + if(hasJsonArray(jsonFld,JSON_VALUES_UPPER_KEY,JSON_VALUES_LOWER_KEY)){ + completeList(mInfo.moduleId, enumId, jsonFld.has(JSON_VALUES_LOWER_KEY)?jsonFld.getJSONArray(JSON_VALUES_LOWER_KEY):jsonFld.getJSONArray(JSON_VALUES_UPPER_KEY), g); + }else if(hasNotCaseSensitibve(jsonFld.optJSONObject(JSON_ENUM_KEY), JSON_VALUES_UPPER_KEY, JSON_VALUES_LOWER_KEY)){ + completeList(mInfo.moduleId, enumId, jsonFld.getJSONObject(JSON_ENUM_KEY).has(JSON_VALUES_LOWER_KEY) ?jsonFld.getJSONObject(JSON_ENUM_KEY).getJSONArray(JSON_VALUES_LOWER_KEY):jsonFld.getJSONObject(JSON_ENUM_KEY).getJSONArray(JSON_VALUES_UPPER_KEY), g); + }else if(hasNotCaseSensitibve(jsonFld.optJSONObject(JSON_ENUM_KEY.toLowerCase()), JSON_VALUES_UPPER_KEY, JSON_VALUES_LOWER_KEY) ){ + completeList(mInfo.moduleId, enumId, jsonFld.getJSONObject(JSON_ENUM_KEY.toLowerCase()).has(JSON_VALUES_LOWER_KEY) ?jsonFld.getJSONObject(JSON_ENUM_KEY.toLowerCase()).getJSONArray(JSON_VALUES_LOWER_KEY):jsonFld.getJSONObject(JSON_ENUM_KEY.toLowerCase()).getJSONArray(JSON_VALUES_UPPER_KEY), g); + } + } + private static boolean hasJsonArray(JSONObject json, String upperkey, String lowerkey){ + return json.has(upperkey) && json.get(upperkey) instanceof JSONArray || json.has(lowerkey) && json.get(lowerkey) instanceof JSONArray; + } + private static boolean hasNotCaseSensitibve(JSONObject json, String upperKey, String lowerKey){ + return json.has(upperKey) || json.has(lowerKey); + } private static void completeList(String moduleId,String listId,JSONArray values,Grant g) throws GetException, ValidateException, UpdateException{ int order = 1; ObjectDB oTra = g.getTmpObject("FieldListValue"); @@ -915,7 +946,7 @@ private static JSONObject getJsonValue(Object value, Grant g){ return new JSONObject(); } } - private static void addToDomain(String domainID,String objectId,String moduleId,int domainOrder,Grant g) throws GetException, CreateException, ValidateException{ + private static void addToDomain(String domainID,String objectId,String moduleId,int domainOrder,Grant g){ JSONObject domain = new JSONObject(); domain.put("map_domain_id", domainID); domain.put("map_object", "ObjectInternal:"+objectId); diff --git a/src/com/simplicite/commons/AIBySimplicite/AITools.java b/src/com/simplicite/commons/AIBySimplicite/AITools.java index 1727e48..abafe9e 100644 --- a/src/com/simplicite/commons/AIBySimplicite/AITools.java +++ b/src/com/simplicite/commons/AIBySimplicite/AITools.java @@ -6,6 +6,7 @@ import com.simplicite.util.*; import com.simplicite.util.exceptions.*; + import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; @@ -21,16 +22,25 @@ import com.simplicite.util.tools.*; + /** * Shared code AITools */ public class AITools implements java.io.Serializable { private static final long serialVersionUID = 1L; - private static JSONObject AIApiParam = Grant.getSystemAdmin().getJSONObjectParameter("AI_API_PARAM"); + private static final JSONObject AI_API_PARAM = Grant.getSystemAdmin().getJSONObjectParameter("AI_API_PARAM"); private static final String CONTENT_KEY = "content"; private static final String MAX_TOKEN_PARAM_KEY = "default_max_token"; + private static final String ASSISTANT_ROLE="assistant"; + private static final String MAX_TOKEN = "max_tokens"; public static final String TYPE_TEXT = "text"; public static final String TYPE_IMAGE_URL = "image_url"; + private static final boolean SHOW_DATA_DISCLAIMER = AI_API_PARAM.optBoolean("showDataDisclaimer",true); + private static final String AI_PROVIDER = AI_API_PARAM.optString("provider"); + private static final String TRUSTED = "trusted"; + private static final String SWAGGER_COMPONENTS="components"; + private static final String SWAGGER_SHEMAS="schemas"; + /** * Function to format the call to chatAI API. * Need the AI_API_KEY parameter set up with your key. @@ -42,11 +52,11 @@ public class AITools implements java.io.Serializable { * @param maxToken number of tokens allow in response * @return If API return code is 200: API answer else: error return. */ - private static String AICaller(Grant g, String specialisation, Object prompt ,JSONArray historic, boolean secure, int maxToken){ - return AICaller(g, specialisation, prompt,historic,secure,false,maxToken); + private static String aiCaller(Grant g, String specialisation, Object prompt ,JSONArray historic, boolean secure, int maxToken){ + return aiCaller(g, specialisation, prompt,historic,secure,false,maxToken); } - private static String AICaller(Grant g, String specialisation, Object prompt ,JSONArray historic, boolean secure,boolean isSafeSpe, int maxToken){ + private static String aiCaller(Grant g, String specialisation, Object prompt ,JSONArray historic, boolean secure,boolean isSafeSpe, int maxToken){ JSONArray arrayPrompt = new JSONArray(); if(prompt instanceof String){ String strPrompt = normalize((String)prompt,secure); @@ -58,39 +68,24 @@ private static String AICaller(Grant g, String specialisation, Object prompt ,JS AppLog.info("Prompt must be a String or a JSONArray",g); return ""; } - return AICaller(g, specialisation,arrayPrompt,historic,secure,isSafeSpe,maxToken); + return aiCaller(g, specialisation,arrayPrompt,historic,secure,isSafeSpe,maxToken); } - private static String AICaller(Grant g, String specialisation, JSONArray prompt ,JSONArray historic, boolean secure,boolean isSafeSpe, int maxToken){ + private static String aiCaller(Grant g, String specialisation, JSONArray prompt ,JSONArray historic, boolean secure,boolean isSafeSpe, int maxToken){ specialisation = removeAcent(specialisation); if(!isSafeSpe) specialisation = JSONObject.quote(normalize(specialisation,true)); - for(Object p : prompt){ - if(p instanceof JSONObject){ - JSONObject contentJson = (JSONObject)p; - if(!contentJson.optBoolean("trusted",false) && contentJson.has(TYPE_TEXT)){ - contentJson.put(TYPE_TEXT,JSONObject.quote(normalize(contentJson.getString(TYPE_TEXT)))); - } - if(contentJson.has("trusted")){ - contentJson.remove("trusted"); - } - }else{ - p = JSONObject.quote(normalize((String)p)); - } - } - int histDepth = AIApiParam.getInt("hist_depth"); + prompt = parsedPrompts(prompt,secure); + int histDepth = AI_API_PARAM.getInt("hist_depth"); String apiKey = Grant.getSystemAdmin().getParameter("AI_API_KEY"); String apiUrl = Grant.getSystemAdmin().getParameter("AI_API_URL"); - String model =AIApiParam.optString("model",""); - String projet = AIApiParam.optString("OpenAI-Project",""); - String org = AIApiParam.optString("OpenAI-Organization",""); + String model =AI_API_PARAM.optString("model",""); + String projet = AI_API_PARAM.optString("OpenAI-Project",""); + String org = AI_API_PARAM.optString("OpenAI-Organization",""); if("/".equals(apiUrl)){ AppLog.info("AI_API_URL not set", g); return ""; } if("/".equals(apiKey))apiKey = ""; - - /* if(!Tool.isEmpty(specialisation)) - specialisation=normalize(specialisation); */ try { URI url = new URI(apiUrl); @@ -107,7 +102,7 @@ private static String AICaller(Grant g, String specialisation, JSONArray prompt // format data JSONObject postData = new JSONObject(); if(maxToken>0) - postData.put("max_tokens", maxToken); + postData.put(MAX_TOKEN, maxToken); if(!Tool.isEmpty(model)) postData.put("model", model); JSONArray messages = new JSONArray(); @@ -116,25 +111,24 @@ private static String AICaller(Grant g, String specialisation, JSONArray prompt messages.put(new JSONObject().put("role","system").put(CONTENT_KEY,specialisation)); // add historic (restrict to Param histDepth the number of messages ) if(!Tool.isEmpty(historic)){ - int len = historic.length(); - if( len< histDepth*2){ - messages.putAll(historic); - }else{ - for(int i = len - 2*histDepth; i < len;i++ ) - messages.put(historic.getJSONObject(i)); - } - - + messages.putAll(getCleanHistoric(historic,histDepth)); } messages.put(new JSONObject().put("role","user").put(CONTENT_KEY,prompt)); postData.put("messages", messages); + AppLog.info("AI API call :"+postData.toString(1),g); + if(AI_API_PARAM.optBoolean("huggingAPI", false)){ + postData = getHuggingFormatData(postData); + } + AppLog.info("AI API call :"+postData.toString(),g); try (DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream())) { outputStream.writeBytes(postData.toString()); outputStream.flush(); } int responseCode = connection.getResponseCode(); + AppLog.info("AI API response code :"+responseCode,g); + if(responseCode!=200){ return readError(connection,responseCode,g); @@ -150,7 +144,83 @@ private static String AICaller(Grant g, String specialisation, JSONArray prompt return ""; } + private static JSONObject getHuggingFormatData(JSONObject postData){ + JSONObject newPostData = new JSONObject(); + StringBuilder dialogBuilder = new StringBuilder(""); + JSONObject params = new JSONObject(); + if(postData.has(MAX_TOKEN)) + params.put("max_length",postData.getInt(MAX_TOKEN)); + JSONArray messages = postData.getJSONArray("messages"); + for(int i = 0; i < messages.length(); i++){ + JSONObject message = messages.getJSONObject(i); + String role = message.optString("role","user"); + String content = getContent(message.get(CONTENT_KEY)); + switch (role) { + case ASSISTANT_ROLE: + AppLog.info("AI API assistant :"+content,Grant.getSystemAdmin()); + dialogBuilder.append("bot: "+content+"\n"); + break; + case "system": + AppLog.info("AI API system :"+content,Grant.getSystemAdmin()); + if(Tool.isEmpty(content) || "\"\"".equals(content)) break; + dialogBuilder.append("context: "+ content+"\n"); + break; + default: + AppLog.info("AI API user :"+content,Grant.getSystemAdmin()); + dialogBuilder.append(content+"\n"); + break; + } + } + newPostData.put("inputs",dialogBuilder.toString()); + newPostData.put("parameters",params); + return newPostData; + } + private static String getContent(Object contentObj){ + StringBuilder contentBuilder = new StringBuilder(""); + if(contentObj instanceof JSONArray){ + JSONArray arrayContent = (JSONArray)contentObj; + for(int j = 0; j < arrayContent.length(); j++){ + JSONObject contentJson = arrayContent.getJSONObject(j); + if(contentJson.has(TYPE_TEXT)){ + contentBuilder.append(contentJson.getString(TYPE_TEXT)+"\n"); + } + } + return contentBuilder.toString(); + }else if(contentObj instanceof String){ + return (String)contentObj; + } + return ""; + } + private static JSONArray getCleanHistoric(JSONArray historic,int histDepth){ + int len = historic.length(); + if( len< histDepth*2){ + return historic; + }else{ + JSONArray newHistoric = new JSONArray(); + for(int i = len - 2*histDepth; i < len;i++ ) + newHistoric.put(historic.getJSONObject(i)); + return newHistoric; + } + } + private static JSONArray parsedPrompts(JSONArray prompts, boolean secure){ + JSONArray newPrompts = new JSONArray(); + for(Object p : prompts){ + if(p instanceof JSONObject){ + JSONObject contentJson = (JSONObject)p; + if(!contentJson.optBoolean(TRUSTED,false) && contentJson.has(TYPE_TEXT)){ + contentJson.put(TYPE_TEXT,JSONObject.quote(normalize(contentJson.getString(TYPE_TEXT),secure))); + } + if(contentJson.has(TRUSTED)){ + contentJson.remove(TRUSTED); + } + newPrompts.put(contentJson); + }else{ + newPrompts.put(JSONObject.quote(normalize((String)p))); + } + } + return newPrompts; + } /** * Reads the error response from an HTTP connection and returns a formatted error message. * @@ -167,10 +237,13 @@ public static String readError(HttpURLConnection connection,int responseCode,Gra while ((line = in.readLine()) != null) { response.append(line); } + AppLog.info("AI API error :["+responseCode+"]"+response.toString(),g); JSONObject error = new JSONObject(response.toString()); + String errorMessage = error.optJSONObject("error").optString("message","no message"); + AppLog.info("AI API error :["+responseCode+"]: "+errorMessage,g); connection.disconnect(); - AppLog.info("AI API error :["+responseCode+"]"+error.getJSONObject("error").getString("message"),g); - return "{\"code\":\""+responseCode+"\",\"error\":\""+error.getJSONObject("error").getString("message")+"\" }"; + + return "{\"code\":\""+responseCode+"\",\"error\":\""+errorMessage+"\" }"; } catch (IOException e) { AppLog.error(e,g); @@ -196,63 +269,79 @@ public static String readResponse(HttpURLConnection connection,Grant g){ } connection.disconnect(); String res = response.toString(); - AppLog.info("AI used token :"+new JSONObject(res).optJSONObject("usage").toString(1), g); - return res; + AppLog.info("AI API response :"+res,g); + JSONArray resArray = optJSONArray(res); + AppLog.info(resArray.toString(1), g); + if(Tool.isEmpty(resArray)){ + AppLog.info("AI used token :"+new JSONObject(res).optJSONObject("usage").toString(1), g); + + return res; + } + String resultText = resArray.optJSONObject(0).getString("generated_text"); + JSONObject resJson =new JSONObject().put("choices",new JSONArray().put(new JSONObject().put("message",new JSONObject().put(CONTENT_KEY,resultText)))); + return resJson.toString(); } catch (IOException e) { AppLog.error(e,g); } connection.disconnect(); return ""; } + private static JSONArray optJSONArray(String array){ + try{ + return new JSONArray(array); + }catch(Exception e){ + return new JSONArray(); + } + } /** - * call AICaller with default value + * call aiCaller with default value * @param g * @param specialisation * @param prompt * @return */ - public static JSONObject AICaller(Grant g, String specialisation, Object prompt){ - return AICaller(g, specialisation,prompt,null,true,false); + public static JSONObject aiCaller(Grant g, String specialisation, Object prompt){ + return aiCaller(g, specialisation,prompt,null,true,false); } - public static JSONObject AICaller(Grant g, String specialisation, Object prompt, boolean maxToken){ - return AICaller(g, specialisation,prompt,null,maxToken,false); + public static JSONObject aiCaller(Grant g, String specialisation, Object prompt, boolean maxToken){ + return aiCaller(g, specialisation,prompt,null,maxToken,false); } - public static JSONObject AICaller(Grant g, String specialisation, Object prompt, boolean maxToken,boolean secure){ - return AICaller(g, specialisation,prompt,maxToken,secure,false); + public static JSONObject aiCaller(Grant g, String specialisation, Object prompt, boolean maxToken,boolean secure){ + return aiCaller(g, specialisation,prompt,maxToken,secure,false); } - public static JSONObject AICaller(Grant g, String specialisation, Object prompt, boolean maxToken,boolean secure,boolean isSafeSpe){ - return AICaller(g, specialisation,prompt,null,maxToken,secure,isSafeSpe); + public static JSONObject aiCaller(Grant g, String specialisation, Object prompt, boolean maxToken,boolean secure,boolean isSafeSpe){ + return aiCaller(g, specialisation,prompt,null,maxToken,secure,isSafeSpe); } - public static JSONObject AICaller(Grant g, String specialisation, Object prompt, JSONArray historic,boolean maxToken){ - return AICaller(g, specialisation,prompt,historic,maxToken,false); + public static JSONObject aiCaller(Grant g, String specialisation, Object prompt, JSONArray historic,boolean maxToken){ + return aiCaller(g, specialisation,prompt,historic,maxToken,false); } - public static JSONObject AICaller(Grant g, String specialisation, Object prompt, JSONArray historic,boolean maxToken,boolean secure){ - return AICaller(g, specialisation,prompt,historic,maxToken,secure,false); + public static JSONObject aiCaller(Grant g, String specialisation, Object prompt, JSONArray historic,boolean maxToken,boolean secure){ + return aiCaller(g, specialisation,prompt,historic,maxToken,secure,false); } - public static JSONObject AICaller(Grant g, String specialisation, Object prompt, JSONArray historic,boolean maxToken,boolean secure,boolean isSafeSpe){ + public static JSONObject aiCaller(Grant g, String specialisation, Object prompt, JSONArray historic,boolean maxToken,boolean secure,boolean isSafeSpe){ int tokens = 1500; - if(!Tool.isEmpty(AIApiParam)) { - tokens = maxToken?AIApiParam.getInt(MAX_TOKEN_PARAM_KEY):0; + if(!Tool.isEmpty(AI_API_PARAM)) { + tokens = maxToken?AI_API_PARAM.getInt(MAX_TOKEN_PARAM_KEY):0; } - return new JSONObject(AICaller(g, specialisation,prompt,historic,secure,isSafeSpe,tokens)); + return new JSONObject(aiCaller(g, specialisation,prompt,historic,secure,isSafeSpe,tokens)); } - public static JSONObject AICaller(Grant g, String specialisation, JSONArray historic, Object prompt){ - return AICaller(g, specialisation,prompt,historic,true,false); + public static JSONObject aiCaller(Grant g, String specialisation, JSONArray historic, Object prompt){ + return aiCaller(g, specialisation,prompt,historic,true,false); } - private static String AICaller(Grant g, String specialisation, Object prompt ,JSONArray historic, int maxToken){ - return AICaller(g, specialisation,prompt,historic,false,maxToken); + private static String aiCaller(Grant g, String specialisation, Object prompt ,JSONArray historic, int maxToken){ + return aiCaller(g, specialisation,prompt,historic,false,maxToken); } /** - * call AICaller with specification for code usable in Simplicité. + * call aiCaller with specification for code usable in Simplicité. * @param g * @param prompt * @param historic * @return */ - public static JSONObject AICodeHelper(Grant g, String prompt,JSONArray historic){ - return new JSONObject(AICaller(g, "you are java expert, optimize your function, answer only function",prompt,historic,AIApiParam.getInt("code_max_token"))); + public static JSONObject aiCodeHelper(Grant g, String prompt,JSONArray historic){ + return new JSONObject(aiCaller(g, "you are java expert, optimize your function, answer only function",prompt,historic,AI_API_PARAM.getInt("code_max_token"))); } /** @@ -264,13 +353,13 @@ public static JSONObject AICodeHelper(Grant g, String prompt,JSONArray historic) public static JSONArray formatMessageHistoric(String prompt, String response){ JSONArray messages = new JSONArray(); messages.put(new JSONObject().put("role","user").put(CONTENT_KEY,normalize(prompt))); - messages.put(new JSONObject().put("role","assistant").put(CONTENT_KEY,normalize(response))); + messages.put(new JSONObject().put("role",ASSISTANT_ROLE).put(CONTENT_KEY,normalize(response))); return messages; } public static JSONObject formatMessageHistoric(JSONObject json){ - if(json.has("trusted")){ - json.remove("trusted"); + if(json.has(TRUSTED)){ + json.remove(TRUSTED); return json; } @@ -299,7 +388,6 @@ public static JSONObject formatMessageHistoric(JSONObject json){ */ public static JSONArray formatMessageHistoricFromNotePad(String data, String trigger){ Pattern p = Pattern.compile("\\[.{4}\\-.{2}\\-.{2} .{2}\\:.{2} - (.+)\\]"); - Pattern pTrigger=Pattern.compile("(?i)^"+trigger+"((?:.|\\s)+)"); JSONArray notePad = new JSONArray(); JSONObject text = new JSONObject(); String note=""; @@ -308,28 +396,14 @@ public static JSONArray formatMessageHistoricFromNotePad(String data, String tri if(m.matches()){ if (text.has("role")){//if note first line - if("\n\n".equals(note.length()>2 ? note.substring(note.length() - 2):note)) - note = note.length()>2 ? note.substring(0,note.length() - 2):""; - - //if user role and trigger ignore msg without trigger. - if("user".equals(text.getString("role")) && !Tool.isEmpty(trigger)){ - Matcher mTrigger = pTrigger.matcher(note); - if (mTrigger.matches()){ - text.put(CONTENT_KEY, normalize(mTrigger.group(1))); - notePad.put(text); - } - }else{ - text.put(CONTENT_KEY, normalize(note)); - notePad.put(text); - - } + parseText(note, trigger, text, notePad); text= new JSONObject(); } note=""; if("ChatAI".equals(m.group(1))){ - text.put("role","assistant");// see AI doc + text.put("role",ASSISTANT_ROLE);// see AI doc }else{ text.put("role","user");// see AI doc } @@ -343,41 +417,48 @@ public static JSONArray formatMessageHistoricFromNotePad(String data, String tri } if (text.has("role")){ - if("\n\n".equals(note.length()>2 ? note.substring(note.length() - 2):note)) - note = note.length()>2 ? note.substring(0,note.length() - 2):""; - if("user".equals(text.getString("role")) && !Tool.isEmpty(trigger)){ - Matcher mTrigger = pTrigger.matcher(note); - if (mTrigger.matches()){ - text.put(CONTENT_KEY, normalize(mTrigger.group(1))); - notePad.put(text); - } - }else{ - text.put(CONTENT_KEY, normalize(note)); - notePad.put(text); - } + parseText(note,trigger,text,notePad); } return invertJsonArray(notePad); } + private static void parseText(String note,String trigger,JSONObject text,JSONArray notePad){ + Pattern pTrigger=Pattern.compile("(?i)^"+trigger+"((?:.|\\s)+)"); + if("\n\n".equals(note.length()>2 ? note.substring(note.length() - 2):note)) + note = note.length()>2 ? note.substring(0,note.length() - 2):""; + + //if user role and trigger ignore msg without trigger. + if("user".equals(text.getString("role")) && !Tool.isEmpty(trigger)){ + Matcher mTrigger = pTrigger.matcher(note); + if (mTrigger.matches()){ + text.put(CONTENT_KEY, normalize(mTrigger.group(1))); + notePad.put(text); + } + }else{ + text.put(CONTENT_KEY, normalize(note)); + notePad.put(text); + } + } private static String normalize(String text){ text = removeAcent(text); return Normalizer.normalize(text, Normalizer.Form.NFD).replaceAll("[\u0300-\u036F]", "").replaceAll("[^a-zA-Z0-9@.-]", " "); } public static String normalize(String text, boolean secure){ text = removeAcent(text); - return secure?Normalizer.normalize(text, Normalizer.Form.NFD).replaceAll("[\u0300-\u036F]", "").replaceAll("[^\\w:\\(\\),`{}.\\[\\]\"@\\/:-]", " "):normalize(text); + return secure?Normalizer.normalize(text, Normalizer.Form.NFD).replaceAll("[\u0300-\u036F]", "").replaceAll("[^\\w\\(\\),`{}.\\[\\]\"@\\/:-]", " "):normalize(text); } public static String removeAcent(String text){ - return text.replaceAll("(?i)[éèêë]", "e") - .replaceAll("(?i)[àâä]","a" ) - .replaceAll("(?i)[îï]", "i") - .replaceAll("(?i)[ôö]", "o") - .replaceAll("(?i)[ùûü]", "u") - .replaceAll("(?i)ÿ", "y") - .replaceAll("(?i)ç", "c") - .replaceAll("(?i)æ","ae") - .replaceAll("(?i)œ","oe"); + text = text.replaceAll("(?u)[éèêë]", "e") + .replaceAll("(?u)[àâä]","a" ) + .replaceAll("(?u)[îï]", "i") + .replaceAll("(?u)[ôö]", "o") + .replaceAll("(?u)[ùûü]", "u") + .replaceAll("(?u)æ","ae") + .replaceAll("(?u)œ","oe"); + text = Pattern.compile("(?u)ç",Pattern.CANON_EQ).matcher(text).replaceAll("c"); + text = Pattern.compile("(?u)ÿ",Pattern.CANON_EQ).matcher(text).replaceAll("y"); + return text; } @@ -394,14 +475,14 @@ private static JSONArray invertJsonArray(JSONArray arr){ } return result; } - public static JSONObject actionAICaller(Grant g, String specialisation, String prompt){ + public static JSONObject actionAiCaller(Grant g, String specialisation, String prompt){ - return AICaller(g, specialisation,prompt); + return aiCaller(g, specialisation,prompt); } - public static JSONObject actionAICaller(Grant g, String specialisation, String prompt,ObjectDB obj){ + public static JSONObject actionAiCaller(Grant g, String specialisation, String prompt,ObjectDB obj){ try { String parsedPrompt = parseExpresion(prompt,obj); - return AICaller(g, specialisation,parsedPrompt); + return aiCaller(g, specialisation,parsedPrompt); } catch (ScriptException e) { AppLog.error(e, g); return new JSONObject(); @@ -409,10 +490,10 @@ public static JSONObject actionAICaller(Grant g, String specialisation, String p } //Call AI whith parsed expretion - public static JSONObject expresionAICaller(Grant g, String specialisation, String prompt,ObjectDB obj){ + public static JSONObject expresionAiCaller(Grant g, String specialisation, String prompt,ObjectDB obj){ try { String parsedPrompt = parseExpresion(prompt,obj); - String res = AICaller(g, specialisation,parsedPrompt,null,3500); + String res = aiCaller(g, specialisation,parsedPrompt,null,3500); return new JSONObject(res); } catch (ScriptException e) { AppLog.error(e, g); @@ -444,7 +525,7 @@ public static String parseExpresion(String prompt,ObjectDB obj) throws ScriptExc public static List getJSONBlock(String txt, Grant g){ List list = new ArrayList<>(); - String regex= "([^\0{]*?)(?:```)?(?:json)?\s*(\\{[^`]+\\})(?:```)?([^\0}]*)"; + String regex = "^([^{}]*)(?:```)?(?:json)?\\s*(\\{[^`]+\\})(?:```)?([^}]*)$";//To check if(!txt.matches("[\\s\\S]*\\{[\\s\\S]*\\}[\\s\\S]*")){ return list; } @@ -557,12 +638,12 @@ public static JSONObject getSimplifyedSwagger(String moduleName,Grant g) throws ModuleDB module = new ModuleDB(obj); JSONObject swagger = new JSONObject(module.openAPI(JSONTool.OPENAPI_OAS3,true)); JSONObject newSchemas = new JSONObject(); - JSONObject schemas = swagger.getJSONObject("components").getJSONObject("schemas"); + JSONObject schemas = swagger.getJSONObject(SWAGGER_COMPONENTS).getJSONObject(SWAGGER_SHEMAS); for(String id : ids){ String name = ObjectCore.getObjectName(id); newSchemas.put(name, checkFields(schemas.getJSONObject(name), name,g)); } - return new JSONObject().put("components",new JSONObject().put("schemas",newSchemas)); + return new JSONObject().put(SWAGGER_COMPONENTS,new JSONObject().put(SWAGGER_SHEMAS,newSchemas)); } public static JSONObject checkFields(JSONObject obj, String name, Grant g) { @@ -571,7 +652,7 @@ public static JSONObject checkFields(JSONObject obj, String name, Grant g) { for (String key : properties.keySet()) { JSONObject val = properties.getJSONObject(key); ObjectField fld; - fld = objDB.getField(key.replaceAll("__", ".")); + fld = objDB.getField(key.replace("__", ".")); if (val.has("enum")) { JSONArray enumCodes = new JSONArray(); for (EnumItem eItem : fld.getList().getAllItems()) { @@ -590,13 +671,13 @@ public static JSONObject getSwagger(String moduleName,Grant g) throws PlatformEx ModuleDB module = new ModuleDB(obj); JSONObject swagger = new JSONObject(module.openAPI(JSONTool.OPENAPI_OAS3,true)); JSONObject newSchemas = new JSONObject(); - JSONObject schemas = swagger.getJSONObject("components").getJSONObject("schemas"); + JSONObject schemas = swagger.getJSONObject(SWAGGER_COMPONENTS).getJSONObject(SWAGGER_SHEMAS); for(String id : ids){ String name = ObjectCore.getObjectName(id); newSchemas.put(name, new JSONObject(schemas.getJSONObject(name).toString())); } - swagger.getJSONObject("components").put("schemas", newSchemas); + swagger.getJSONObject(SWAGGER_COMPONENTS).put(SWAGGER_SHEMAS, newSchemas); JSONObject paths = swagger.getJSONObject("paths"); JSONObject newPaths = new JSONObject(); for(String key : paths.keySet()){ @@ -619,7 +700,7 @@ public static JSONObject getformatedContentByType(String content,String type,boo case TYPE_TEXT: res.put("type",TYPE_TEXT); res.put(type,content); - if(trusted) res.put("trusted",trusted); + if(trusted) res.put(TRUSTED,trusted); break; case TYPE_IMAGE_URL: res.put("type",TYPE_IMAGE_URL); @@ -634,4 +715,11 @@ public static JSONObject getformatedContentByType(String content,String type,boo } return res; } + public static String getDataDisclaimer(Grant g){ + if (SHOW_DATA_DISCLAIMER){ + return g.T("AI_DISCLAIMER_DATA").replace("[PROVIDER]", AI_PROVIDER); + } + return ""; + } + } \ No newline at end of file diff --git a/src/com/simplicite/commons/AIBySimplicite/AiMetrics.java b/src/com/simplicite/commons/AIBySimplicite/AiMetrics.java index bbd31b8..d93643d 100644 --- a/src/com/simplicite/commons/AIBySimplicite/AiMetrics.java +++ b/src/com/simplicite/commons/AIBySimplicite/AiMetrics.java @@ -17,17 +17,17 @@ */ public class AiMetrics implements java.io.Serializable { - static final String EXEMPLE=" ```javascript\n"+ + static final String EXEMPLE=" ```javascript\n"+ "function(){//code exemple to do search on the object myObject witch has a field myField\n"+ - " const app = $ui.getApp();\n"+ - " const obj = app.getBusinessObject(\"MyObject\");\n"+ - " obj.search(function(items){\n"+ - " for(let i=0;i ObjectDB obj = g.getTmpObject(name); synchronized(obj.getLock()){ if(ModuleDB.isSystemModule(obj.getModuleName()) && !"User".equals(name)){//avoid technical object exept User whitch is frequently used - //AppLog.info("System module "+obj.getModuleName()+" is not allowed.", g); return objectJSON; } obj.select(rowId); @@ -72,20 +73,10 @@ private JSONObject getObjectValueJSON(String name,String rowId,ArrayList for (ObjectField field : obj.getFields()) { if(!field.isTechnicalField() && !field.isReferenced() && Tool.isEmpty(field.getClassifications())){ if(field.isForeignKey()){ - String refName=field.getRefObjectName(); - String refRowId = field.getValue(); - if(!done.contains(refName+":"+refRowId)){ - done.add(refName+":"+refRowId); - JSONObject ref = getObjectValueJSON(refName,refRowId,done,g); - if(!Tool.isEmpty(ref)) links.put(ref); - } - }else if(field.isDocument()){ - fields.put(field.getDisplay(), "Document"); - }else if(field.isImage()){ - fields.put(field.getDisplay(), "Image"); - - }else{ - fields.put(field.getDisplay(), field.getValue()); + JSONObject ref = getLinkByForeingKey(field, done, g); + if(!Tool.isEmpty(ref)) links.put(ref); + }else { + fields.put(field.getDisplay(), getFieldValueByType(field)); } } @@ -96,4 +87,23 @@ private JSONObject getObjectValueJSON(String name,String rowId,ArrayList } return objectJSON; } + private String getFieldValueByType(ObjectField field){ + if(field.isDocument()){ + return "Document"; + }else if(field.isImage()){ + return "Image"; + + }else{ + return field.getValue(); + } + } + private JSONObject getLinkByForeingKey(ObjectField field,ArrayList done,Grant g){ + String refName=field.getRefObjectName(); + String refRowId = field.getValue(); + if(!done.contains(refName+":"+refRowId)){ + done.add(refName+":"+refRowId); + return getObjectValueJSON(refName,refRowId,done,g); + } + return new JSONObject(); + } } \ No newline at end of file diff --git a/src/com/simplicite/extobjects/AIBySimplicite/AIMetricsChat.java b/src/com/simplicite/extobjects/AIBySimplicite/AIMetricsChat.java index f72abcc..2fdcbd7 100644 --- a/src/com/simplicite/extobjects/AIBySimplicite/AIMetricsChat.java +++ b/src/com/simplicite/extobjects/AIBySimplicite/AIMetricsChat.java @@ -1,6 +1,5 @@ package com.simplicite.extobjects.AIBySimplicite; -import com.simplicite.commons.AIBySimplicite.AiMetrics; import com.simplicite.commons.AIBySimplicite.AITools; import com.simplicite.util.*; import com.simplicite.util.exceptions.*; @@ -30,8 +29,10 @@ public Object display(Parameters params) { return javascript("$ui.alert("+Message.formatError("AI_MODULE_ERROR", null,null)+")"); } JSONObject swagger = AITools.getSimplifyedSwagger(moduleName, g); - AppLog.info("Swagger: "+swagger, getGrant()); - return javascript(getName() + ".render(ctn,"+new JSONObject().put("components",new JSONObject().put("schemas",swagger.optJSONObject("components").optJSONObject("schemas"))).toString()+");"); + String swaggerString = new JSONObject().put("components",new JSONObject().put("schemas",swagger.optJSONObject("components").optJSONObject("schemas"))).toString(); + swaggerString = swaggerString.replace("\\", "\\\\").replace("\"", "\\\""); + AppLog.info("Swagger: "+swaggerString, getGrant()); + return javascript(getName() + ".render(ctn,'"+swaggerString+"');"); } catch (PlatformException e) { AppLog.error(e, g); } diff --git a/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java b/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java index ddb10fd..d109a1e 100644 --- a/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java +++ b/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java @@ -7,8 +7,6 @@ import com.simplicite.util.exceptions.*; import com.simplicite.util.tools.*; -import static org.mockito.ArgumentMatchers.booleanThat; - import org.json.JSONArray; import org.json.JSONObject; @@ -35,9 +33,9 @@ public Object post(Parameters params) throws HTTPException { String objectID = params.getParameter(JSON_OBJECT_ID_KEY); JSONObject req = params.getJSONObject(); if (Tool.isEmpty(type)) type = "default"; - switch (type) { + switch (type) { //use switch for future extension case "metrics": - JSONObject swagger = new JSONObject(params.getParameter("swagger")); + JSONObject swagger = params.has("swagger")?new JSONObject(params.getParameter("swagger")):null; String lang = params.getParameter("lang"); return AiMetrics.getJavaScriptMetrics(prompt, swagger,lang).toString(1); default: @@ -46,7 +44,7 @@ public Object post(Parameters params) throws HTTPException { }else if (!Tool.isEmpty(prompt) ) { return updateFieldByParam(prompt,params); }else if(Tool.isEmpty(prompt) && !Tool.isEmpty(objectName) && !Tool.isEmpty(objectID)){ - return frontAICaller(objectName, objectID); + return frontAiCaller(objectName, objectID); } else { return error(400, "Call me with a prompt or a object param please!"); } @@ -56,7 +54,7 @@ public Object post(Parameters params) throws HTTPException { return error(e); } } - private Object frontAICaller(String objectName, String objectID){ + private Object frontAiCaller(String objectName, String objectID){ ObjectDB obj = Grant.getSystemAdmin().getTmpObject(objectName); JSONArray res = new JSONArray(); synchronized(obj.getLock()){ @@ -102,47 +100,31 @@ private Object updateFieldByRequest(JSONObject req){ private Object updateFieldByParam(String prompt, Parameters params){ Grant g = getGrant(); boolean isJsonPrompt = true; - JSONArray jsonPrompt; - try { - jsonPrompt = new JSONArray(prompt); - }catch(Exception e){ + JSONArray jsonPrompt = optJSONArray(prompt); + if(Tool.isEmpty(jsonPrompt)){ isJsonPrompt = false; - jsonPrompt = new JSONArray(); } - int histDepth = Grant.getSystemAdmin().getJSONObjectParameter("AI_API_PARAM").getInt("hist_depth"); JSONObject res; String specialisation = params.getParameter("specialisation"); String objectName = params.getParameter(JSON_OBJECT_NAME_KEY); String objectID = params.getParameter(JSON_OBJECT_ID_KEY); String historicString = params.getParameter("historic"); + ObjectDB obj = null; + if(!Tool.isEmpty(objectName) && !Tool.isEmpty(objectID) && !isJsonPrompt){ - ObjectDB obj = Grant.getSystemAdmin().getTmpObject(objectName); + obj = Grant.getSystemAdmin().getTmpObject(objectName); synchronized(obj.getLock()){ obj.select(objectID); - res = AITools.expresionAICaller(g, specialisation, prompt, obj); + res = AITools.expresionAiCaller(g, specialisation, prompt, obj); } - }else if (!Tool.isEmpty(historicString)){ - JSONArray historic = new JSONArray(); - int i=0; - JSONArray list = new JSONArray(historicString); - int begin = list.length()-histDepth*2; - for(Object hist : list){ - if(i>=begin) - historic.put(AITools.formatMessageHistoric(new JSONObject((String) hist))); - i++; - } - if(isJsonPrompt){ - res = AITools.AICaller(g, specialisation, historic, jsonPrompt); - }else{ - res = AITools.AICaller(g, specialisation, historic, prompt); - } }else{ + JSONArray historic = optHistoric(historicString, histDepth); if(isJsonPrompt){ - res = AITools.AICaller(g, specialisation, jsonPrompt); + res = AITools.aiCaller(g, specialisation, historic, jsonPrompt); }else{ - res = AITools.AICaller(g, specialisation, prompt); + res = AITools.aiCaller(g, specialisation, historic, prompt); } } @@ -150,6 +132,26 @@ private Object updateFieldByParam(String prompt, Parameters params){ .put("request", prompt) .put("response", res); } + private JSONArray optJSONArray(String prompt){ + try { + return new JSONArray(prompt); + }catch(Exception e){ + return new JSONArray(); + } + } + private JSONArray optHistoric(String historicString, int histDepth){ + if (!Tool.isEmpty(historicString)) return null; + JSONArray historic = new JSONArray(); + int i=0; + JSONArray list = new JSONArray(historicString); + int begin = list.length()-histDepth*2; + for(Object hist : list){ + if(i>=begin) + historic.put(AITools.formatMessageHistoric(new JSONObject((String) hist))); + i++; + } + return historic; + } } \ No newline at end of file diff --git a/src/com/simplicite/objects/AIBySimplicite/AiSettings.java b/src/com/simplicite/objects/AIBySimplicite/AiSettings.java index 57c9fa6..182b94e 100644 --- a/src/com/simplicite/objects/AIBySimplicite/AiSettings.java +++ b/src/com/simplicite/objects/AIBySimplicite/AiSettings.java @@ -1,11 +1,10 @@ package com.simplicite.objects.AIBySimplicite; -import java.util.*; - import com.simplicite.util.*; import com.simplicite.util.exceptions.*; import com.simplicite.util.tools.*; + import org.json.JSONException; import org.json.JSONObject; @@ -17,13 +16,14 @@ public class AiSettings extends ObjectDB { private static final String AI_API_KEY = "AI_API_KEY"; private static final String AI_API_PARAM = "AI_API_PARAM"; private static final String AI_API_URL = "AI_API_URL"; + private static final String MODELE_FIELD = "aiSetModele"; + private static final String SYS_CODE = "sys_code"; + private static final String SYS_VAL2 = "sys_value2"; + @Override public String preCreate() { - setFieldValue("aiSetConfig", getGrant().T("AI_CONFIG_"+getFieldValue("aiSetModele"))); - //return Message.formatInfo("INFO_CODE", "Message", "fieldName"); - //return Message.formatWarning("WARNING_CODE", "Message", "fieldName"); - //return Message.formatError("ERROR_CODE", "Message", "fieldName"); + setFieldValue("aiSetConfig", getGrant().T("AI_CONFIG_"+getFieldValue(MODELE_FIELD))); return null; } public void active(Action action){ @@ -34,21 +34,20 @@ public void active(Action action){ BusinessObjectTool paramTool = paramObj.getTool(); synchronized(paramObj.getLock()){ try { - paramTool.selectForUpsert(new JSONObject().put("sys_code", AI_API_KEY)); - paramObj.setFieldValue("sys_value2", key); + paramTool.selectForUpsert(new JSONObject().put(SYS_CODE, AI_API_KEY)); + paramObj.setFieldValue(SYS_VAL2, key); paramTool.validateAndSave(); - paramTool.selectForUpsert(new JSONObject().put("sys_code", AI_API_PARAM)); - paramObj.setFieldValue("sys_value2", setting); + paramTool.selectForUpsert(new JSONObject().put(SYS_CODE, AI_API_PARAM)); + paramObj.setFieldValue(SYS_VAL2, setting); paramTool.validateAndSave(); - paramTool.selectForUpsert(new JSONObject().put("sys_code", AI_API_URL)); - paramObj.setFieldValue("sys_value2", url); + paramTool.selectForUpsert(new JSONObject().put(SYS_CODE, AI_API_URL)); + paramObj.setFieldValue(SYS_VAL2, url); paramTool.validateAndSave(); } catch (GetException | JSONException | ValidateException | SaveException e) { AppLog.error( e, getGrant()); } } - } @Override public boolean isActionEnable(String[] arg0, String arg1) { diff --git a/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java b/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java index 17ada70..0c9d686 100644 --- a/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java +++ b/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java @@ -1,9 +1,8 @@ package com.simplicite.workflows.AIBySimplicite; -import static org.mockito.ArgumentMatchers.contains; import java.util.*; -import org.checkerframework.checker.units.qual.t; + import org.json.JSONArray; import org.json.JSONObject; import com.simplicite.bpm.*; @@ -14,8 +13,6 @@ import com.simplicite.util.tools.*; import com.simplicite.webapp.ObjectContextWeb; -import ch.simschla.minify.cli.App; - /** @@ -24,7 +21,10 @@ public class AIModuleCreate extends Processus { private static final long serialVersionUID = 1L; private static final String PROCESS_RESOURCE_EXTERNAL_OBJECT ="AIProcessResource"; + private static final String INTERNAL_OBJ ="ObjectInternal"; private static final String FIELD ="Field"; + private static final String MDL_PREFIX_FIELD ="mdl_prefix"; + private static final String ROW_MODULE_ID_FIELD ="row_module_id"; private static final String ROW_ID ="row_id"; private static final String EMPTY_TEXTAREA =""; private static final String ACTIVITY_CREATE_MODULE ="AIC_0010"; @@ -39,16 +39,23 @@ public class AIModuleCreate extends Processus { private static final String ACTIVITY_TRL_DOMAIN ="AIC_0015"; private static final String ACTIVITY_NEW_SCOPE="AIC_0017"; private static final String ACTIVITY_NEED_CONFIG_END="AIC-NC-END"; - private static final String ACTIVITY_CHECK_CONF="AIC_CHECK_CONF"; + private static final String AI_API_PARAM="AI_API_PARAM"; + private static final String AI_API_URL="AI_API_URL"; + private static final String AI_SETTING_NEED="AI_SETTING_NEED"; + private static final String EXISTING_OBJECT="exisitingObject"; + private static final String BEGIN_SCRIPT=""; + private static final String DOMAIN="Domain"; + private static final String BOT_NAME=Grant.getSystemAdmin().getParameter("AI_CHAT_BOT_NAME"); - public String checkConf(com.simplicite.bpm.ActivityFile context,com.simplicite.util.Grant g,java.util.List list){ - AppLog.info("checkConf: "+context.getActivity().getStep()+" "+String.join(", ", list), getGrant()); - String pSetting = Grant.getSystemAdmin().getParameter("AI_API_PARAM"); - String pUrl = Grant.getSystemAdmin().getParameter("AI_API_URL"); - AppLog.info(HTMLTool.getListURL("AiSettings",""), getGrant()); + public String checkConf(com.simplicite.bpm.ActivityFile context,com.simplicite.util.Grant g,java.util.List list){ + AppLog.info("checkConf: "+context.getActivity().getStep()+" "+String.join(", ", list), g); + String pSetting = Grant.getSystemAdmin().getParameter(AI_API_PARAM); + String pUrl = Grant.getSystemAdmin().getParameter(AI_API_URL); + AppLog.info(HTMLTool.getListURL("AiSettings",""),g); if("/".equals(pSetting) || "/".equals(pUrl)) { - AppLog.info(("AI_SETTING_NEED"),getGrant()); - return "AIC-NC-END"; + AppLog.info((AI_SETTING_NEED),g); + return ACTIVITY_NEED_CONFIG_END; } return "AIC_0005"; @@ -65,22 +72,22 @@ public String checkConf(com.simplicite.bpm.ActivityFile context,com.simplicite.u public String chatBot(Processus p, ActivityFile context, ObjectContextWeb ctx, Grant g){ if(context.getStatus() == ActivityFile.STATE_DONE) return null; - String pSetting = Grant.getSystemAdmin().getParameter("AI_API_PARAM"); - String pUrl = Grant.getSystemAdmin().getParameter("AI_API_URL"); - if("/".equals(pSetting) || "/".equals(pUrl)) return g.T("AI_SETTING_NEED"); + String pSetting = Grant.getSystemAdmin().getParameter(AI_API_PARAM); + String pUrl = Grant.getSystemAdmin().getParameter(AI_API_URL); + if("/".equals(pSetting) || "/".equals(pUrl)) return g.T(AI_SETTING_NEED); List objs = getModuleObjects(getContext(getActivity(ACTIVITY_SELECT_MODULE)).getDataValue(FIELD, ROW_ID),g); if (Tool.isEmpty(objs)) return getModuleChat("",g); - JSONObject json = objectToJSON(objs,getContext(getActivity(ACTIVITY_SELECT_MODULE)).getDataValue(FIELD, "mdl_prefix")); + JSONObject json = objectToJSON(objs,getContext(getActivity(ACTIVITY_SELECT_MODULE)).getDataValue(FIELD, MDL_PREFIX_FIELD)); - getContext(getActivity(ACTIVITY_GEN)).setDataFile("Data","exisitingObject",getObjsIds(objs,g)); - String contextApp =AITools.AICaller(g, "you help to describe UML for non technical person","Describes the application defined by this JSON in a graphical way for non-technical users: "+json.toString() , null,false,true).getJSONArray("choices").getJSONObject(0).getJSONObject("message").getString("content"); + getContext(getActivity(ACTIVITY_GEN)).setDataFile("Data",EXISTING_OBJECT,getObjsIds(objs,g)); + String contextApp =AITools.aiCaller(g, "you help to describe UML for non technical person","Describes the application defined by this JSON in a graphical way for non-technical users: "+json.toString() , null,false,true).getJSONArray("choices").getJSONObject(0).getJSONObject("message").getString("content"); contextApp = formatAnswerAI(contextApp); return getModuleChat(contextApp,g); } private String[] getObjsIds(List objs,Grant g){ String[] ids = new String[objs.size()]; - int idIndex = g.getTmpObject("ObjectInternal").getRowIdFieldIndex(); + int idIndex = g.getTmpObject(INTERNAL_OBJ).getRowIdFieldIndex(); for(int i=0;i objs,Grant g){ private JSONObject objectToJSON(List objs,String modulePrefix){ JSONArray objects = new JSONArray(); JSONArray relationship = new JSONArray(); - ObjectDB obj = getGrant().getTmpObject("ObjectInternal"); + ObjectDB obj = getGrant().getTmpObject(INTERNAL_OBJ); for(String[] el : objs){ JSONObject object = new JSONObject(); String objName = el[obj.getFieldIndex("obo_name")]; @@ -141,22 +148,22 @@ private JSONArray getFieldArray(String objName, JSONArray relationship, String m return array; } private List getModuleObjects(String moduleId,Grant g){ - ObjectDB obj = getGrant().getTmpObject("ObjectInternal"); + ObjectDB obj = g.getTmpObject(INTERNAL_OBJ); obj.resetFilters(); - obj.setFieldFilter("row_module_id", moduleId); + obj.setFieldFilter(ROW_MODULE_ID_FIELD, moduleId); return obj.search(); } private String getModuleChat(String response,Grant g){ - String script = g.getExternalObject(PROCESS_RESOURCE_EXTERNAL_OBJECT).getResourceJSContent("CHAT_BOT_SCRIPT"); + + String script =HTMLTool.jsBlock(g.getExternalObject(PROCESS_RESOURCE_EXTERNAL_OBJECT).getResourceJSContent("CHAT_BOT_SCRIPT")); + AppLog.info("script: "+script, g); String css = HTMLTool.lessToCss(g.getExternalObject(PROCESS_RESOURCE_EXTERNAL_OBJECT).getResourceCSSContent("CHAT_BOT_CSS")); - String html = g.getExternalObject(PROCESS_RESOURCE_EXTERNAL_OBJECT).getResourceHTMLContent("CHAT_BOT_MODEL"); - - html = html.replace("{{script}}", script); + html = html.replace("{{{script}}}", script); html = html.replace("{{css}}", css); html = html.replace("{{init}}", Globals.LANG_FRENCH.equals(g.getLang())?"Bonjour! Comment puis-je vous aider avec la conception d'applications? Voulez-vous que je vous aide a definir vos besoin ou avez-vous des questions spécifiques sur la conception?":"Hello! How can I help you with application design? Do you want me to help you define your needs or do you have specific questions about design?"); - html = html.replace("{{botMesage}}", Tool.isEmpty(response)?"":"
{{botName}}: "+response+"
"); + html = html.replace("{{botMesage}}", Tool.isEmpty(response)?"":"
"+BOT_NAME+": "+response+"
"); return html; } /** @@ -209,28 +216,28 @@ public String ai(Processus p, ActivityFile context, ObjectContextWeb ctx, Grant "\t\t\t});\n" + // "\t\t\t\n" + // "\t\t});"; - String pSetting = Grant.getSystemAdmin().getParameter("AI_API_PARAM"); - String pUrl = Grant.getSystemAdmin().getParameter("AI_API_URL"); - if("/".equals(pSetting) || "/".equals(pUrl)) return g.T("AI_SETTING_NEED"); + String pSetting = Grant.getSystemAdmin().getParameter(AI_API_PARAM); + String pUrl = Grant.getSystemAdmin().getParameter(AI_API_URL); + if("/".equals(pSetting) || "/".equals(pUrl)) return g.T(AI_SETTING_NEED); List listResult = getJsonAi( getPreviousContext(context).getActivity().getStep(), g); - if(Tool.isEmpty(listResult)) return EMPTY_TEXTAREA+""; + if(Tool.isEmpty(listResult)) return EMPTY_TEXTAREA+BEGIN_SCRIPT+aceEditor+END_SCRIPT; if(listResult.size()!=3)return Message.formatError("AI_ERROR_RETURN", listResult.get(0),null ); - return "

"+listResult.get(0)+"

"+"
"+"

"+listResult.get(2)+"

"+""; + return "

"+listResult.get(0)+"

"+"
"+"

"+listResult.get(2)+"

"+BEGIN_SCRIPT+aceEditor+END_SCRIPT; } private List getJsonAi(String previousStep, Grant g){ JSONArray historic = new JSONArray(); String prompt = getPromptFromContext(previousStep, historic,g); - JSONObject jsonres = new JSONObject(); + if(Tool.isEmpty(prompt)){//for test return new ArrayList<>(); } - String result = AITools.AICaller(g, "you help to create UML in json for application, your answers are automatically processed in java", prompt, historic,false,true).getJSONArray("choices").getJSONObject(0).getJSONObject("message").getString("content"); + String result = AITools.aiCaller(g, "you help to create UML in json for application, your answers are automatically processed in java", prompt, historic,false,true).getJSONArray("choices").getJSONObject(0).getJSONObject("message").getString("content"); List listResult = new ArrayList<>(); - jsonres = AITools.getValidJson(result); + JSONObject jsonres = AITools.getValidJson(result); if(Tool.isEmpty(jsonres)){ listResult = AITools.getJSONBlock(result,getGrant()); @@ -282,7 +289,7 @@ private String getPromptFromPromptActivity(Grant g){ } private String getPromptFromInteractionActivity(Grant g, JSONArray historic){ - int histDepth = Grant.getSystemAdmin().getJSONObjectParameter("AI_API_PARAM").getInt("hist_depth"); + int histDepth = Grant.getSystemAdmin().getJSONObjectParameter(AI_API_PARAM).getInt("hist_depth"); String historicString = getContext(getActivity(ACTIVITY_INTERACTION)).getDataValue("Data", "AI_data"); if(Tool.isEmpty(historicString)){//for test return ""; @@ -312,18 +319,10 @@ private String getPromptFromInteractionActivity(Grant g, JSONArray historic){ public String gen(Processus p, ActivityFile context, ObjectContextWeb ctx, Grant g){ if(context.getStatus() == ActivityFile.STATE_DONE){ return null;} - String pSetting = Grant.getSystemAdmin().getParameter("AI_API_PARAM"); - String pUrl = Grant.getSystemAdmin().getParameter("AI_API_URL"); - if("/".equals(pSetting) || "/".equals(pUrl)) return g.T("AI_SETTING_NEED"); - String json = ""; - - if (!getActivity(ACTIVITY_AI).isUserDialog()){ - List result = getJsonAi(getPreviousContext(getPreviousContext(context)).getActivity().getStep(), g); - if(!Tool.isEmpty(result) && result.size()==3) json = result.get(1); //isEmpty check null - }else{ - json = getContext(getActivity(ACTIVITY_AI)).getDataValue("Data", "json_return"); - } - + String pSetting = Grant.getSystemAdmin().getParameter(AI_API_PARAM); + String pUrl = Grant.getSystemAdmin().getParameter(AI_API_URL); + if("/".equals(pSetting) || "/".equals(pUrl)) return g.T(AI_SETTING_NEED); + String json = getAIAnswer(context,g); if (Tool.isEmpty(json)){ return g.getText("AI_ERROR"); } @@ -332,9 +331,9 @@ public String gen(Processus p, ActivityFile context, ObjectContextWeb ctx, Grant if(ACTIVITY_SELECT_DOMAIN.equals(test)){ objs = getObjsIds(getModuleObjects(getContext(getActivity(ACTIVITY_SELECT_MODULE)).getDataValue(FIELD, ROW_ID),g),g); }else{ - DataFile data = context.getDataFile("Data", "exisitingObject",true); + DataFile data = context.getDataFile("Data", EXISTING_OBJECT,true); if(!Tool.isEmpty(data)){ - objs = context.getDataFile("Data", "exisitingObject",true).getValues(); + objs = context.getDataFile("Data", EXISTING_OBJECT,true).getValues(); } } @@ -351,12 +350,12 @@ public String gen(Processus p, ActivityFile context, ObjectContextWeb ctx, Grant context.setDataFile("Data", "moduleId", moduleId); context.setDataFile("Data", "moduleName", ModuleDB.getModuleName(moduleId)); if(Tool.isEmpty(objs)){ - return "

"+g.getText("AI_SUCCESS")+"

"; + return "

"+g.getText("AI_SUCCESS")+"

"; + return "

"+g.getText("AI_COMPLETED")+"

"; } + } \ No newline at end of file From 858e4512a6506a5340ab3cc82467a609ebc3748d Mon Sep 17 00:00:00 2001 From: "designer (Designer)" <> Date: Tue, 2 Jul 2024 10:21:25 +0200 Subject: [PATCH 07/74] Convert mztrics to crosstabe --- AIBySimplicite.json | 818 ++++-------------- README.md | 13 - files/Model/Model-AIChartCrossTable.png | Bin 35356 -> 0 bytes files/Model/Model-AIChartCrossTable.svg | 1 - module-info.json | 2 +- .../ObjectExternal/AIMetricsChat/SCRIPT.js | 30 +- .../AIProcessResource/CROSSTABLE_PROMPT.text | 27 + .../commons/AIBySimplicite/AIData.java | 4 +- .../commons/AIBySimplicite/AIField.java | 4 +- .../commons/AIBySimplicite/AIModel.java | 66 +- .../commons/AIBySimplicite/AITools.java | 46 +- .../commons/AIBySimplicite/AiMetrics.java | 159 +++- .../AIBySimplicite/AIMetricsChat.java | 3 +- .../extobjects/AIBySimplicite/AIRestAPI.java | 36 +- .../AIBySimplicite/AIChartCrossTable.java | 41 - .../AIBySimplicite/AIModuleCreate.java | 6 +- 16 files changed, 480 insertions(+), 776 deletions(-) delete mode 100644 files/Model/Model-AIChartCrossTable.png delete mode 100644 files/Model/Model-AIChartCrossTable.svg create mode 100644 resources/ObjectExternal/AIProcessResource/CROSSTABLE_PROMPT.text delete mode 100644 src/com/simplicite/workflows/AIBySimplicite/AIChartCrossTable.java diff --git a/AIBySimplicite.json b/AIBySimplicite.json index bae2b28..647a71f 100644 --- a/AIBySimplicite.json +++ b/AIBySimplicite.json @@ -87,27 +87,6 @@ "icon": "img/system/model", "field": "row_module_id", "list": [ - { - "object": "Model", - "userkey": "Model-AIChartCrossTable", - "item": { - "mod_name": "Model-AIChartCrossTable", - "mod_template_id__mtp_name": "ModelProcess", - "mod_template_id__mtp_type": "P", - "mod_json": null, - "mod_doc": { - "path": "files/Model/Model-AIChartCrossTable.svg", - "mime": "image/svg+xml", - "name": "model.svg" - }, - "mod_image": { - "path": "files/Model/Model-AIChartCrossTable.png", - "mime": "image/png", - "name": "Model-AIChartCrossTable.png" - }, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, { "object": "Model", "userkey": "Model-AiChartToCrossTable", @@ -2778,39 +2757,6 @@ "icon": "img/system/process", "field": "row_module_id", "list": [ - { - "object": "BPMProcess", - "userkey": "AIChartCrossTable", - "item": { - "pcs_name": "AIChartCrossTable", - "pcs_short_name": "ACCT", - "pcs_comment": "Converting a chart.js script into a pivot table and saving it.", - "pcs_type": "0", - "pcs_class": null, - "pcs_script_id": { - "path": "src/com/simplicite/workflows/AIBySimplicite/AIChartCrossTable.java", - "mime": "text/plain", - "name": "AIChartCrossTable.java" - }, - "pcs_max_duration": null, - "pcs_duration_unit": "D", - "pcs_persitant": false, - "pcs_persist_depth": null, - "pcs_alert_id__alt_name": null, - "pcs_compensate_id__pcs_name": null, - "pcs_model_id__mod_name": "Model-AIChartCrossTable", - "pcs_model_id__mod_image": { - "path": "files/Model/Model-AIChartCrossTable.png", - "mime": "image/png", - "name": "Model-AIChartCrossTable.png" - }, - "row_module_id__mdl_name": "AIBySimplicite", - "pcs_mainact_id__acy_step": null, - "pcs_mainact_id__acy_name": null, - "pcs_mainact_id__acy_process_id__pcs_name": null, - "pcs_main_del": null - } - }, { "object": "BPMProcess", "userkey": "AIGenData", @@ -2885,101 +2831,6 @@ "icon": "img/system/activity", "field": "row_module_id", "list": [ - { - "object": "BPMActivity", - "userkey": "AIChartCrossTable~ACCT-0100", - "item": { - "acy_process_id__pcs_name": "AIChartCrossTable", - "acy_step": "ACCT-0100", - "acy_name": "Module", - "acy_comment": null, - "acy_type": "C", - "acy_posx": null, - "acy_posy": null, - "acy_reversible": "N", - "acy_max_duration": null, - "acy_duration_unit": null, - "acy_alert_id__alt_name": null, - "acy_user_dlg": true, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "BPMActivity", - "userkey": "AIChartCrossTable~ACCT-0200", - "item": { - "acy_process_id__pcs_name": "AIChartCrossTable", - "acy_step": "ACCT-0200", - "acy_name": "DefineChart", - "acy_comment": null, - "acy_type": "X", - "acy_posx": null, - "acy_posy": null, - "acy_reversible": "N", - "acy_max_duration": null, - "acy_duration_unit": null, - "acy_alert_id__alt_name": null, - "acy_user_dlg": true, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "BPMActivity", - "userkey": "AIChartCrossTable~ACCT-0300", - "item": { - "acy_process_id__pcs_name": "AIChartCrossTable", - "acy_step": "ACCT-0300", - "acy_name": "Display", - "acy_comment": null, - "acy_type": "X", - "acy_posx": null, - "acy_posy": null, - "acy_reversible": "N", - "acy_max_duration": null, - "acy_duration_unit": null, - "acy_alert_id__alt_name": null, - "acy_user_dlg": true, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "BPMActivity", - "userkey": "AIChartCrossTable~ACCT-BEG", - "item": { - "acy_process_id__pcs_name": "AIChartCrossTable", - "acy_step": "ACCT-BEG", - "acy_name": "Begin", - "acy_comment": null, - "acy_type": "B", - "acy_posx": null, - "acy_posy": null, - "acy_reversible": "N", - "acy_max_duration": null, - "acy_duration_unit": "D", - "acy_alert_id__alt_name": null, - "acy_user_dlg": false, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "BPMActivity", - "userkey": "AIChartCrossTable~ACCT-END", - "item": { - "acy_process_id__pcs_name": "AIChartCrossTable", - "acy_step": "ACCT-END", - "acy_name": "End", - "acy_comment": null, - "acy_type": "E", - "acy_posx": null, - "acy_posy": null, - "acy_reversible": "N", - "acy_max_duration": null, - "acy_duration_unit": "D", - "acy_alert_id__alt_name": null, - "acy_user_dlg": false, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, { "object": "BPMActivity", "userkey": "AIGenData~GGD-BEG", @@ -3406,82 +3257,6 @@ "icon": "img/system/activity_link", "field": "row_module_id", "list": [ - { - "object": "BPMTransition", - "userkey": "AIChartCrossTable~AIChartCrossTable~ACCT-0100~AIChartCrossTable~ACCT-0200", - "item": { - "trs_process_id__pcs_name": "AIChartCrossTable", - "trs_from_id__acy_process_id__pcs_name": "AIChartCrossTable", - "trs_from_id__acy_step": "ACCT-0100", - "trs_from_id__acy_name": "Module", - "trs_to_id__acy_process_id__pcs_name": "AIChartCrossTable", - "trs_to_id__acy_step": "ACCT-0200", - "trs_to_id__acy_name": "DefineChart", - "trs_name": null, - "trs_action_id__act_name": null, - "trs_condition": null, - "trs_callback": null, - "trs_alert_id__alt_name": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "BPMTransition", - "userkey": "AIChartCrossTable~AIChartCrossTable~ACCT-0200~AIChartCrossTable~ACCT-0300", - "item": { - "trs_process_id__pcs_name": "AIChartCrossTable", - "trs_from_id__acy_process_id__pcs_name": "AIChartCrossTable", - "trs_from_id__acy_step": "ACCT-0200", - "trs_from_id__acy_name": "DefineChart", - "trs_to_id__acy_process_id__pcs_name": "AIChartCrossTable", - "trs_to_id__acy_step": "ACCT-0300", - "trs_to_id__acy_name": "Display", - "trs_name": null, - "trs_action_id__act_name": null, - "trs_condition": null, - "trs_callback": null, - "trs_alert_id__alt_name": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "BPMTransition", - "userkey": "AIChartCrossTable~AIChartCrossTable~ACCT-0300~AIChartCrossTable~ACCT-END", - "item": { - "trs_process_id__pcs_name": "AIChartCrossTable", - "trs_from_id__acy_process_id__pcs_name": "AIChartCrossTable", - "trs_from_id__acy_step": "ACCT-0300", - "trs_from_id__acy_name": "Display", - "trs_to_id__acy_process_id__pcs_name": "AIChartCrossTable", - "trs_to_id__acy_step": "ACCT-END", - "trs_to_id__acy_name": "End", - "trs_name": null, - "trs_action_id__act_name": null, - "trs_condition": null, - "trs_callback": null, - "trs_alert_id__alt_name": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "BPMTransition", - "userkey": "AIChartCrossTable~AIChartCrossTable~ACCT-BEG~AIChartCrossTable~ACCT-0100", - "item": { - "trs_process_id__pcs_name": "AIChartCrossTable", - "trs_from_id__acy_process_id__pcs_name": "AIChartCrossTable", - "trs_from_id__acy_step": "ACCT-BEG", - "trs_from_id__acy_name": "Begin", - "trs_to_id__acy_process_id__pcs_name": "AIChartCrossTable", - "trs_to_id__acy_step": "ACCT-0100", - "trs_to_id__acy_name": "Module", - "trs_name": null, - "trs_action_id__act_name": null, - "trs_condition": null, - "trs_callback": null, - "trs_alert_id__alt_name": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, { "object": "BPMTransition", "userkey": "AIGenData~AIGenData~GGD-BEG~AIGenData~GGD_0100", @@ -3908,126 +3683,6 @@ "icon": "img/system/activity_data", "field": "row_module_id", "list": [ - { - "object": "BPMData", - "userkey": "AIChartCrossTable~ACCT-0100~Constraint~Mandatory", - "item": { - "dta_activity_id__acy_process_id__pcs_name": "AIChartCrossTable", - "dta_activity_id__acy_step": "ACCT-0100", - "dta_activity_id__acy_name": "Module", - "dta_group": "Constraint", - "dta_name": "Mandatory", - "dta_order": 1, - "dta_value": "true", - "dta_field_id__fld_name": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "BPMData", - "userkey": "AIChartCrossTable~ACCT-0100~Object~Name", - "item": { - "dta_activity_id__acy_process_id__pcs_name": "AIChartCrossTable", - "dta_activity_id__acy_step": "ACCT-0100", - "dta_activity_id__acy_name": "Module", - "dta_group": "Object", - "dta_name": "Name", - "dta_order": 1, - "dta_value": "Module", - "dta_field_id__fld_name": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "BPMData", - "userkey": "AIChartCrossTable~ACCT-0200~Data~swagger", - "item": { - "dta_activity_id__acy_process_id__pcs_name": "AIChartCrossTable", - "dta_activity_id__acy_step": "ACCT-0200", - "dta_activity_id__acy_name": "DefineChart", - "dta_group": "Data", - "dta_name": "swagger", - "dta_order": 1, - "dta_value": null, - "dta_field_id__fld_name": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "BPMData", - "userkey": "AIChartCrossTable~ACCT-0200~Data~js", - "item": { - "dta_activity_id__acy_process_id__pcs_name": "AIChartCrossTable", - "dta_activity_id__acy_step": "ACCT-0200", - "dta_activity_id__acy_name": "DefineChart", - "dta_group": "Data", - "dta_name": "js", - "dta_order": 1, - "dta_value": null, - "dta_field_id__fld_name": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "BPMData", - "userkey": "AIChartCrossTable~ACCT-0200~Page~Method", - "item": { - "dta_activity_id__acy_process_id__pcs_name": "AIChartCrossTable", - "dta_activity_id__acy_step": "ACCT-0200", - "dta_activity_id__acy_name": "DefineChart", - "dta_group": "Page", - "dta_name": "Method", - "dta_order": 1, - "dta_value": "defineChart", - "dta_field_id__fld_name": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "BPMData", - "userkey": "AIChartCrossTable~ACCT-0300~Data~objName", - "item": { - "dta_activity_id__acy_process_id__pcs_name": "AIChartCrossTable", - "dta_activity_id__acy_step": "ACCT-0300", - "dta_activity_id__acy_name": "Display", - "dta_group": "Data", - "dta_name": "objName", - "dta_order": 1, - "dta_value": null, - "dta_field_id__fld_name": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "BPMData", - "userkey": "AIChartCrossTable~ACCT-0300~Data~ctName", - "item": { - "dta_activity_id__acy_process_id__pcs_name": "AIChartCrossTable", - "dta_activity_id__acy_step": "ACCT-0300", - "dta_activity_id__acy_name": "Display", - "dta_group": "Data", - "dta_name": "ctName", - "dta_order": 1, - "dta_value": null, - "dta_field_id__fld_name": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "BPMData", - "userkey": "AIChartCrossTable~ACCT-0300~Page~Method", - "item": { - "dta_activity_id__acy_process_id__pcs_name": "AIChartCrossTable", - "dta_activity_id__acy_step": "ACCT-0300", - "dta_activity_id__acy_name": "Display", - "dta_group": "Page", - "dta_name": "Method", - "dta_order": 1, - "dta_value": "display", - "dta_field_id__fld_name": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, { "object": "BPMData", "userkey": "AIGenData~GGD-END~Forward~PARAM=1", @@ -4083,7 +3738,7 @@ "dta_group": "Filter", "dta_name": "mdl_type", "dta_order": 1, - "dta_value": "is null or not in ('S','A')", + "dta_value": "is null or not in ('S')", "dta_field_id__fld_name": null, "row_module_id__mdl_name": "AIBySimplicite" } @@ -4398,7 +4053,7 @@ "dta_group": "Filter", "dta_name": "mdl_type", "dta_order": 1, - "dta_value": "is null or not in ('S','A')", + "dta_value": "is null or not in ('S')", "dta_field_id__fld_name": null, "row_module_id__mdl_name": "AIBySimplicite" } @@ -4879,12 +4534,12 @@ }, { "object": "BPMGrantActivity", - "userkey": "AI_BUSINESS~AIChartCrossTable~ACCT-0100", + "userkey": "AI_DESIGNER~AIGenData~GGD_0100", "item": { - "gta_group_id__grp_name": "AI_BUSINESS", - "gta_activity_id__acy_process_id__pcs_name": "AIChartCrossTable", - "gta_activity_id__acy_step": "ACCT-0100", - "gta_activity_id__acy_name": "Module", + "gta_group_id__grp_name": "AI_DESIGNER", + "gta_activity_id__acy_process_id__pcs_name": "AIGenData", + "gta_activity_id__acy_step": "GGD_0100", + "gta_activity_id__acy_name": "SelectModule", "gta_grant": [ "R", "W", @@ -4895,12 +4550,12 @@ }, { "object": "BPMGrantActivity", - "userkey": "AI_BUSINESS~AIChartCrossTable~ACCT-0200", + "userkey": "AI_DESIGNER~AIGenData~GGD_0150", "item": { - "gta_group_id__grp_name": "AI_BUSINESS", - "gta_activity_id__acy_process_id__pcs_name": "AIChartCrossTable", - "gta_activity_id__acy_step": "ACCT-0200", - "gta_activity_id__acy_name": "DefineChart", + "gta_group_id__grp_name": "AI_DESIGNER", + "gta_activity_id__acy_process_id__pcs_name": "AIGenData", + "gta_activity_id__acy_step": "GGD_0150", + "gta_activity_id__acy_name": "Confirm", "gta_grant": [ "R", "W", @@ -4911,60 +4566,12 @@ }, { "object": "BPMGrantActivity", - "userkey": "AI_BUSINESS~AIChartCrossTable~ACCT-0300", + "userkey": "AI_DESIGNER~AIGenData~GGD_0200", "item": { - "gta_group_id__grp_name": "AI_BUSINESS", - "gta_activity_id__acy_process_id__pcs_name": "AIChartCrossTable", - "gta_activity_id__acy_step": "ACCT-0300", - "gta_activity_id__acy_name": "Display", - "gta_grant": [ - "R", - "W", - "C" - ], - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "BPMGrantActivity", - "userkey": "AI_DESIGNER~AIGenData~GGD_0100", - "item": { - "gta_group_id__grp_name": "AI_DESIGNER", - "gta_activity_id__acy_process_id__pcs_name": "AIGenData", - "gta_activity_id__acy_step": "GGD_0100", - "gta_activity_id__acy_name": "SelectModule", - "gta_grant": [ - "R", - "W", - "C" - ], - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "BPMGrantActivity", - "userkey": "AI_DESIGNER~AIGenData~GGD_0150", - "item": { - "gta_group_id__grp_name": "AI_DESIGNER", - "gta_activity_id__acy_process_id__pcs_name": "AIGenData", - "gta_activity_id__acy_step": "GGD_0150", - "gta_activity_id__acy_name": "Confirm", - "gta_grant": [ - "R", - "W", - "C" - ], - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "BPMGrantActivity", - "userkey": "AI_DESIGNER~AIGenData~GGD_0200", - "item": { - "gta_group_id__grp_name": "AI_DESIGNER", - "gta_activity_id__acy_process_id__pcs_name": "AIGenData", - "gta_activity_id__acy_step": "GGD_0200", - "gta_activity_id__acy_name": "GenData", + "gta_group_id__grp_name": "AI_DESIGNER", + "gta_activity_id__acy_process_id__pcs_name": "AIGenData", + "gta_activity_id__acy_step": "GGD_0200", + "gta_activity_id__acy_name": "GenData", "gta_grant": [ "R", "W", @@ -5166,19 +4773,6 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, - { - "object": "BPMGrantProcess", - "userkey": "AI_BUSINESS~AIChartCrossTable", - "item": { - "gtp_group_id__grp_name": "AI_BUSINESS", - "gtp_process_id__pcs_name": "AIChartCrossTable", - "gtp_grant": [ - "N", - "C" - ], - "row_module_id__mdl_name": "AIBySimplicite" - } - }, { "object": "BPMGrantProcess", "userkey": "AI_DESIGNER~AIGenData", @@ -5215,6 +4809,46 @@ } ] }, + { + "object": "Crosstab", + "label": "Pivot tables", + "icon": "img/system/pivot_table", + "field": "row_module_id", + "list": [ + { + "object": "Crosstab", + "userkey": "OrderStatusChart", + "item": { + "ctb_name": "OrderStatusChart", + "ctb_object_id__obo_name": "DemoOrder", + "ctb_function": "S", + "ctb_visible": "1", + "ctb_fixedcolors": true, + "ctb_precision": null, + "ctb_subtotal": false, + "ctb_totalcolor": null, + "ctb_caption": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "Crosstab", + "userkey": "OrderStatusCrossTab", + "item": { + "ctb_name": "OrderStatusCrossTab", + "ctb_object_id__obo_name": "DemoOrder", + "ctb_function": "S", + "ctb_visible": "1", + "ctb_fixedcolors": true, + "ctb_precision": null, + "ctb_subtotal": false, + "ctb_totalcolor": null, + "ctb_caption": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + } + ] + }, { "object": "Map", "label": "Main menu", @@ -5644,6 +5278,30 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, + { + "object": "Resource", + "userkey": "ObjectExternal(AIProcessResource)~ANY~CROSSTABLE_PROMPT", + "item": { + "res_object": { + "item": {"obe_name": "AIProcessResource"}, + "icon": "img/system/external_object", + "label": "External object", + "userkeylabel": "AIProcessResource", + "object": "ObjectExternal" + }, + "res_type": "OTHER", + "res_lang": "ANY", + "res_code": "CROSSTABLE_PROMPT", + "res_cached": false, + "res_file": { + "path": "resources/ObjectExternal/AIProcessResource/CROSSTABLE_PROMPT.text", + "mime": "application/octet-stream", + "name": "AIProcessResource_CROSSTABLE_PROMPT.text" + }, + "res_image": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "Resource", "userkey": "ObjectExternal(AIProcessResource)~ANY~MODELE_CLASSE", @@ -6520,6 +6178,78 @@ } ] }, + { + "object": "TranslateCrosstab", + "label": "Pivot table translation", + "icon": "img/system/translation", + "field": "row_module_id", + "list": [ + { + "object": "TranslateCrosstab", + "userkey": "Crosstab(OrderStatusCrossTab)~ENU", + "item": { + "tsl_object": { + "item": {"ctb_name": "OrderStatusCrossTab"}, + "icon": "img/system/pivot_table", + "label": "Pivot table", + "userkeylabel": "OrderStatusCrossTab", + "object": "Crosstab" + }, + "tsl_lang": "ENU", + "tsl_value": "Order status cross tab", + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "TranslateCrosstab", + "userkey": "Crosstab(OrderStatusCrossTab)~FRA", + "item": { + "tsl_object": { + "item": {"ctb_name": "OrderStatusCrossTab"}, + "icon": "img/system/pivot_table", + "label": "Pivot table", + "userkeylabel": "OrderStatusCrossTab", + "object": "Crosstab" + }, + "tsl_lang": "FRA", + "tsl_value": "Order status cross tab", + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "TranslateCrosstab", + "userkey": "Crosstab(OrderStatusChart)~ENU", + "item": { + "tsl_object": { + "item": {"ctb_name": "OrderStatusChart"}, + "icon": "img/system/pivot_table", + "label": "Pivot table", + "userkeylabel": "OrderStatusChart", + "object": "Crosstab" + }, + "tsl_lang": "ENU", + "tsl_value": "Order status chart", + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "TranslateCrosstab", + "userkey": "Crosstab(OrderStatusChart)~FRA", + "item": { + "tsl_object": { + "item": {"ctb_name": "OrderStatusChart"}, + "icon": "img/system/pivot_table", + "label": "Pivot table", + "userkeylabel": "OrderStatusChart", + "object": "Crosstab" + }, + "tsl_lang": "FRA", + "tsl_value": "Order status chart", + "row_module_id__mdl_name": "AIBySimplicite" + } + } + ] + }, { "object": "TranslateField", "label": "Field translation", @@ -8167,196 +7897,6 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, - { - "object": "TranslateActivity", - "userkey": "BPMActivity(AIChartCrossTable ACCT-BEG)~ENU", - "item": { - "tsl_object": { - "item": { - "acy_process_id__pcs_name": "AIChartCrossTable", - "acy_step": "ACCT-BEG" - }, - "icon": "img/system/activity", - "label": "Activity", - "userkeylabel": "AIChartCrossTable ACCT-BEG", - "object": "BPMActivity" - }, - "tsl_lang": "ENU", - "tsl_value": "Begin", - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "TranslateActivity", - "userkey": "BPMActivity(AIChartCrossTable ACCT-BEG)~FRA", - "item": { - "tsl_object": { - "item": { - "acy_process_id__pcs_name": "AIChartCrossTable", - "acy_step": "ACCT-BEG" - }, - "icon": "img/system/activity", - "label": "Activity", - "userkeylabel": "AIChartCrossTable ACCT-BEG", - "object": "BPMActivity" - }, - "tsl_lang": "FRA", - "tsl_value": "Begin", - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "TranslateActivity", - "userkey": "BPMActivity(AIChartCrossTable ACCT-END)~ENU", - "item": { - "tsl_object": { - "item": { - "acy_process_id__pcs_name": "AIChartCrossTable", - "acy_step": "ACCT-END" - }, - "icon": "img/system/activity", - "label": "Activity", - "userkeylabel": "AIChartCrossTable ACCT-END", - "object": "BPMActivity" - }, - "tsl_lang": "ENU", - "tsl_value": "End", - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "TranslateActivity", - "userkey": "BPMActivity(AIChartCrossTable ACCT-END)~FRA", - "item": { - "tsl_object": { - "item": { - "acy_process_id__pcs_name": "AIChartCrossTable", - "acy_step": "ACCT-END" - }, - "icon": "img/system/activity", - "label": "Activity", - "userkeylabel": "AIChartCrossTable ACCT-END", - "object": "BPMActivity" - }, - "tsl_lang": "FRA", - "tsl_value": "End", - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "TranslateActivity", - "userkey": "BPMActivity(AIChartCrossTable ACCT-0100)~ENU", - "item": { - "tsl_object": { - "item": { - "acy_process_id__pcs_name": "AIChartCrossTable", - "acy_step": "ACCT-0100" - }, - "icon": "img/system/activity", - "label": "Activity", - "userkeylabel": "AIChartCrossTable ACCT-0100", - "object": "BPMActivity" - }, - "tsl_lang": "ENU", - "tsl_value": "Module", - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "TranslateActivity", - "userkey": "BPMActivity(AIChartCrossTable ACCT-0100)~FRA", - "item": { - "tsl_object": { - "item": { - "acy_process_id__pcs_name": "AIChartCrossTable", - "acy_step": "ACCT-0100" - }, - "icon": "img/system/activity", - "label": "Activity", - "userkeylabel": "AIChartCrossTable ACCT-0100", - "object": "BPMActivity" - }, - "tsl_lang": "FRA", - "tsl_value": "Module", - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "TranslateActivity", - "userkey": "BPMActivity(AIChartCrossTable ACCT-0200)~ENU", - "item": { - "tsl_object": { - "item": { - "acy_process_id__pcs_name": "AIChartCrossTable", - "acy_step": "ACCT-0200" - }, - "icon": "img/system/activity", - "label": "Activity", - "userkeylabel": "AIChartCrossTable ACCT-0200", - "object": "BPMActivity" - }, - "tsl_lang": "ENU", - "tsl_value": "Define chart", - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "TranslateActivity", - "userkey": "BPMActivity(AIChartCrossTable ACCT-0200)~FRA", - "item": { - "tsl_object": { - "item": { - "acy_process_id__pcs_name": "AIChartCrossTable", - "acy_step": "ACCT-0200" - }, - "icon": "img/system/activity", - "label": "Activity", - "userkeylabel": "AIChartCrossTable ACCT-0200", - "object": "BPMActivity" - }, - "tsl_lang": "FRA", - "tsl_value": "Définir le graphique", - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "TranslateActivity", - "userkey": "BPMActivity(AIChartCrossTable ACCT-0300)~ENU", - "item": { - "tsl_object": { - "item": { - "acy_process_id__pcs_name": "AIChartCrossTable", - "acy_step": "ACCT-0300" - }, - "icon": "img/system/activity", - "label": "Activity", - "userkeylabel": "AIChartCrossTable ACCT-0300", - "object": "BPMActivity" - }, - "tsl_lang": "ENU", - "tsl_value": "Display", - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "TranslateActivity", - "userkey": "BPMActivity(AIChartCrossTable ACCT-0300)~FRA", - "item": { - "tsl_object": { - "item": { - "acy_process_id__pcs_name": "AIChartCrossTable", - "acy_step": "ACCT-0300" - }, - "icon": "img/system/activity", - "label": "Activity", - "userkeylabel": "AIChartCrossTable ACCT-0300", - "object": "BPMActivity" - }, - "tsl_lang": "FRA", - "tsl_value": "Affichage", - "row_module_id__mdl_name": "AIBySimplicite" - } - }, { "object": "TranslateActivity", "userkey": "BPMActivity(AIGenData GGD-END)~ENU", @@ -8580,38 +8120,6 @@ "tsl_value": "Génération du module", "row_module_id__mdl_name": "AIBySimplicite" } - }, - { - "object": "TranslateProcess", - "userkey": "BPMProcess(AIChartCrossTable)~ENU", - "item": { - "tsl_object": { - "item": {"pcs_name": "AIChartCrossTable"}, - "icon": "img/system/process", - "label": "Business process", - "userkeylabel": "AIChartCrossTable", - "object": "BPMProcess" - }, - "tsl_lang": "ENU", - "tsl_value": "Convert to crosstab", - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "TranslateProcess", - "userkey": "BPMProcess(AIChartCrossTable)~FRA", - "item": { - "tsl_object": { - "item": {"pcs_name": "AIChartCrossTable"}, - "icon": "img/system/process", - "label": "Business process", - "userkeylabel": "AIChartCrossTable", - "object": "BPMProcess" - }, - "tsl_lang": "FRA", - "tsl_value": "Convertir en tableau croisé", - "row_module_id__mdl_name": "AIBySimplicite" - } } ] }, @@ -8641,6 +8149,26 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, + { + "object": "Permission", + "userkey": "AI_BUSINESS~Crosstab(OrderStatusChart)~", + "item": { + "prm_group_id__grp_name": "AI_BUSINESS", + "prm_object": { + "item": {"ctb_name": "OrderStatusChart"}, + "icon": "img/system/pivot_table", + "label": "Pivot table", + "userkeylabel": "OrderStatusChart", + "object": "Crosstab" + }, + "prm_perm": true, + "prm_upd": false, + "prm_req": false, + "prm_prop": null, + "prm_value": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "Permission", "userkey": "AI_BUSINESS~ObjectExternal(AIMetricsChat)~", diff --git a/README.md b/README.md index 4c02a90..952d421 100644 --- a/README.md +++ b/README.md @@ -126,19 +126,6 @@ In a `view` add an `external page` of source `External object`: `AIMetricsChat?m * `AI_ACTIVE_SETTINGS`: -`AIChartCrossTable` business process definition ------------------------------------------------ - -Converting a chart.js script into a pivot table and saving it. - -### Activities - -* `Module`: -* `DefineChart`: -* `Display`: -* `Begin`: -* `End`: - `AIGenData` business process definition --------------------------------------- diff --git a/files/Model/Model-AIChartCrossTable.png b/files/Model/Model-AIChartCrossTable.png deleted file mode 100644 index 222b01a97b0bde3685f6f43e57f9165c27a60bc7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35356 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 Lu6{1-oD!MBeginEndModuleConstraint.MandatorytrueObject.NameModule(RWC)AI_BUSINESSDefineChartData.swaggerData.jsPage.MethoddefineChart(RWC)AI_BUSINESSDisplayData.objNameData.ctNamePage.Methoddisplay(RWC)AI_BUSINESS \ No newline at end of file diff --git a/module-info.json b/module-info.json index a1f25a0..950654e 100644 --- a/module-info.json +++ b/module-info.json @@ -1,5 +1,5 @@ { - "date": "2024-06-26 15:02:56", + "date": "2024-07-02 10:20:11", "name": "AIBySimplicite", "format": "json", "files": ["AIBySimplicite.json"], diff --git a/resources/ObjectExternal/AIMetricsChat/SCRIPT.js b/resources/ObjectExternal/AIMetricsChat/SCRIPT.js index 9e0daa0..4ab3c1d 100644 --- a/resources/ObjectExternal/AIMetricsChat/SCRIPT.js +++ b/resources/ObjectExternal/AIMetricsChat/SCRIPT.js @@ -4,9 +4,14 @@ var AIMetricsChat = AIMetricsChat || (function() { let userTemplateMetrics ="
{{user}}: {{msg}}
"; let swagger=""; let userName = "user"; - function render(params,s) { + let moduleName = ""; + let lastScript = ""; + + function render(params,module,s) { // set button text - console.log("AIMetricsChat render: "+s); + moduleName = module; + $("#work .actions").append(''); + console.log("AIMetricsChat render: "+moduleName); $('#metrics_user_text').click(function() { showWarn();}); app.getTexts(function(textes){ let sendText = textes?.AI_BUTTON_SEND ||"Send"; @@ -91,10 +96,13 @@ var AIMetricsChat = AIMetricsChat || (function() { if(botResponse.js.indexOf(botResponse.function) == -1) { eval(botResponse.function); } - + lastScript = botResponse.js; + }catch(e){ $('#metrics_messages .bot-messages:last .msg').text("Sorry, I can't understand your request. Please try again."); } + }else{ + lastScript = $("#ia_html script").text(); } // Définir les options globales pour Chart.js Chart.defaults.responsive = true; @@ -122,6 +130,20 @@ var AIMetricsChat = AIMetricsChat || (function() { $('#metrics_user_text').unbind('click'); }); } - return { render: render ,sendMetricsMessage:sendMetricsMessage}; + function saveAsCrosstable(){ + + let func = lastScript; + console.log("callProcess: "+func); + let params = {reqType:"saveMetrics",swagger:swagger,moduleName:moduleName,function:func,ctx:"$('#ia_html')"}; + let url = Simplicite.ROOT+"/ext/AIRestAPI"; + + let useAsync = true; + app._call(useAsync, url, params, function callback(botResponse){ + console.log(botResponse); + eval(botResponse.script); + }); + + } + return { render: render ,sendMetricsMessage:sendMetricsMessage,saveAsCrosstable:saveAsCrosstable}; })(); diff --git a/resources/ObjectExternal/AIProcessResource/CROSSTABLE_PROMPT.text b/resources/ObjectExternal/AIProcessResource/CROSSTABLE_PROMPT.text new file mode 100644 index 0000000..250568a --- /dev/null +++ b/resources/ObjectExternal/AIProcessResource/CROSSTABLE_PROMPT.text @@ -0,0 +1,27 @@ +convert this graph into a cross-tab defined by a json: +```json +{ + "name": "",//mandatory PascalCase + "en":"", + "fr":"", + "function": "",//("sum","text","product","min","max","formula","algebraic average","geometric average") mandatory + "object":"", + "type":"",//("bar", "bar_stack", "pie", "area","area_stack") + ] + "column":[ + { + "object":"",//mandatory + "field":"",//mandatory + "order": int,//mandatory + "function": "",//("sum","text","product","min","max","formula","algebraic average","geometric average") + },//... + ], + "line":[ + { + "object":"",//mandatory + "field":"",//mandatory + "order": int,//mandatory + "function": "",//("sum","text","product","min","max","formula","algebraic average","geometric average") + },//... + ] +}``` \ No newline at end of file diff --git a/src/com/simplicite/commons/AIBySimplicite/AIData.java b/src/com/simplicite/commons/AIBySimplicite/AIData.java index 16389c4..8b12660 100644 --- a/src/com/simplicite/commons/AIBySimplicite/AIData.java +++ b/src/com/simplicite/commons/AIBySimplicite/AIData.java @@ -6,7 +6,6 @@ import org.json.JSONException; import org.json.JSONObject; - import com.simplicite.util.*; import com.simplicite.util.exceptions.*; import com.simplicite.util.tools.*; @@ -260,7 +259,8 @@ private static JSONObject getJsonModel(String[] ids, Grant g){ */ private static JSONObject callIADataOnModule(String[] ids, Grant g) throws PlatformException{ JSONObject data = getJsonModel(ids, g); - String response = AITools.aiCaller(g, /* "module uml: "+json */"", " generates consistent data in json according to the model: ```json "+data.toString(1)+"``` with at least 2 entries per class",false,true).getJSONArray("choices").getJSONObject(0).getJSONObject("message").getString("content"); + JSONObject jsonResponse = AITools.aiCaller(g, /* "module uml: "+json */"", " generates consistent data in json according to the model: ```json "+data.toString(1)+"``` with at least 2 entries per class",false,true); + String response = AITools.parseJsonOpenAIResponse(jsonResponse); JSONObject json = AITools.getValidJson(response); if(Tool.isEmpty(json)){ diff --git a/src/com/simplicite/commons/AIBySimplicite/AIField.java b/src/com/simplicite/commons/AIBySimplicite/AIField.java index deab256..dcf940d 100644 --- a/src/com/simplicite/commons/AIBySimplicite/AIField.java +++ b/src/com/simplicite/commons/AIBySimplicite/AIField.java @@ -155,7 +155,7 @@ private static List validateNotepadAIFieldInternal(ObjectField fld, Obje fld.addNotepad(g.getLogin(), sentence); fld.setOldValue(fld.getValue()); - fld.addNotepad("ChatAI",result.getJSONArray("choices").getJSONObject(0).getJSONObject("message").getString("content")); + fld.addNotepad("ChatAI",AITools.parseJsonOpenAIResponse(result)); } return msgs; } @@ -205,7 +205,7 @@ public static List validateLongStringAIField(ObjectField fld,ObjectDB ob msgs.add(Message.formatError(AI_ERROR_RETURN,result.getString("code")+": "+result.getString(JSON_ERROR_KEY),"demoPrdDescription")); return msgs; } - fld.setValue(result.getJSONArray("choices").getJSONObject(0).getJSONObject("message").getString("content")); + fld.setValue(AITools.parseJsonOpenAIResponse(result)); } } diff --git a/src/com/simplicite/commons/AIBySimplicite/AIModel.java b/src/com/simplicite/commons/AIBySimplicite/AIModel.java index fb3136a..ca2e41d 100644 --- a/src/com/simplicite/commons/AIBySimplicite/AIModel.java +++ b/src/com/simplicite/commons/AIBySimplicite/AIModel.java @@ -5,7 +5,6 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.docx4j.model.datastorage.XPathEnhancerParser.filterExpr_return; import org.json.JSONArray; import org.json.JSONObject; @@ -466,7 +465,7 @@ private static String createObject(JSONObject jsonObj, String objName, String o } } fields.put(OBJECT_DESCRIPTION, comment); - String oboId = createOrUpdateWithJson(OBJECT_INTERNAL_NAME,fields, g); + String oboId = AITools.createOrUpdateWithJson(OBJECT_INTERNAL_NAME,fields, g); dataMaps.objCreate.put(objName.toLowerCase(),oboId); String en= (jsonObj.has("en") && (jsonObj.get("en") instanceof String))? jsonObj.getString("en"):""; @@ -482,42 +481,7 @@ private static String createObject(JSONObject jsonObj, String objName, String o } return oboId; } - private static String createOrUpdateWithJson(String objName,JSONObject fields, Grant g){ - JSONObject filters = getFKFilters(objName,fields, g); - ObjectDB obj = g.getTmpObject(objName); - try{ - synchronized(obj.getLock()){ - BusinessObjectTool objTool = obj.getTool(); - if(!objTool.selectForCreateOrUpdate(filters)){ - obj.setValuesFromJSONObject(fields, false, false); - obj.populate(true); - objTool.validateAndCreate(); - } - } - return obj.getRowId(); - }catch(GetException | ValidateException | SaveException e){ - AppLog.error(null, e, g); - } - - return "0"; - } - private static JSONObject getFKFilters(String objName,JSONObject fields, Grant g){ - JSONObject filters = new JSONObject(); - ObjectDB obj = g.getTmpObject(objName); - synchronized(obj.getLock()){ - for(ObjectField fk : obj.getFunctId()){ - String name = fk.getName(); - if("map_order".equals(name)){//to avoid duplicate object in domain - continue; - } - if(fields.has(name) && !fields.isNull(name)){ - filters.put(name, fields.get(name)); - } - } - } - - return filters; - } + private static String getIcon(String icon){ if(!Tool.isEmpty(icon)){ icon = icon.replace("bi-",""); @@ -560,7 +524,7 @@ private static String addField(JSONObject jsonFld,String oboId, String objPrefix completeList(enumId, jsonFld,objName,fldName, mInfo, g); } - String fldId = createOrUpdateWithJson(OBJECTFIELD,field, g); + String fldId = AITools.createOrUpdateWithJson(OBJECTFIELD,field, g); dataMaps.fieldCreate.put(fieldName, fldId); translateField(jsonFld, fldId, dataMaps, g); String oboFldId = createObjectField(oboId, fieldName, fieldOrder, mInfo, dataMaps, g); @@ -704,13 +668,13 @@ private static String createObjectField(String oboId,String fieldName,int fieldO oboField.put(OBJECTFIELD_FIELD_FIELD, dataMaps.fieldCreate.get(fieldName)); oboField.put(OBJECTFIELD_ORDER_FIELD, fieldOrder); oboField.put(MODULE_ID_FIELD,mInfo.moduleId); - return createOrUpdateWithJson(OBJECT_FIELD_SYSTEM_NAME,oboField, g); + return AITools.createOrUpdateWithJson(OBJECT_FIELD_SYSTEM_NAME,oboField, g); } private static String createListOfValue(String objPrefix,String fieldName,ModuleInfo mInfo,Grant g){ JSONObject enumObject = new JSONObject(); enumObject.put("lov_name",SyntaxTool.join(SyntaxTool.UPPER, new String[]{mInfo.mPrefix,objPrefix,fieldName})); enumObject.put(MODULE_ID_FIELD,mInfo.moduleId); - return createOrUpdateWithJson("FieldList",enumObject, g); + return AITools.createOrUpdateWithJson("FieldList",enumObject, g); } private static void createLinks(JSONArray links, ModuleInfo mInfo, DataMapObject dataMaps, Grant g) throws GetException, ValidateException, UpdateException { int linkorder = 10; @@ -802,7 +766,7 @@ private static void createLinkObject(String name,ModuleInfo mInfo, DataMapObject linkFields.put(MODULE_ID_FIELD, mInfo.moduleId); linkFields.put(OBJECT_PREFIX_FIELD, namewp.substring(0, 3).toLowerCase()); linkFields.put(OBJECT_ICON_FIELD, getIcon("")); - String oboId = createOrUpdateWithJson(OBJECT_INTERNAL_NAME,linkFields, g); + String oboId = AITools.createOrUpdateWithJson(OBJECT_INTERNAL_NAME,linkFields, g); dataMaps.objCreate.put(name.toLowerCase(),oboId); } @@ -853,7 +817,7 @@ private static void manyToManyLink(LinkObject objectData1,LinkObject objectData2 objFields.put(OBJECT_PREFIX_FIELD, prefix1+prefix2); objFields.put(OBJECT_ICON_FIELD, getIcon("")); objFields.put(OBJECT_DESCRIPTION, "NN between "+objectData1.en+" and "+objectData2.en); - childId = createOrUpdateWithJson(OBJECT_INTERNAL_NAME,objFields, g); + childId = AITools.createOrUpdateWithJson(OBJECT_INTERNAL_NAME,objFields, g); dataMaps.objCreate.put(name.toLowerCase(),childId); for (String gId: mInfo.groupIds){ grantGroup(gId,childId,mInfo.moduleId,g); @@ -886,7 +850,7 @@ private static void manyToOneLink(String childId,LinkObject objectData, ModuleIn fields.put("fld_fonctid",true); fields.put("fld_required",true); } - refId = createOrUpdateWithJson(OBJECTFIELD,fields, g); + refId = AITools.createOrUpdateWithJson(OBJECTFIELD,fields, g); JSONObject oboFields = new JSONObject(); oboFields.put(OBJECTFIELD_OBJECT_FIELD, childId); oboFields.put(OBJECTFIELD_FIELD_FIELD, refId); @@ -894,7 +858,7 @@ private static void manyToOneLink(String childId,LinkObject objectData, ModuleIn oboFields.put(MODULE_ID_FIELD,mInfo.moduleId); oboFields.put("obf_ref_object_id",objectData.objId); oboFields.put("obf_cascad", Character.toString(del)); - createOrUpdateWithJson(OBJECT_FIELD_SYSTEM_NAME,oboFields, g); + AITools.createOrUpdateWithJson(OBJECT_FIELD_SYSTEM_NAME,oboFields, g); //Joined field Add key of child in main object. objectData.linkorder += 1; addJoinedField(childId, refId, objectData, mInfo, dataMaps, objectData.linkorder, g); @@ -911,7 +875,7 @@ private static void addJoinedField(String childId,String refId,LinkObject object fields.put(MODULE_ID_FIELD,mInfo.moduleId); fields.put("obf_ref_object_id",objectData.objId); fields.put("obf_ref_field_id",refId); - String oboFldId = createOrUpdateWithJson(OBJECT_FIELD_SYSTEM_NAME,fields, g); + String oboFldId = AITools.createOrUpdateWithJson(OBJECT_FIELD_SYSTEM_NAME,fields, g); if(dataMaps.fldEn.containsKey(fkField) && !Tool.isEmpty(objectData.en)){ createOrUpdateTranslation(OBJECT_FIELD_SYSTEM_NAME, oboFldId, Globals.LANG_ENGLISH, objectData.en +" "+dataMaps.fldEn.get(fkField), mInfo.moduleId, g); } @@ -975,7 +939,7 @@ private static void completeList(String moduleId,String listId,JSONArray values, } addFieldStyle(objName,fldName,code,style.bg,moduleId,g); } - String enumId = createOrUpdateWithJson("FieldListCode",enumCodeFields, g); + String enumId = AITools.createOrUpdateWithJson("FieldListCode",enumCodeFields, g); if(jsonValue.has("en") && (jsonValue.get("en") instanceof String) && (oTraT.selectForCreateOrUpdate(new JSONObject().put("lov_code_id",enumId).put("lov_lang",Globals.LANG_ENGLISH)))){ oTra.setFieldValue("lov_value", jsonValue.getString("en")); oTraT.validateAndUpdate(); @@ -987,14 +951,14 @@ private static void completeList(String moduleId,String listId,JSONArray values, order+=1; } } - private static void addFieldStyle(String objName,String fldName,String code,String style,String moduleId,Grant g) throws GetException, ValidateException, UpdateException{ + private static void addFieldStyle(String objName,String fldName,String code,String style,String moduleId,Grant g){ JSONObject fieldStyle= new JSONObject(); fieldStyle.put("sty_object", objName); fieldStyle.put("sty_field", fldName); fieldStyle.put("sty_value", code); fieldStyle.put("sty_style", style); fieldStyle.put(MODULE_ID_FIELD,moduleId); - createOrUpdateWithJson("FieldStyle",fieldStyle, g); + AITools.createOrUpdateWithJson("FieldStyle",fieldStyle, g); } private static JSONObject getJsonValue(Object value, Grant g){ @@ -1015,7 +979,7 @@ private static void addToDomain(String domainID,String objectId,String moduleId, domain.put("map_object", "ObjectInternal:"+objectId); domain.put("map_order", domainOrder); domain.put(MODULE_ID_FIELD,moduleId); - createOrUpdateWithJson("Map",domain, g); + AITools.createOrUpdateWithJson("Map",domain, g); } private static void grantGroup(String groupId,String objectId,String moduleId,Grant g){ ObjectDB funcObj = g.getTmpObject("Function"); @@ -1031,7 +995,7 @@ private static void grantGroup(String groupId,String objectId,String moduleId,Gr grant.put("grt_group_id", groupId); grant.put(MODULE_ID_FIELD,moduleId); grant.put("grt_function_id",funcId); - createOrUpdateWithJson("Grant",grant, g); + AITools.createOrUpdateWithJson("Grant",grant, g); } private static String formatObjectNames(String name){ String regex="\\s(\\w)"; diff --git a/src/com/simplicite/commons/AIBySimplicite/AITools.java b/src/com/simplicite/commons/AIBySimplicite/AITools.java index 74a42f7..4a87e57 100644 --- a/src/com/simplicite/commons/AIBySimplicite/AITools.java +++ b/src/com/simplicite/commons/AIBySimplicite/AITools.java @@ -30,6 +30,7 @@ public class AITools implements java.io.Serializable { private static final long serialVersionUID = 1L; private static final JSONObject AI_API_PARAM = Grant.getSystemAdmin().getJSONObjectParameter("AI_API_PARAM"); private static final String CONTENT_KEY = "content"; + private static final String MESSAGE_KEY = "message"; private static final String MAX_TOKEN_PARAM_KEY = "default_max_token"; private static final String ASSISTANT_ROLE="assistant"; private static final String MAX_TOKEN = "max_tokens"; @@ -239,7 +240,7 @@ public static String readError(HttpURLConnection connection,int responseCode,Gra } AppLog.info("AI API error :["+responseCode+"]"+response.toString(),g); JSONObject error = new JSONObject(response.toString()); - String errorMessage = error.optJSONObject("error").optString("message","no message"); + String errorMessage = error.optJSONObject("error").optString(MESSAGE_KEY,"no message"); AppLog.info("AI API error :["+responseCode+"]: "+errorMessage,g); connection.disconnect(); @@ -278,7 +279,7 @@ public static String readResponse(HttpURLConnection connection,Grant g){ return res; } String resultText = resArray.optJSONObject(0).getString("generated_text"); - JSONObject resJson =new JSONObject().put("choices",new JSONArray().put(new JSONObject().put("message",new JSONObject().put(CONTENT_KEY,resultText)))); + JSONObject resJson =new JSONObject().put("choices",new JSONArray().put(new JSONObject().put(MESSAGE_KEY,new JSONObject().put(CONTENT_KEY,resultText)))); return resJson.toString(); } catch (IOException e) { AppLog.error(e,g); @@ -729,5 +730,46 @@ public static String getDataDisclaimer(Grant g){ } return ""; } + public static String createOrUpdateWithJson(String objName,JSONObject fields, Grant g){ + AppLog.info("Create or update object :"+objName,g); + JSONObject filters = getFKFilters(objName,fields, g); + ObjectDB obj = g.getTmpObject(objName); + try{ + synchronized(obj.getLock()){ + BusinessObjectTool objTool = obj.getTool(); + if(!objTool.selectForCreateOrUpdate(filters)){ + AppLog.info("Create object :"+objName,g); + obj.setValuesFromJSONObject(fields, false, false); + obj.populate(true); + objTool.validateAndCreate(); + } + } + return obj.getRowId(); + }catch(GetException | ValidateException | SaveException e){ + AppLog.error(null, e, g); + } + + return "0"; + } + private static JSONObject getFKFilters(String objName,JSONObject fields, Grant g){ + JSONObject filters = new JSONObject(); + ObjectDB obj = g.getTmpObject(objName); + synchronized(obj.getLock()){ + for(ObjectField fk : obj.getFunctId()){ + String name = fk.getName(); + if("map_order".equals(name)){//to avoid duplicate object in domain + continue; + } + if(fields.has(name) && !fields.isNull(name)){ + filters.put(name, fields.get(name)); + } + } + } + + return filters; + } + public static String parseJsonOpenAIResponse(JSONObject res){ + return res.getJSONArray("choices").getJSONObject(0).getJSONObject(MESSAGE_KEY).getString(CONTENT_KEY); + } } \ No newline at end of file diff --git a/src/com/simplicite/commons/AIBySimplicite/AiMetrics.java b/src/com/simplicite/commons/AIBySimplicite/AiMetrics.java index faa4279..b59088d 100644 --- a/src/com/simplicite/commons/AIBySimplicite/AiMetrics.java +++ b/src/com/simplicite/commons/AIBySimplicite/AiMetrics.java @@ -1,13 +1,15 @@ package com.simplicite.commons.AIBySimplicite; +import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.json.JSONObject; -import com.simplicite.util.*; -import ch.simschla.minify.cli.App; +import com.simplicite.util.*; +import com.simplicite.util.tools.BusinessObjectTool; +import com.simplicite.util.exceptions.*; import org.json.JSONArray; @@ -18,6 +20,16 @@ * Shared code AiMetrics */ public class AiMetrics implements java.io.Serializable { + private static final JSONObject FUNCTIONS = new JSONObject("{" + // + " \"text\": \"T\"," + // + " \"sum\": \"S\"," + // + " \"product\": \"P\"," + // + " \"algebraic average\": \"A\"," + // + " \"geometric average\": \"G\"," + // + " \"min\": \"L\"," + // + " \"max\": \"H\"," + // + " \"formula\": \"F\"" + // + "}"); static final String EXEMPLE=" ```javascript\n"+ "function(){//code exemple to do search on the object myObject witch has a field myField\n"+ @@ -32,6 +44,8 @@ public class AiMetrics implements java.io.Serializable { "//be careful with var names with spaces in json use 'var'.\n"+ "}\n"+ "```\n"; + private static final String FUNCTION_KEY = "function"; + private static final String MODULE_ID = "mldId"; private static final long serialVersionUID = 1L; public static JSONObject getJavaScriptMetrics(String prompt, JSONObject swagger , String lang){ AppLog.info("AI request: "+swagger, null); @@ -41,15 +55,12 @@ public static JSONObject getJavaScriptMetrics(String prompt, JSONObject swagger arrayPrompts.put(AITools.getformatedContentByType(EXEMPLE, AITools.TYPE_TEXT, true)); arrayPrompts.put(AITools.getformatedContentByType(prompt, AITools.TYPE_TEXT,true)); - - JSONObject res = AITools.aiCaller(null, "\n ```OppenAPI "+swagger+"```",arrayPrompts,false,true,true); - String result = res.getJSONArray("choices").getJSONObject(0).getJSONObject("message").getString("content"); - JSONObject resultJS = splitRes(result,swagger.optJSONObject("components").getJSONObject("schemas")); + JSONObject res = AITools.aiCaller(null, "\n ```OpenAPI "+swagger+"```",arrayPrompts,false,true,true); + JSONObject resultJS = splitRes(AITools.parseJsonOpenAIResponse(res),swagger.optJSONObject("components").getJSONObject("schemas")); AppLog.info("AI response: "+resultJS.toString(1), null); if (resultJS.has("error")) { res = AITools.aiCaller(null, "You help formulate a prompt for an graph-generating AI. You're called if the ia doesn't understand. ",prompt,false,true); - result = res.getJSONArray("choices").getJSONObject(0).getJSONObject("message").getString("content"); - return new JSONObject().put("text",result); + return new JSONObject().put("text",AITools.parseJsonOpenAIResponse(res)); } return resultJS; } @@ -102,7 +113,7 @@ private static JSONObject splitRes(String text, JSONObject schemas){ result.put("js", regexJSResult); result.put("html", regexHTMLResult); result.put("text", textResult); - result.put("function", getFunctionCall(regexJSResult)); + result.put(FUNCTION_KEY, getFunctionCall(regexJSResult)); AppLog.info("AI response: "+result.toString(1), null); return result; } @@ -194,4 +205,134 @@ private static boolean hasErrorOrDefaultCodeOrData(String js, String html, JSONO AppLog.info("AI null response: Data are invented", null); return true; } + // SAVE AS CROSS TABLE + public static JSONObject iaConvert(String swagger, String js){ + Grant g = Grant.getSystemAdmin(); + byte[] prompt =g.getExternalObject("AIProcessResource").getResourceContent(Resource.TYPE_OTHER,"CROSSTABLE_PROMPT"); + String stringPrompt = prompt!=null?new String(prompt):""; + JSONArray promptArray = new JSONArray(); + promptArray.put(AITools.getformatedContentByType(stringPrompt, AITools.TYPE_TEXT, true)); + StringBuilder spec = new StringBuilder(); + spec.append("Objects: ```openAPI\n"); + spec.append(swagger); + spec.append("\n```"); + spec.append("\n\nchart.js script ```javascript\n"); + spec.append(js); + spec.append("\n```"); + JSONObject res = AITools.aiCaller(g, spec.toString(), promptArray, false, true, true); + String result = AITools.parseJsonOpenAIResponse(res); + JSONObject jsonRes = AITools.getValidJson(result); + if(Tool.isEmpty(jsonRes)){ + List listResult = AITools.getJSONBlock(result,g); + if(Tool.isEmpty(listResult) ){ + AppLog.error(new PlatformException("Sorry AI do not return interpretable json: \n"+result),g); + }else{ + jsonRes =AITools.getValidJson(listResult.get(1)); + if(Tool.isEmpty(jsonRes)){ + AppLog.error(new PlatformException("Sorry AI do not return interpretable json: \n"+listResult.get(1)),g); + } + } + } + return jsonRes; + } + public static JSONObject createCrossTable(JSONObject def){ + String objName = def.optString("object"); + String ctName = def.optString("name"); + String mldId = def.optString(MODULE_ID); + Grant g = Grant.getSystemAdmin(); + + String ctId = createCt(def,ctName,objName,g); + grantCt(ctId,mldId,g); + String en = def.optString("en"); + String fr = def.optString("fr"); + try { + updateTradField(Grant.getTranslateId("TranslateCrosstab",ctId, Globals.LANG_ENGLISH),en, g); + updateTradField(Grant.getTranslateId("TranslateCrosstab",ctId, Globals.LANG_FRENCH), fr, g); + } catch (Exception e) { + AppLog.error(e, g); + } + int i = 1; + for(Object clm : def.optJSONArray("column")){ + JSONObject axis = (JSONObject) clm; + createAxis(axis,"C",ctId,mldId,i,g); + i++; + } + i = 1; + for(Object row : def.optJSONArray("line")){ + JSONObject axis = (JSONObject) row; + createAxis(axis,"L",ctId,mldId,i,g); + i++; + } + return new JSONObject().put("ctName", ctName).put("objName", objName); + } + private static void grantCt(String ctId,String mldId,Grant g){ + JSONObject perm = new JSONObject(); + perm.put("prm_group_id", GroupDB.getGroupId("AI_BUSINESS")); + perm.put("row_mdl_id", mldId); + perm.put("prm_object", "Crosstab:"+ctId); + AITools.createOrUpdateWithJson("Permission", perm, g); + } + private static String createCt(JSONObject def,String ctName,String objName,Grant g){ + JSONObject ct = new JSONObject(); + ct.put("ctb_name", ctName); + ct.put("ctb_function", FUNCTIONS.optString(def.optString(FUNCTION_KEY,"sum"),"S")); + ct.put("ctb_object_id", ObjectCore.getObjectId(objName)); + ct.put("row_module_id",def.optString(MODULE_ID)); + String mldId = def.optString(MODULE_ID); + AppLog.info("ct module : "+mldId+": "+ModuleDB.getModuleName(mldId), g); + return AITools.createOrUpdateWithJson("Crosstab", ct, g); + } + private static String createAxis(JSONObject def,String type,String ctId,String mldId,int defaultOrder,Grant g){ + String field = def.optString("field"); + if(Tool.isEmpty(field) || "row_id".equals(field)){ + return null; + } + JSONObject axis = new JSONObject(); + AppLog.info("def: "+def.toString(1), g); + axis.put("cax_crosstab_id", ctId); + axis.put("cax_type", type); + String function =FUNCTIONS.optString(def.optString(FUNCTION_KEY,"sum"),""); + if(!Tool.isEmpty(function)){ + axis.put("cax_function", function); + } + axis.put("row_module_id", mldId); + String objFldId = getObjectFieldId(def.optString("object"), field,g); + axis.put("cax_objfield_id", objFldId); + axis.put("cax_order", def.optInt("order",defaultOrder)); + AppLog.info("axis: "+axis.toString(1), g); + return AITools.createOrUpdateWithJson("CrosstabAxis", axis, g); + + } + private static void updateTradField(String tradId,String val,Grant g) throws GetException, UpdateException, ValidateException{ + ObjectDB oTra = g.getTmpObject("Translate"); + synchronized(oTra.getLock()){ + BusinessObjectTool oTraT = oTra.getTool(); + if(!Tool.isEmpty(val) && !Tool.isEmpty(tradId)){ + oTraT.selectForUpdate(tradId); + oTra.setFieldValue("tsl_value", val); + oTraT.validateAndUpdate(); + } + } + + } + private static String getObjectFieldId(String object,String field,Grant g){ + AppLog.info("object: "+object+" field: "+field, g); + ObjectDB obj = g.getTmpObject("ObjectFieldSystem"); + synchronized (obj) { + obj.resetFilters(); + + obj.setFieldFilter("obf_object_id", ObjectCore.getObjectId(object)); + obj.setFieldFilter("obf_field_id", ObjectField.getFieldId(field)); + List res = obj.search(); + AppLog.info("res: "+res.size(), g); + for(String[] r : res){ + AppLog.info("r: "+String.join(", ", r), g); + } + if (!Tool.isEmpty(res)){ + return res.get(0)[obj.getRowIdFieldIndex()]; + } + } + return null; + } + } \ No newline at end of file diff --git a/src/com/simplicite/extobjects/AIBySimplicite/AIMetricsChat.java b/src/com/simplicite/extobjects/AIBySimplicite/AIMetricsChat.java index 2fdcbd7..b0bd3e5 100644 --- a/src/com/simplicite/extobjects/AIBySimplicite/AIMetricsChat.java +++ b/src/com/simplicite/extobjects/AIBySimplicite/AIMetricsChat.java @@ -32,7 +32,8 @@ public Object display(Parameters params) { String swaggerString = new JSONObject().put("components",new JSONObject().put("schemas",swagger.optJSONObject("components").optJSONObject("schemas"))).toString(); swaggerString = swaggerString.replace("\\", "\\\\").replace("\"", "\\\""); AppLog.info("Swagger: "+swaggerString, getGrant()); - return javascript(getName() + ".render(ctn,'"+swaggerString+"');"); + AppLog.info(getName() + ".render(ctn,'"+moduleName+"','"+swaggerString+"');", getGrant()); + return javascript(getName() + ".render(ctn,'"+moduleName+"','"+swaggerString+"');"); } catch (PlatformException e) { AppLog.error(e, g); } diff --git a/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java b/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java index d109a1e..95355f5 100644 --- a/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java +++ b/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java @@ -7,6 +7,7 @@ import com.simplicite.util.exceptions.*; import com.simplicite.util.tools.*; + import org.json.JSONArray; import org.json.JSONObject; @@ -33,11 +34,16 @@ public Object post(Parameters params) throws HTTPException { String objectID = params.getParameter(JSON_OBJECT_ID_KEY); JSONObject req = params.getJSONObject(); if (Tool.isEmpty(type)) type = "default"; + JSONObject swagger = params.has("swagger")?new JSONObject(params.getParameter("swagger")):null; switch (type) { //use switch for future extension case "metrics": - JSONObject swagger = params.has("swagger")?new JSONObject(params.getParameter("swagger")):null; String lang = params.getParameter("lang"); - return AiMetrics.getJavaScriptMetrics(prompt, swagger,lang).toString(1); + return AiMetrics.getJavaScriptMetrics(prompt, swagger,lang).toString(1); + case "saveMetrics": + String mdlName = params.getParameter("moduleName"); + String function = params.getParameter("function"); + String ctx = params.getParameter("ctx"); + return saveMetricsAsCrosstable(ctx,swagger,function,mdlName); default: if(Tool.isEmpty(prompt) && !Tool.isEmpty(req) && req.has(PARAMS_PROMPT_KEY)){ return updateFieldByRequest(req); @@ -152,6 +158,32 @@ private JSONArray optHistoric(String historicString, int histDepth){ } return historic; } + private String saveMetricsAsCrosstable(String ctx,JSONObject swagger, String function, String mdlName){ + + String mldId = ModuleDB.getModuleId(mdlName); + JSONObject jsonRes = AiMetrics.iaConvert(swagger.toString(), function); + if (Tool.isEmpty(jsonRes)) { + return "Error:No valid json response from AI, see logs for more details."; + } + jsonRes.put("mldId", mldId); + JSONObject ct = AiMetrics.createCrossTable(jsonRes); + + return displayCrossTable(ctx,ct.optString("objName"),ct.optString("ctName"),jsonRes.optString("type","bar")); + } + private static String displayCrossTable(String ctx,String objName, String tableName, String type){ + String js ="$ui.displayCrosstab("+ctx+", \""+objName+"\", \""+tableName+"\", {\"options\":{\r\n" + // + " \"zwidth\": \"100%\",\r\n" + // + " \"zheight\": \"30rem\",\r\n" + // + " \"zcaption\": \"no\",\r\n" + // + " \"zcontrol\": \"yes\",\r\n" + // + " \"zstotal\": \"no\",\r\n" + // + " \"ztable\": \"no\",\r\n" + // + " \"zgraph\": \""+type+"\",\r\n" + // + " \"zstcolor\": \"#D9D2E9\"\r\n" + // + "}},null);"; + AppLog.info("JS: "+js,null); + return "javascript:"+js; + } } \ No newline at end of file diff --git a/src/com/simplicite/workflows/AIBySimplicite/AIChartCrossTable.java b/src/com/simplicite/workflows/AIBySimplicite/AIChartCrossTable.java deleted file mode 100644 index 14a5db3..0000000 --- a/src/com/simplicite/workflows/AIBySimplicite/AIChartCrossTable.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.simplicite.workflows.AIBySimplicite; - -import java.util.*; - -import com.simplicite.bpm.*; -import com.simplicite.util.*; -import com.simplicite.util.exceptions.*; -import com.simplicite.util.tools.*; -import com.simplicite.webapp.ObjectContextWeb; - -/** - * Process AIChartCrossTable - */ -public class AIChartCrossTable extends Processus { - private static final long serialVersionUID = 1L; - public String defineChart(Processus p, ActivityFile context, ObjectContextWeb ctx, Grant g){ - return ""; - } - @Override - public void postValidate(ActivityFile context) { - //To do for stape definechart - } - public String display(Processus p, ActivityFile context, ObjectContextWeb ctx, Grant g){ - //todo - String objName ="DemoOrder";//from Data - String tableName = "DemoOrder-TC1";//from Data - String html = "
"; - String js ="$ui.displayCrosstab($(\"#crosstable\"), \""+objName+"\", \""+tableName+"\", {\r\n" + // - " \"zwidth\": \"100%\",\r\n" + // - " \"zheight\": \"30rem\",\r\n" + // - " \"zcaption\": \"no\",\r\n" + // - " \"zcontrol\": \"no\",\r\n" + // - " \"zstotal\": \"no\",\r\n" + // - " \"ztable\": \"no\",\r\n" + // - " \"zgraph\": \"no\",\r\n" + // - " \"zstcolor\": \"#D9D2E9\"\r\n" + // - "},null);"; - return html + HTMLTool.jsBlock(js) ; - } - -} diff --git a/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java b/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java index 0c9d686..0709f68 100644 --- a/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java +++ b/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java @@ -80,7 +80,8 @@ public String chatBot(Processus p, ActivityFile context, ObjectContextWeb ctx, G JSONObject json = objectToJSON(objs,getContext(getActivity(ACTIVITY_SELECT_MODULE)).getDataValue(FIELD, MDL_PREFIX_FIELD)); getContext(getActivity(ACTIVITY_GEN)).setDataFile("Data",EXISTING_OBJECT,getObjsIds(objs,g)); - String contextApp =AITools.aiCaller(g, "you help to describe UML for non technical person","Describes the application defined by this JSON in a graphical way for non-technical users: "+json.toString() , null,false,true).getJSONArray("choices").getJSONObject(0).getJSONObject("message").getString("content"); + JSONObject jsonResponse =AITools.aiCaller(g, "you help to describe UML for non technical person","Describes the application defined by this JSON in a graphical way for non-technical users: "+json.toString() , null,false,true); + String contextApp =AITools.parseJsonOpenAIResponse(jsonResponse); contextApp = formatAnswerAI(contextApp); return getModuleChat(contextApp,g); @@ -234,7 +235,8 @@ private List getJsonAi(String previousStep, Grant g){ if(Tool.isEmpty(prompt)){//for test return new ArrayList<>(); } - String result = AITools.aiCaller(g, "you help to create UML in json for application, your answers are automatically processed in java", prompt, historic,false,true).getJSONArray("choices").getJSONObject(0).getJSONObject("message").getString("content"); + JSONObject jsonResponse = AITools.aiCaller(g, "you help to create UML in json for application, your answers are automatically processed in java", prompt, historic,false,true); + String result = AITools.parseJsonOpenAIResponse(jsonResponse); List listResult = new ArrayList<>(); JSONObject jsonres = AITools.getValidJson(result); From 774267f7c6ab8845c5a46a72f0f4a5064dab2b8a Mon Sep 17 00:00:00 2001 From: "designer (Designer)" <> Date: Wed, 3 Jul 2024 11:02:55 +0200 Subject: [PATCH 08/74] Add Claude API --- AIBySimplicite-openapi-3.0.2.yml | 6 +- AIBySimplicite-swagger-2.0.yml | 6 +- AIBySimplicite.json | 138 ++++++++++++++++ README.md | 1 + module-info.json | 2 +- resources/ObjectExternal/AIExpTool/SCRIPT.js | 4 +- .../ObjectExternal/AIMetricsChat/SCRIPT.js | 3 +- .../commons/AIBySimplicite/AIData.java | 2 +- .../commons/AIBySimplicite/AIField.java | 4 +- .../commons/AIBySimplicite/AIModel.java | 30 ++-- .../commons/AIBySimplicite/AITools.java | 150 +++++++++++++++--- .../commons/AIBySimplicite/AiMetrics.java | 6 +- .../extobjects/AIBySimplicite/AIRestAPI.java | 2 +- .../AIBySimplicite/AIModuleCreate.java | 4 +- 14 files changed, 301 insertions(+), 57 deletions(-) diff --git a/AIBySimplicite-openapi-3.0.2.yml b/AIBySimplicite-openapi-3.0.2.yml index baa4cfc..b1d0969 100644 --- a/AIBySimplicite-openapi-3.0.2.yml +++ b/AIBySimplicite-openapi-3.0.2.yml @@ -130,9 +130,10 @@ components: description: Model type: string enum: + - ANTRHROPIC + - HUGGINGFACE - MISTRAL - AIML - - HUGGINGFACE - OPENAI aiSetConfig: description: Setting @@ -451,9 +452,10 @@ paths: - schema: type: string enum: + - ANTRHROPIC + - HUGGINGFACE - MISTRAL - AIML - - HUGGINGFACE - OPENAI in: query name: aiSetModele diff --git a/AIBySimplicite-swagger-2.0.yml b/AIBySimplicite-swagger-2.0.yml index 8c74ec5..700e036 100644 --- a/AIBySimplicite-swagger-2.0.yml +++ b/AIBySimplicite-swagger-2.0.yml @@ -261,9 +261,10 @@ paths: type: string required: false enum: + - ANTRHROPIC + - HUGGINGFACE - MISTRAL - AIML - - HUGGINGFACE - OPENAI - in: query name: aiSetConfig @@ -433,9 +434,10 @@ definitions: description: Model type: string enum: + - ANTRHROPIC + - HUGGINGFACE - MISTRAL - AIML - - HUGGINGFACE - OPENAI aiSetConfig: description: Setting diff --git a/AIBySimplicite.json b/AIBySimplicite.json index 647a71f..86051c3 100644 --- a/AIBySimplicite.json +++ b/AIBySimplicite.json @@ -313,6 +313,19 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, + { + "object": "ListOfValue", + "userkey": "TEXT~AI_CONFIG_ANTRHROPIC~ANY", + "item": { + "lov_name": "TEXT", + "lov_code": "AI_CONFIG_ANTRHROPIC", + "lov_lang": "ANY", + "lov_value": "{\n \"provider\": \"anthropic\",\n \"model\": \"\",\n \"hist_depth\" : 3,\n \"code_max_token\" : 2000,\n \"default_max_token\":1500,\n \"trigger\":\"\",\n \"ClaudeAPI\":true,\n \"showDataDisclaimer\":true\n}", + "lov_order_by": 1, + "lov_event_id__lev_code": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "ListOfValue", "userkey": "TEXT~AI_CONFIG_HUGGINGFACE~ANY", @@ -482,6 +495,19 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, + { + "object": "ListOfValue", + "userkey": "TEXT~AiSaveAsCrosstableAction~ENU", + "item": { + "lov_name": "TEXT", + "lov_code": "AiSaveAsCrosstableAction", + "lov_lang": "ENU", + "lov_value": "Save as crosstable", + "lov_order_by": 1, + "lov_event_id__lev_code": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "ListOfValue", "userkey": "TEXT~AI_BUTTON_CANCEL~FRA", @@ -611,6 +637,19 @@ "lov_event_id__lev_code": null, "row_module_id__mdl_name": "AIBySimplicite" } + }, + { + "object": "ListOfValue", + "userkey": "TEXT~AiSaveAsCrosstableAction~FRA", + "item": { + "lov_name": "TEXT", + "lov_code": "AiSaveAsCrosstableAction", + "lov_lang": "FRA", + "lov_value": "Enregistrer en tant que tableau croisé", + "lov_order_by": 1, + "lov_event_id__lev_code": null, + "row_module_id__mdl_name": "AIBySimplicite" + } } ] }, @@ -648,6 +687,21 @@ "icon": "img/system/list_of_values", "field": "row_module_id", "list": [ + { + "object": "FieldListCode", + "userkey": "AI_CONF_MODELE~ANTRHROPIC", + "item": { + "lov_list_id__lov_name": "AI_CONF_MODELE", + "lov_code": "ANTRHROPIC", + "lov_order_by": 1, + "lov_label": null, + "row_module_id__mdl_name": "AIBySimplicite", + "lov_color": null, + "lov_color_bg": null, + "lov_icon": null, + "lov_display": ["L"] + } + }, { "object": "FieldListCode", "userkey": "AI_CONF_MODELE~AIML", @@ -820,6 +874,17 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, + { + "object": "FieldListValue", + "userkey": "AI_CONF_MODELE~ANTRHROPIC~ENU", + "item": { + "lov_code_id__lov_list_id__lov_name": "AI_CONF_MODELE", + "lov_code_id__lov_code": "ANTRHROPIC", + "lov_lang": "ENU", + "lov_value": "Antrhropic (claude)", + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "FieldListValue", "userkey": "AI_CONF_MODELE~MISTRAL~FRA", @@ -864,6 +929,17 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, + { + "object": "FieldListValue", + "userkey": "AI_CONF_MODELE~ANTRHROPIC~FRA", + "item": { + "lov_code_id__lov_list_id__lov_name": "AI_CONF_MODELE", + "lov_code_id__lov_code": "ANTRHROPIC", + "lov_lang": "FRA", + "lov_value": "Antrhropic (claude)", + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "FieldListValue", "userkey": "AI_EX_TYPE~OTHER~ENU", @@ -2379,6 +2455,34 @@ "act_queue_id__acq_type": null } }, + { + "object": "Action", + "userkey": "AiSaveAsCrosstable", + "item": { + "act_name": "AiSaveAsCrosstable", + "act_type": "H", + "act_async": "0", + "act_job_depth": null, + "act_method": null, + "act_script": null, + "act_url": "saveAsCrosstable();", + "act_confirm": false, + "act_confirm_expr": null, + "act_confirm_ui": null, + "act_plus": false, + "act_comment": null, + "row_module_id__mdl_name": "AIBySimplicite", + "act_exec": "NUL", + "act_count": null, + "act_order": null, + "act_color": null, + "act_color_bg": null, + "act_image": null, + "act_group_id__acg_name": null, + "act_queue_id__acq_name": null, + "act_queue_id__acq_type": null + } + }, { "object": "Action", "userkey": "CompleteModule", @@ -6175,6 +6279,40 @@ "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } + }, + { + "object": "TranslateAction", + "userkey": "Action(AiSaveAsCrosstable)~ENU", + "item": { + "tsl_object": { + "item": {"act_name": "AiSaveAsCrosstable"}, + "icon": "img/system/action_btn", + "label": "Action", + "userkeylabel": "AiSaveAsCrosstable", + "object": "Action" + }, + "tsl_lang": "ENU", + "tsl_value": "Save as crosstable", + "tsl_simplehelp": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "TranslateAction", + "userkey": "Action(AiSaveAsCrosstable)~FRA", + "item": { + "tsl_object": { + "item": {"act_name": "AiSaveAsCrosstable"}, + "icon": "img/system/action_btn", + "label": "Action", + "userkeylabel": "AiSaveAsCrosstable", + "object": "Action" + }, + "tsl_lang": "FRA", + "tsl_value": "Enregistrer en tant que tableau croisé", + "tsl_simplehelp": null, + "row_module_id__mdl_name": "AIBySimplicite" + } } ] }, diff --git a/README.md b/README.md index 952d421..50befa6 100644 --- a/README.md +++ b/README.md @@ -117,6 +117,7 @@ In a `view` add an `external page` of source `External object`: `AIMetricsChat?m ### Lists * `AI_CONF_MODELE` + - `ANTRHROPIC` - `AIML` ai/ml - `HUGGINGFACE` huggingface - `MISTRAL` Mistral diff --git a/module-info.json b/module-info.json index 950654e..237ed0c 100644 --- a/module-info.json +++ b/module-info.json @@ -1,5 +1,5 @@ { - "date": "2024-07-02 10:20:11", + "date": "2024-07-03 11:00:38", "name": "AIBySimplicite", "format": "json", "files": ["AIBySimplicite.json"], diff --git a/resources/ObjectExternal/AIExpTool/SCRIPT.js b/resources/ObjectExternal/AIExpTool/SCRIPT.js index e023529..8b475f0 100644 --- a/resources/ObjectExternal/AIExpTool/SCRIPT.js +++ b/resources/ObjectExternal/AIExpTool/SCRIPT.js @@ -1,6 +1,6 @@ function getValueFormat(){ - var field=$("#fields-select").val(); - var value="[VALUE:"+field+"]"; + let field=$("#fields-select").val(); + let value="[VALUE:"+field+"]"; $('#result').val(value); } \ No newline at end of file diff --git a/resources/ObjectExternal/AIMetricsChat/SCRIPT.js b/resources/ObjectExternal/AIMetricsChat/SCRIPT.js index 4ab3c1d..bfb1d62 100644 --- a/resources/ObjectExternal/AIMetricsChat/SCRIPT.js +++ b/resources/ObjectExternal/AIMetricsChat/SCRIPT.js @@ -10,13 +10,14 @@ var AIMetricsChat = AIMetricsChat || (function() { function render(params,module,s) { // set button text moduleName = module; - $("#work .actions").append(''); console.log("AIMetricsChat render: "+moduleName); $('#metrics_user_text').click(function() { showWarn();}); app.getTexts(function(textes){ + let actLabel = textes?.AiSaveAsCrosstableAction||"Save as crosstable"; let sendText = textes?.AI_BUTTON_SEND ||"Send"; let cancelText = textes?.AI_BUTTON_CANCEL || "Cancel"; let length = Math.max(sendText.length, cancelText.length); + $("#work .actions").prepend(''); $('.chat-button').css('min-width', length + 'em'); $('.user-message').css('width', 'calc(100% - ' + (length + 1) + 'em)'); $('#metrics_send_button').text(sendText); diff --git a/src/com/simplicite/commons/AIBySimplicite/AIData.java b/src/com/simplicite/commons/AIBySimplicite/AIData.java index 8b12660..943f79c 100644 --- a/src/com/simplicite/commons/AIBySimplicite/AIData.java +++ b/src/com/simplicite/commons/AIBySimplicite/AIData.java @@ -260,7 +260,7 @@ private static JSONObject getJsonModel(String[] ids, Grant g){ private static JSONObject callIADataOnModule(String[] ids, Grant g) throws PlatformException{ JSONObject data = getJsonModel(ids, g); JSONObject jsonResponse = AITools.aiCaller(g, /* "module uml: "+json */"", " generates consistent data in json according to the model: ```json "+data.toString(1)+"``` with at least 2 entries per class",false,true); - String response = AITools.parseJsonOpenAIResponse(jsonResponse); + String response = AITools.parseJsonResponse(jsonResponse); JSONObject json = AITools.getValidJson(response); if(Tool.isEmpty(json)){ diff --git a/src/com/simplicite/commons/AIBySimplicite/AIField.java b/src/com/simplicite/commons/AIBySimplicite/AIField.java index dcf940d..7ffb834 100644 --- a/src/com/simplicite/commons/AIBySimplicite/AIField.java +++ b/src/com/simplicite/commons/AIBySimplicite/AIField.java @@ -155,7 +155,7 @@ private static List validateNotepadAIFieldInternal(ObjectField fld, Obje fld.addNotepad(g.getLogin(), sentence); fld.setOldValue(fld.getValue()); - fld.addNotepad("ChatAI",AITools.parseJsonOpenAIResponse(result)); + fld.addNotepad("ChatAI",AITools.parseJsonResponse(result)); } return msgs; } @@ -205,7 +205,7 @@ public static List validateLongStringAIField(ObjectField fld,ObjectDB ob msgs.add(Message.formatError(AI_ERROR_RETURN,result.getString("code")+": "+result.getString(JSON_ERROR_KEY),"demoPrdDescription")); return msgs; } - fld.setValue(AITools.parseJsonOpenAIResponse(result)); + fld.setValue(AITools.parseJsonResponse(result)); } } diff --git a/src/com/simplicite/commons/AIBySimplicite/AIModel.java b/src/com/simplicite/commons/AIBySimplicite/AIModel.java index ca2e41d..4abb585 100644 --- a/src/com/simplicite/commons/AIBySimplicite/AIModel.java +++ b/src/com/simplicite/commons/AIBySimplicite/AIModel.java @@ -53,13 +53,13 @@ public class AIModel implements java.io.Serializable { private static final String HEXA_BLACK ="#303030"; private static final String HEXA_WHITE ="#FFFFFF"; - private static class enumFieldStyle { + private static class EnumFieldStyle { private String bg; //background color private String hexa; //hexadecimal color private String color; //text color private String icon; //icon name - public enumFieldStyle(String bg, String hexa,String color, String icon) { + public EnumFieldStyle(String bg, String hexa,String color, String icon) { this.bg = bg; this.hexa = hexa; this.color = color; @@ -122,7 +122,7 @@ public DataMapObject() { private static List shortListIcon; private static List listIcon; private static List linkType; - private static HashMap enumColors; + private static HashMap enumColors; static { typeTrad = new HashMap<>(); typeTrad.put("Short text < 4000", ObjectField.TYPE_STRING); @@ -150,17 +150,17 @@ public DataMapObject() { typeTrad.put("Color", ObjectField.TYPE_COLOR); typeTrad.put("Geographical coordinates", ObjectField.TYPE_GEOCOORDS); enumColors = new HashMap<>(); - enumColors.put("red", new enumFieldStyle("redbg", "#D9534F", HEXA_WHITE, "btn_red")); - enumColors.put("orange", new enumFieldStyle("orangebg", "#F0AD4E", HEXA_WHITE, "btn_orange")); - enumColors.put("pink", new enumFieldStyle("pinkbg", "#FF8EC1", HEXA_WHITE, "btn_pink")); - enumColors.put("green", new enumFieldStyle("greenbg", "#5CB85C", HEXA_WHITE, "btn_green")); - enumColors.put("blue", new enumFieldStyle("bluebg", "#5BC0DE", HEXA_WHITE, "btn_blue")); - enumColors.put("white", new enumFieldStyle("whitebg", HEXA_WHITE, HEXA_BLACK, "btn_white")); - enumColors.put("black", new enumFieldStyle("blackbg", HEXA_BLACK, HEXA_WHITE, "btn_black")); - enumColors.put("yellow", new enumFieldStyle("yellowbg", "#FFEF8D", HEXA_BLACK, "btn_yellow")); - enumColors.put("purple", new enumFieldStyle("purplebg", "#8C6AC4", HEXA_WHITE, "btn_purple")); - enumColors.put("brown", new enumFieldStyle("brownbg", "#CE8E67", HEXA_WHITE, "btn_brown")); - enumColors.put("grey", new enumFieldStyle("greybg", "#D0D0D0", HEXA_WHITE, "btn_grey")); + enumColors.put("red", new EnumFieldStyle("redbg", "#D9534F", HEXA_WHITE, "btn_red")); + enumColors.put("orange", new EnumFieldStyle("orangebg", "#F0AD4E", HEXA_WHITE, "btn_orange")); + enumColors.put("pink", new EnumFieldStyle("pinkbg", "#FF8EC1", HEXA_WHITE, "btn_pink")); + enumColors.put("green", new EnumFieldStyle("greenbg", "#5CB85C", HEXA_WHITE, "btn_green")); + enumColors.put("blue", new EnumFieldStyle("bluebg", "#5BC0DE", HEXA_WHITE, "btn_blue")); + enumColors.put("white", new EnumFieldStyle("whitebg", HEXA_WHITE, HEXA_BLACK, "btn_white")); + enumColors.put("black", new EnumFieldStyle("blackbg", HEXA_BLACK, HEXA_WHITE, "btn_black")); + enumColors.put("yellow", new EnumFieldStyle("yellowbg", "#FFEF8D", HEXA_BLACK, "btn_yellow")); + enumColors.put("purple", new EnumFieldStyle("purplebg", "#8C6AC4", HEXA_WHITE, "btn_purple")); + enumColors.put("brown", new EnumFieldStyle("brownbg", "#CE8E67", HEXA_WHITE, "btn_brown")); + enumColors.put("grey", new EnumFieldStyle("greybg", "#D0D0D0", HEXA_WHITE, "btn_grey")); shortListIcon = Arrays.asList("star", "book", "arrow-up", "arrow-down", "clock", "envelope", "search", "folder", "list", "phone", "cloud", "key", "file", "calendar"); listIcon = Arrays.asList("1-circle-fill","1-circle","1-square-fill","1-square","123","2-circle-fill","2-circle","2-square-fill","2-square","3-circle-fill", "3-circle","3-square-fill","3-square","4-circle-fill","4-circle","4-square-fill","4-square","5-circle-fill","5-circle","5-square-fill", @@ -931,7 +931,7 @@ private static void completeList(String moduleId,String listId,JSONArray values, enumCodeFields.put(MODULE_ID_FIELD,moduleId); if (!Tool.isEmpty(color)){ - enumFieldStyle style = enumColors.get(color); + EnumFieldStyle style = enumColors.get(color); if(!Tool.isEmpty(style)){ enumCodeFields.put("lov_color_bg", style.hexa); enumCodeFields.put("lov_icon", style.icon); diff --git a/src/com/simplicite/commons/AIBySimplicite/AITools.java b/src/com/simplicite/commons/AIBySimplicite/AITools.java index 4a87e57..025ceb6 100644 --- a/src/com/simplicite/commons/AIBySimplicite/AITools.java +++ b/src/com/simplicite/commons/AIBySimplicite/AITools.java @@ -29,10 +29,18 @@ public class AITools implements java.io.Serializable { private static final long serialVersionUID = 1L; private static final JSONObject AI_API_PARAM = Grant.getSystemAdmin().getJSONObjectParameter("AI_API_PARAM"); + private static final String LLM = getLLM(); + private static final String CLAUDE_LLM ="CLAUDE"; + private static final String HUGGINGFACE_LLM ="HUGGINGFACE"; private static final String CONTENT_KEY = "content"; private static final String MESSAGE_KEY = "message"; + private static final String MESSAGES_KEY = "messages"; + private static final String USAGE_KEY = "usage"; + private static final String MAX_TOKEN_PARAM_KEY = "default_max_token"; private static final String ASSISTANT_ROLE="assistant"; + private static final String SYSTEM_ROLE= "system"; + private static final String MAX_TOKEN = "max_tokens"; public static final String TYPE_TEXT = "text"; public static final String TYPE_IMAGE_URL = "image_url"; @@ -41,7 +49,13 @@ public class AITools implements java.io.Serializable { private static final String TRUSTED = "trusted"; private static final String SWAGGER_COMPONENTS="components"; private static final String SWAGGER_SHEMAS="schemas"; + + private static String getLLM(){ + if(AI_API_PARAM.optBoolean("ClaudeAPI", false)) return CLAUDE_LLM; + if(AI_API_PARAM.optBoolean("HuggingAPI", false)) return HUGGINGFACE_LLM; + return "GPT"; + } /** * Function to format the call to chatAI API. * Need the AI_API_KEY parameter set up with your key. @@ -74,14 +88,14 @@ private static String aiCaller(Grant g, String specialisation, Object prompt ,JS private static String aiCaller(Grant g, String specialisation, JSONArray prompt ,JSONArray historic, boolean secure,boolean isSafeSpe, int maxToken){ specialisation = removeAcent(specialisation); if(!isSafeSpe) specialisation = JSONObject.quote(normalize(specialisation,true)); - + if("\"\"".equals(specialisation)) specialisation = ""; prompt = parsedPrompts(prompt,secure); int histDepth = AI_API_PARAM.getInt("hist_depth"); String apiKey = Grant.getSystemAdmin().getParameter("AI_API_KEY"); String apiUrl = Grant.getSystemAdmin().getParameter("AI_API_URL"); String model =AI_API_PARAM.optString("model",""); - String projet = AI_API_PARAM.optString("OpenAI-Project",""); - String org = AI_API_PARAM.optString("OpenAI-Organization",""); + boolean isClaudeAPI = CLAUDE_LLM.equals(LLM); + if("/".equals(apiUrl)){ AppLog.info("AI_API_URL not set", g); return ""; @@ -91,15 +105,11 @@ private static String aiCaller(Grant g, String specialisation, JSONArray prompt try { URI url = new URI(apiUrl); HttpURLConnection connection = (HttpURLConnection) url.toURL().openConnection(); - connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", "application/json"); - connection.setRequestProperty("Authorization", "Bearer " + apiKey); - if(!Tool.isEmpty(projet) && !Tool.isEmpty(org)){ - connection.setRequestProperty("OpenAI-Project", projet); - connection.setRequestProperty("OpenAI-Organization", org); - } connection.setDoOutput(true); + addSpecificHeaders(connection,apiKey); + // format data JSONObject postData = new JSONObject(); if(maxToken>0) @@ -109,18 +119,21 @@ private static String aiCaller(Grant g, String specialisation, JSONArray prompt JSONArray messages = new JSONArray(); // format specialisation. if(!Tool.isEmpty(specialisation)) - messages.put(new JSONObject().put("role","system").put(CONTENT_KEY,specialisation)); + messages.put(new JSONObject().put("role",SYSTEM_ROLE).put(CONTENT_KEY,specialisation)); // add historic (restrict to Param histDepth the number of messages ) if(!Tool.isEmpty(historic)){ messages.putAll(getCleanHistoric(historic,histDepth)); } messages.put(new JSONObject().put("role","user").put(CONTENT_KEY,prompt)); - postData.put("messages", messages); + postData.put(MESSAGES_KEY, messages); AppLog.info("AI API call :"+postData.toString(1),g); - if(AI_API_PARAM.optBoolean("huggingAPI", false)){ + if(HUGGINGFACE_LLM.equals(LLM)){ postData = getHuggingFormatData(postData); } + if(isClaudeAPI){ + postData = getClaudeFormatData(postData); + } AppLog.info("AI API call :"+postData.toString(),g); try (DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream())) { outputStream.writeBytes(postData.toString()); @@ -144,6 +157,76 @@ private static String aiCaller(Grant g, String specialisation, JSONArray prompt } return ""; + } + private static void addSpecificHeaders(HttpURLConnection connection,String apiKey){ + String projet = AI_API_PARAM.optString("OpenAI-Project",""); + String org = AI_API_PARAM.optString("OpenAI-Organization",""); + switch (LLM) { + case CLAUDE_LLM: + connection.setRequestProperty("x-api-key",apiKey); + connection.setRequestProperty("anthropic-version","2023-06-01"); + break; + case HUGGINGFACE_LLM: + connection.setRequestProperty("Authorization", "Bearer " + apiKey); + break; + default: + connection.setRequestProperty("Authorization", "Bearer " + apiKey); + if(!Tool.isEmpty(projet) && !Tool.isEmpty(org)){ + connection.setRequestProperty("OpenAI-Project", projet); + connection.setRequestProperty("OpenAI-Organization", org); + } + break; + } + } + private static JSONObject getClaudeFormatData(JSONObject postData){ + JSONArray messages = postData.getJSONArray(MESSAGES_KEY); + int toremove = -1; + + for (int i = 0; i < messages.length(); i++) { + JSONObject message = messages.getJSONObject(i); + // Perform your condition here + if (SYSTEM_ROLE.equals(message.optString("role"))) { + String content = message.optString(CONTENT_KEY); + postData.put(SYSTEM_ROLE, content); + toremove = i; + AppLog.info("AI API system to claude :"+content,Grant.getSystemAdmin()); + + }else if("user".equals(message.optString("role")) && !Tool.isEmpty(message.optString(CONTENT_KEY))){// to clomplete + JSONArray contentArray = message.optJSONArray(CONTENT_KEY); + for(int j = 0; j < contentArray.length(); j++){ + JSONObject contentJson = contentArray.getJSONObject(j); + if(TYPE_IMAGE_URL.equals(contentJson.optString("type"))){ + refactorImageForClaudeAPI(contentJson); + } + } + } + } + if(toremove>=0){ + messages.remove(toremove); + } + if(!postData.has(MAX_TOKEN)){ + postData.put(MAX_TOKEN,AI_API_PARAM.getInt(MAX_TOKEN_PARAM_KEY)); + } + return postData; + } + private static void refactorImageForClaudeAPI(JSONObject contentJson){ + contentJson.put("type","image"); + String url = contentJson.optJSONObject(TYPE_IMAGE_URL).optString("url"); + contentJson.remove(TYPE_IMAGE_URL); + JSONObject source = new JSONObject(); + String regexUrl = "data:([\\w\\/]*);(\\w*),(.*)"; + Pattern pattern = Pattern.compile(regexUrl); + Matcher matcher = pattern.matcher(url); + if(matcher.matches()){ + source.put("type",matcher.group(2)); + source.put("media_type",matcher.group(1)); + source.put("data",matcher.group(3)); + + } + if(!Tool.isEmpty(source)){ + contentJson.put("source",source); + } + } private static JSONObject getHuggingFormatData(JSONObject postData){ JSONObject newPostData = new JSONObject(); @@ -151,7 +234,7 @@ private static JSONObject getHuggingFormatData(JSONObject postData){ JSONObject params = new JSONObject(); if(postData.has(MAX_TOKEN)) params.put("max_length",postData.getInt(MAX_TOKEN)); - JSONArray messages = postData.getJSONArray("messages"); + JSONArray messages = postData.getJSONArray(MESSAGES_KEY); for(int i = 0; i < messages.length(); i++){ JSONObject message = messages.getJSONObject(i); String role = message.optString("role","user"); @@ -161,7 +244,7 @@ private static JSONObject getHuggingFormatData(JSONObject postData){ AppLog.info("AI API assistant :"+content,Grant.getSystemAdmin()); dialogBuilder.append("bot: "+content+"\n"); break; - case "system": + case SYSTEM_ROLE: AppLog.info("AI API system :"+content,Grant.getSystemAdmin()); if(Tool.isEmpty(content) || "\"\"".equals(content)) break; dialogBuilder.append("context: "+ content+"\n"); @@ -271,15 +354,10 @@ public static String readResponse(HttpURLConnection connection,Grant g){ connection.disconnect(); String res = response.toString(); AppLog.info("AI API response :"+res,g); - JSONArray resArray = optJSONArray(res); - AppLog.info(resArray.toString(1), g); - if(Tool.isEmpty(resArray)){ - AppLog.info("AI used token :"+new JSONObject(res).optJSONObject("usage").toString(1), g); - - return res; + JSONObject resJson = refactorAiResponseInGPT(res); + if(resJson.has(USAGE_KEY )){ + AppLog.info("AI used token :"+new JSONObject(res).optJSONObject(USAGE_KEY).toString(1), g); } - String resultText = resArray.optJSONObject(0).getString("generated_text"); - JSONObject resJson =new JSONObject().put("choices",new JSONArray().put(new JSONObject().put(MESSAGE_KEY,new JSONObject().put(CONTENT_KEY,resultText)))); return resJson.toString(); } catch (IOException e) { AppLog.error(e,g); @@ -768,8 +846,30 @@ private static JSONObject getFKFilters(String objName,JSONObject fields, Grant g return filters; } - public static String parseJsonOpenAIResponse(JSONObject res){ - return res.getJSONArray("choices").getJSONObject(0).getJSONObject(MESSAGE_KEY).getString(CONTENT_KEY); + private static JSONObject refactorAiResponseInGPT(String res){ + String resultText = ""; + switch (LLM) { + case "HUUGINGFACE": + JSONArray resArray = optJSONArray(res); + resultText = resArray.optJSONObject(0).getString("generated_text"); + return formatJsonOpenAIFormat(resultText); + case CLAUDE_LLM: + JSONObject resJson = new JSONObject(res); + resultText = resJson.getJSONArray(CONTENT_KEY).getJSONObject(0).getString("text"); + JSONObject gptFormat = formatJsonOpenAIFormat(resultText); + gptFormat.put(USAGE_KEY,resJson.optJSONObject(USAGE_KEY)); + return gptFormat; + + default: + return new JSONObject(res); + } } - + public static String parseJsonResponse(JSONObject res){ + return res.getJSONArray("choices").getJSONObject(0).getJSONObject(MESSAGE_KEY).getString(CONTENT_KEY); + } + public static JSONObject formatJsonOpenAIFormat(String result){ + return new JSONObject().put("choices",new JSONArray().put(new JSONObject().put(MESSAGE_KEY,new JSONObject().put(CONTENT_KEY,result)))); + } + + } \ No newline at end of file diff --git a/src/com/simplicite/commons/AIBySimplicite/AiMetrics.java b/src/com/simplicite/commons/AIBySimplicite/AiMetrics.java index b59088d..aed867d 100644 --- a/src/com/simplicite/commons/AIBySimplicite/AiMetrics.java +++ b/src/com/simplicite/commons/AIBySimplicite/AiMetrics.java @@ -56,11 +56,11 @@ public static JSONObject getJavaScriptMetrics(String prompt, JSONObject swagger arrayPrompts.put(AITools.getformatedContentByType(EXEMPLE, AITools.TYPE_TEXT, true)); arrayPrompts.put(AITools.getformatedContentByType(prompt, AITools.TYPE_TEXT,true)); JSONObject res = AITools.aiCaller(null, "\n ```OpenAPI "+swagger+"```",arrayPrompts,false,true,true); - JSONObject resultJS = splitRes(AITools.parseJsonOpenAIResponse(res),swagger.optJSONObject("components").getJSONObject("schemas")); + JSONObject resultJS = splitRes(AITools.parseJsonResponse(res),swagger.optJSONObject("components").getJSONObject("schemas")); AppLog.info("AI response: "+resultJS.toString(1), null); if (resultJS.has("error")) { res = AITools.aiCaller(null, "You help formulate a prompt for an graph-generating AI. You're called if the ia doesn't understand. ",prompt,false,true); - return new JSONObject().put("text",AITools.parseJsonOpenAIResponse(res)); + return new JSONObject().put("text",AITools.parseJsonResponse(res)); } return resultJS; } @@ -220,7 +220,7 @@ public static JSONObject iaConvert(String swagger, String js){ spec.append(js); spec.append("\n```"); JSONObject res = AITools.aiCaller(g, spec.toString(), promptArray, false, true, true); - String result = AITools.parseJsonOpenAIResponse(res); + String result = AITools.parseJsonResponse(res); JSONObject jsonRes = AITools.getValidJson(result); if(Tool.isEmpty(jsonRes)){ List listResult = AITools.getJSONBlock(result,g); diff --git a/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java b/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java index 95355f5..fdb6533 100644 --- a/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java +++ b/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java @@ -7,7 +7,6 @@ import com.simplicite.util.exceptions.*; import com.simplicite.util.tools.*; - import org.json.JSONArray; import org.json.JSONObject; @@ -57,6 +56,7 @@ public Object post(Parameters params) throws HTTPException { } } catch (Exception e) { + AppLog.error(null, e, getGrant()); return error(e); } } diff --git a/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java b/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java index 0709f68..a9e8a57 100644 --- a/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java +++ b/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java @@ -81,7 +81,7 @@ public String chatBot(Processus p, ActivityFile context, ObjectContextWeb ctx, G getContext(getActivity(ACTIVITY_GEN)).setDataFile("Data",EXISTING_OBJECT,getObjsIds(objs,g)); JSONObject jsonResponse =AITools.aiCaller(g, "you help to describe UML for non technical person","Describes the application defined by this JSON in a graphical way for non-technical users: "+json.toString() , null,false,true); - String contextApp =AITools.parseJsonOpenAIResponse(jsonResponse); + String contextApp =AITools.parseJsonResponse(jsonResponse); contextApp = formatAnswerAI(contextApp); return getModuleChat(contextApp,g); @@ -236,7 +236,7 @@ private List getJsonAi(String previousStep, Grant g){ return new ArrayList<>(); } JSONObject jsonResponse = AITools.aiCaller(g, "you help to create UML in json for application, your answers are automatically processed in java", prompt, historic,false,true); - String result = AITools.parseJsonOpenAIResponse(jsonResponse); + String result = AITools.parseJsonResponse(jsonResponse); List listResult = new ArrayList<>(); JSONObject jsonres = AITools.getValidJson(result); From b12ffea8a13829596f699038dd762789b6283ad8 Mon Sep 17 00:00:00 2001 From: "designer (Designer)" <> Date: Wed, 3 Jul 2024 11:28:28 +0200 Subject: [PATCH 09/74] Do not show incomplete development --- AIBySimplicite-openapi-3.0.2.yml | 8 +- AIBySimplicite-swagger-2.0.yml | 8 +- AIBySimplicite.json | 205 +----------------- module-info.json | 4 +- pom.xml | 4 +- .../ObjectExternal/AIMetricsChat/SCRIPT.js | 4 +- 6 files changed, 15 insertions(+), 218 deletions(-) diff --git a/AIBySimplicite-openapi-3.0.2.yml b/AIBySimplicite-openapi-3.0.2.yml index b1d0969..c50a72b 100644 --- a/AIBySimplicite-openapi-3.0.2.yml +++ b/AIBySimplicite-openapi-3.0.2.yml @@ -2,7 +2,7 @@ # / __(_)_ __ _ __| (_)__(_) |_ /_/ # \__ \ | ' \| '_ \ | / _| | _/ -_) # |___/_|_|_|_| .__/_|_\__|_|\__\___| -# |_| Module: AIBySimplicite 0.11 +# |_| Module: AIBySimplicite 0.12 components: schemas: Error404: @@ -131,9 +131,9 @@ components: type: string enum: - ANTRHROPIC + - AIML - HUGGINGFACE - MISTRAL - - AIML - OPENAI aiSetConfig: description: Setting @@ -453,9 +453,9 @@ paths: type: string enum: - ANTRHROPIC + - AIML - HUGGINGFACE - MISTRAL - - AIML - OPENAI in: query name: aiSetModele @@ -511,7 +511,7 @@ info: email: contact@simplicitesoftware.com description: API for module AIBySimplicite title: AIBySimplicite - version: '0.11' + version: '0.12' tags: - name: AiSettings description: Configuring the wizard diff --git a/AIBySimplicite-swagger-2.0.yml b/AIBySimplicite-swagger-2.0.yml index 700e036..b1ddb37 100644 --- a/AIBySimplicite-swagger-2.0.yml +++ b/AIBySimplicite-swagger-2.0.yml @@ -2,7 +2,7 @@ # / __(_)_ __ _ __| (_)__(_) |_ /_/ # \__ \ | ' \| '_ \ | / _| | _/ -_) # |___/_|_|_|_| .__/_|_\__|_|\__\___| -# |_| Module: AIBySimplicite 0.11 +# |_| Module: AIBySimplicite 0.12 basePath: /api paths: /login: @@ -262,9 +262,9 @@ paths: required: false enum: - ANTRHROPIC + - AIML - HUGGINGFACE - MISTRAL - - AIML - OPENAI - in: query name: aiSetConfig @@ -435,9 +435,9 @@ definitions: type: string enum: - ANTRHROPIC + - AIML - HUGGINGFACE - MISTRAL - - AIML - OPENAI aiSetConfig: description: Setting @@ -456,7 +456,7 @@ info: email: contact@simplicitesoftware.com description: API for module AIBySimplicite title: AIBySimplicite - version: '0.11' + version: '0.12' tags: - name: AiSettings description: Configuring the wizard diff --git a/AIBySimplicite.json b/AIBySimplicite.json index 86051c3..e3eda68 100644 --- a/AIBySimplicite.json +++ b/AIBySimplicite.json @@ -4,7 +4,7 @@ "item": { "mdl_name": "AIBySimplicite", "mdl_prefix": "ai", - "mdl_version": "0.11", + "mdl_version": "0.12", "mdl_type": "T", "mdl_icon": null, "mdl_url": "{\n \"origin\": {\"uri\": \"https://github.com/simplicitesoftware/module_ai.git\"},\n \"type\": \"git\",\n \"branch\": \"6\"\n}", @@ -495,19 +495,6 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, - { - "object": "ListOfValue", - "userkey": "TEXT~AiSaveAsCrosstableAction~ENU", - "item": { - "lov_name": "TEXT", - "lov_code": "AiSaveAsCrosstableAction", - "lov_lang": "ENU", - "lov_value": "Save as crosstable", - "lov_order_by": 1, - "lov_event_id__lev_code": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, { "object": "ListOfValue", "userkey": "TEXT~AI_BUTTON_CANCEL~FRA", @@ -637,19 +624,6 @@ "lov_event_id__lev_code": null, "row_module_id__mdl_name": "AIBySimplicite" } - }, - { - "object": "ListOfValue", - "userkey": "TEXT~AiSaveAsCrosstableAction~FRA", - "item": { - "lov_name": "TEXT", - "lov_code": "AiSaveAsCrosstableAction", - "lov_lang": "FRA", - "lov_value": "Enregistrer en tant que tableau croisé", - "lov_order_by": 1, - "lov_event_id__lev_code": null, - "row_module_id__mdl_name": "AIBySimplicite" - } } ] }, @@ -687,51 +661,6 @@ "icon": "img/system/list_of_values", "field": "row_module_id", "list": [ - { - "object": "FieldListCode", - "userkey": "AI_CONF_MODELE~ANTRHROPIC", - "item": { - "lov_list_id__lov_name": "AI_CONF_MODELE", - "lov_code": "ANTRHROPIC", - "lov_order_by": 1, - "lov_label": null, - "row_module_id__mdl_name": "AIBySimplicite", - "lov_color": null, - "lov_color_bg": null, - "lov_icon": null, - "lov_display": ["L"] - } - }, - { - "object": "FieldListCode", - "userkey": "AI_CONF_MODELE~AIML", - "item": { - "lov_list_id__lov_name": "AI_CONF_MODELE", - "lov_code": "AIML", - "lov_order_by": 10, - "lov_label": "ai/ml", - "row_module_id__mdl_name": "AIBySimplicite", - "lov_color": null, - "lov_color_bg": null, - "lov_icon": null, - "lov_display": ["L"] - } - }, - { - "object": "FieldListCode", - "userkey": "AI_CONF_MODELE~HUGGINGFACE", - "item": { - "lov_list_id__lov_name": "AI_CONF_MODELE", - "lov_code": "HUGGINGFACE", - "lov_order_by": 10, - "lov_label": "huggingface", - "row_module_id__mdl_name": "AIBySimplicite", - "lov_color": null, - "lov_color_bg": null, - "lov_icon": null, - "lov_display": ["L"] - } - }, { "object": "FieldListCode", "userkey": "AI_CONF_MODELE~MISTRAL", @@ -4913,46 +4842,6 @@ } ] }, - { - "object": "Crosstab", - "label": "Pivot tables", - "icon": "img/system/pivot_table", - "field": "row_module_id", - "list": [ - { - "object": "Crosstab", - "userkey": "OrderStatusChart", - "item": { - "ctb_name": "OrderStatusChart", - "ctb_object_id__obo_name": "DemoOrder", - "ctb_function": "S", - "ctb_visible": "1", - "ctb_fixedcolors": true, - "ctb_precision": null, - "ctb_subtotal": false, - "ctb_totalcolor": null, - "ctb_caption": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "Crosstab", - "userkey": "OrderStatusCrossTab", - "item": { - "ctb_name": "OrderStatusCrossTab", - "ctb_object_id__obo_name": "DemoOrder", - "ctb_function": "S", - "ctb_visible": "1", - "ctb_fixedcolors": true, - "ctb_precision": null, - "ctb_subtotal": false, - "ctb_totalcolor": null, - "ctb_caption": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - } - ] - }, { "object": "Map", "label": "Main menu", @@ -6316,78 +6205,6 @@ } ] }, - { - "object": "TranslateCrosstab", - "label": "Pivot table translation", - "icon": "img/system/translation", - "field": "row_module_id", - "list": [ - { - "object": "TranslateCrosstab", - "userkey": "Crosstab(OrderStatusCrossTab)~ENU", - "item": { - "tsl_object": { - "item": {"ctb_name": "OrderStatusCrossTab"}, - "icon": "img/system/pivot_table", - "label": "Pivot table", - "userkeylabel": "OrderStatusCrossTab", - "object": "Crosstab" - }, - "tsl_lang": "ENU", - "tsl_value": "Order status cross tab", - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "TranslateCrosstab", - "userkey": "Crosstab(OrderStatusCrossTab)~FRA", - "item": { - "tsl_object": { - "item": {"ctb_name": "OrderStatusCrossTab"}, - "icon": "img/system/pivot_table", - "label": "Pivot table", - "userkeylabel": "OrderStatusCrossTab", - "object": "Crosstab" - }, - "tsl_lang": "FRA", - "tsl_value": "Order status cross tab", - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "TranslateCrosstab", - "userkey": "Crosstab(OrderStatusChart)~ENU", - "item": { - "tsl_object": { - "item": {"ctb_name": "OrderStatusChart"}, - "icon": "img/system/pivot_table", - "label": "Pivot table", - "userkeylabel": "OrderStatusChart", - "object": "Crosstab" - }, - "tsl_lang": "ENU", - "tsl_value": "Order status chart", - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "TranslateCrosstab", - "userkey": "Crosstab(OrderStatusChart)~FRA", - "item": { - "tsl_object": { - "item": {"ctb_name": "OrderStatusChart"}, - "icon": "img/system/pivot_table", - "label": "Pivot table", - "userkeylabel": "OrderStatusChart", - "object": "Crosstab" - }, - "tsl_lang": "FRA", - "tsl_value": "Order status chart", - "row_module_id__mdl_name": "AIBySimplicite" - } - } - ] - }, { "object": "TranslateField", "label": "Field translation", @@ -8287,26 +8104,6 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, - { - "object": "Permission", - "userkey": "AI_BUSINESS~Crosstab(OrderStatusChart)~", - "item": { - "prm_group_id__grp_name": "AI_BUSINESS", - "prm_object": { - "item": {"ctb_name": "OrderStatusChart"}, - "icon": "img/system/pivot_table", - "label": "Pivot table", - "userkeylabel": "OrderStatusChart", - "object": "Crosstab" - }, - "prm_perm": true, - "prm_upd": false, - "prm_req": false, - "prm_prop": null, - "prm_value": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, { "object": "Permission", "userkey": "AI_BUSINESS~ObjectExternal(AIMetricsChat)~", diff --git a/module-info.json b/module-info.json index 237ed0c..f75cd95 100644 --- a/module-info.json +++ b/module-info.json @@ -1,9 +1,9 @@ { - "date": "2024-07-03 11:00:38", + "date": "2024-07-03 11:25:02", "name": "AIBySimplicite", "format": "json", "files": ["AIBySimplicite.json"], "repository": {"origin": {"uri": "https://github.com/simplicitesoftware/module_ai.git"}}, - "version": "0.11", + "version": "0.12", "platform": "6.0.14" } \ No newline at end of file diff --git a/pom.xml b/pom.xml index 16a226d..25b0df2 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 4.0.0 com.simplicite.modules - 0.11-SNAPSHOT + 0.12-SNAPSHOT AIBySimplicite AIBySimplicite Simplicite module: AIBySimplicite @@ -19,7 +19,7 @@ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 11 simplicite-modules-AIBySimplicite AIBySimplicite - 0.11 + 0.12 src,resources AIBySimplicite.xml,AIBySimplicite.json,AIBySimplicite-*.yml,configuration/**,**.min.js,**.min.css resources/**.js,src/**.java diff --git a/resources/ObjectExternal/AIMetricsChat/SCRIPT.js b/resources/ObjectExternal/AIMetricsChat/SCRIPT.js index bfb1d62..7b09436 100644 --- a/resources/ObjectExternal/AIMetricsChat/SCRIPT.js +++ b/resources/ObjectExternal/AIMetricsChat/SCRIPT.js @@ -13,11 +13,11 @@ var AIMetricsChat = AIMetricsChat || (function() { console.log("AIMetricsChat render: "+moduleName); $('#metrics_user_text').click(function() { showWarn();}); app.getTexts(function(textes){ - let actLabel = textes?.AiSaveAsCrosstableAction||"Save as crosstable"; + let actLabel = textes?.AiSaveAsCrosstableAction||""; let sendText = textes?.AI_BUTTON_SEND ||"Send"; let cancelText = textes?.AI_BUTTON_CANCEL || "Cancel"; let length = Math.max(sendText.length, cancelText.length); - $("#work .actions").prepend(''); + if(!actLabel == "")$("#work .actions").prepend(''); $('.chat-button').css('min-width', length + 'em'); $('.user-message').css('width', 'calc(100% - ' + (length + 1) + 'em)'); $('#metrics_send_button').text(sendText); From ededf3798dbb223bbfa5b8d9602cef3dc2dfbb04 Mon Sep 17 00:00:00 2001 From: "designer (Designer)" <> Date: Wed, 3 Jul 2024 12:04:14 +0200 Subject: [PATCH 10/74] Check import --- AIBySimplicite.json | 21 +-------------------- files/Model/Model-AIModuleCreate.png | Bin 90605 -> 90050 bytes files/Model/Model-AIModuleCreate.svg | 2 +- module-info.json | 2 +- 4 files changed, 3 insertions(+), 22 deletions(-) diff --git a/AIBySimplicite.json b/AIBySimplicite.json index e3eda68..f341a93 100644 --- a/AIBySimplicite.json +++ b/AIBySimplicite.json @@ -3670,25 +3670,6 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, - { - "object": "BPMTransition", - "userkey": "AIModuleCreate~AIModuleCreate~AIC_CHECK_CONF~AIModuleCreate~AIC-NC-END", - "item": { - "trs_process_id__pcs_name": "AIModuleCreate", - "trs_from_id__acy_process_id__pcs_name": "AIModuleCreate", - "trs_from_id__acy_step": "AIC_CHECK_CONF", - "trs_from_id__acy_name": "CheckAIConfig", - "trs_to_id__acy_process_id__pcs_name": "AIModuleCreate", - "trs_to_id__acy_step": "AIC-NC-END", - "trs_to_id__acy_name": "needConfig", - "trs_name": null, - "trs_action_id__act_name": null, - "trs_condition": "1", - "trs_callback": null, - "trs_alert_id__alt_name": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, { "object": "BPMTransition", "userkey": "AIModuleCreate~AIModuleCreate~AIC_CHECK_CONF~AIModuleCreate~AIC_0005", @@ -3702,7 +3683,7 @@ "trs_to_id__acy_name": "Choice", "trs_name": null, "trs_action_id__act_name": null, - "trs_condition": "0", + "trs_condition": null, "trs_callback": null, "trs_alert_id__alt_name": null, "row_module_id__mdl_name": "AIBySimplicite" diff --git a/files/Model/Model-AIModuleCreate.png b/files/Model/Model-AIModuleCreate.png index 6020a5e7c54d8fe000c10c91aef70666b32b8f42..099384f3ca09c8e058a814fb91ce31f639fba9c8 100644 GIT binary patch literal 90050 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℘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

7{ZxNlg;M8CX;3=XMm>Vzz!Xnte> zqPVxRvSM<1eyUUB%sz`jakn}D&6^IQaj1ouZ`2f4T@G$&#<&5h4M!~Jzzbm)?BFu1 zFNZL-w&p|F$7CXOwGQT(Xuj`BWYeys#BpEI!i$SXz8G?gj{~e`-QZ|}*Mw@5 zh<`d!OxWIYk6K)?=Fw_wa{uh}MMBq#=JIf*v1I-fuL?b={N%%uf@T_LI`n$GuJMsp zs}0|Gy!FM$g$R%g3v@`&8?c`rI0ugdz)8&|@&kp15>77%rcJfJF(cE>r3{+w4lJ_Y z{k|2uez8((@6b$j*BDtM8Dc}1%OoJCAMMi<8zarGQw?KjI6bFL5?J91rxm)Ts;Zi| z_bUX#eZG`W2wCKLz=Rn`^b4%ss;}U|CU<8#8hq;ei~ze8N&tfwY~1E%^<7~!rWwc{ zs-xH%0@kY~(()H->gs#lyp6^HKmMn)Q?gpGnj&2Hxgdd9!$BJ^ai~uZ*KYwyUmx!q zWvXoQ!qZ*TF*yJVCkt#xVv*5=DVcV%)1Ur4OWChh*;r>ojJI_e^chp|3Hka-1tZTa zNy%syLe`TR4QBaqT( zCCSS3_y%nSc2<_ej-5od2hYGT(<}KknWj#5Yjhdvjw376>ox==f?K!hTYr*MfYulA zLe!M9#%Yn=@o4w=ElE;*xo)L?Kur^-?>+qvBC5+X)hf^W7n(%x-kvWia0_)RyXTl4i z%9US1;1|v)_##lxLIsk4jjS1xyNh75nSJ|m4eA^E8>CIe`#)}CFEN}Yi5a6TBT+`S zx41D&`K7x~KEI+wzyr|or9qm(3 z6t9H7ABc#Yz0d63;aud%%|Iej@ItY2=OcQu>(9sYR&S5FgbPQ*vFt#^lbQTR*U0Uk z4y}_10i#p?5-pOy=Z=l894O5creaZ}N4pV*pM55X;#JU=#=2->Zx?FM4nl?uxEaEZ zwE_ynwT*m-osHYbEK9Z5u0rP*=I9bfSE5+zi4N=zc8H_PqTa@w}0S|=d`9uy^_;5)TZB@q|VqqoJ+ zZ`w?4k$Hdc;HxoSB+s@s1K`I0L)2G5McGB|$~Z_#mvl?FbSjO6NH>afcc*}KN=OX? z(y5fRpn#yHba(eqL)|mq|KEGpav@9So%h5(`|No3vq$LQvPakyTYA;Z0q5Rel`>!t z5_7bmn3KvSZL4d1>;(T_VRxVFj&f!{TO%_qr)ya0$r4^@NcK z;Dr=+;~ZaHNA!o{1}#4F6{eAa2r|P)z77^M>9bPbM<3@^Gc(j!<`nQSXr6aSHqcbzrpsqPrU+7lq=5jV)pxprA7@Oo zEzrnI!z(|FHEx!?cJI(a_QTmK9#m-!)po3STvxODKxT^&o9{F2!(`{mKTF<~tg!zqfrF|o0Zhn{22U(q@ ze;!cBq(H&@-1xS>n=Wc6YHIa4gmEboIcK-IZ4Ut`-&e{m_17H?L(b@(N3ZhfQFihB z`YQISnM)1v{UloShHwp3AdJH`;0f|HW|-wei2ihHl2qxtkH(Vp-S$gQjB6x9B(AAg zjY_p9S?3xm?GFX17*PmHn81b`gsxarDbR{d;-95#!S-IzCUumcPp(QQ{8e8{hy!~) za?kzxHS63M%6Z|l`=*f>1lG2|E>%^{KKw=*GS}MQx43;vxsrfw$0-!sz~59-!WYgy zzWG&0z0Ac2$YP?jDss+3ig{_!6HFjb#b=&G{&n$X>wjBgq2!Ul&nVJMatmFq&z&RN zF5|J`&XN&O#m))vkiA5!dlfG_5fOFFP2~f`nY-*=lVcgL;^`-Oh@qFr&xHo#R8}LK zvOnO&0WI({IKR4~(3=WF7(Wr7>3BBUQqFKfI-i-LnD+*w;-;JKJUW_6LxOeK*~@9l z>&ONi>#FBKdIfqunF!K{tPq%OV=jGwg&gEiC3T!TP#lN**X?7xTh}UbUY8_j1|5nChN!Etnhi{M79q<;I4ao{^AC@l9!W zT)ltCDY;lHRhAJ5;e1~iL<>18;w6y4k6_a>lLZ$o{2D4krR;E0(~&xylO(cOUl-2IjB9rYa5<})*dir- z=Vwy2wUkt6{?@799J_?b(ml#ejsX4%DANDu=rurPk2v*w@l31L<@EGueSbz2)RYi) zI7!5!%p2tE`ZI#}zWv+7$b?Ya9U)g3JFN{=z+8Hiz3@!{hkCFl_ts{M=pZDkS61_K z+PYzHYE^OBamwIR*E$ZjAh}ud3kV4<&?F(x^P@JHX<6sJbQza(h<`^u#{Ib@>9D-H z8YR`h$RNN^vxyV)zN6ZTctof~mqPnrt+^?A;9_!YQgOY4R)*9$v(=l~Du%6vQLGW4 z4u*>(HNY@EaD!(w+|{@kNCB!j<}oDF1Dxgd)^F|`0+YK^Z?oH4jqpf}p8|#L2@c#} zN$9iA9bmZ))Vwoi+wgB7{myi-wOG$&Aoqxti4%9X;Y*%HlN7?;#eP01Gb!P3O9Fj< zI8Ae}h~P=8^wjARajhR!3V8-kQkUcSMH_n96dB<)wYv6LdCJ0-FeS8GN2nfmLd(Y`D+4CM983^c|@;gHvCXlHz(_@7%olto1Yp()a& z&vz_niK&{A1!Py&WE%<6K~C#-fp4OsZ=)5+FsQcr8_H805blnJ(8TcQ>w7{1pWEYJngl|Bv=qv>hsEQai74?UCMsfL-YPWU znD0r0Ba2g@NRt^C9NBX3pxj+2Cx%C`l5mOhrax`&hMtkKKlH-~ie}Hp)ivDwEqH#o z7W9n66jTLFZVf;ENrwlzfuyCqf8%n;GT(%LeX-vSntWva)oq`8ZgzFD zj%=h@9(fcuOR3Qo_CA$$F42qt+?}*2Zb0etPkIlN$KVTR8izHeF|Ev-CYZtVa3Uq1 zt`*W>G^+kCQys98Fwpk4;8;r(2tX)GX2vWEG8bseK6pgk(wP!nfM$qN~bz4pT$=LA)pOO!OPoPC87(_q^$`w z6{Nnh7K$fnHeV_6zV!AfDW*~!?8;PCV(Xt=otlxjnxjJyjEK@dkRS14wo>K zSaI<alxwO^Bm4)%qhZFR$?+jrN_x^&!{(&mA*K7y& z`9d+qv;Nn?dZdfywpo`Z}LpFLttXQ zti5;@!M3rrSZVR=O#i#wR6~GNe8n}Uqv3*r3vXhwE4swBNm%iQWRx0}%A=nV8+&5t zbM9lNH9?2uva<38nnr$2Ee}CAZrxBdwJQ_oq71Ht7TsOlgTkY4%Y}I_8O=1nc_pC| z&UCwsEmNK?%965*}m&-IH;f&WD7%u&{QUB~YA5B7Z{ zS@)OR z_V3usZ&056`{of|s-)mr%SoqQxtS6%fKVLZcy+z646l9}TQI5{-x^A=HwUYdU0gCr z9ZKq3YL_W}LU|Y>_Ebj)CF@hvyaQnA=t3+`tS-jf#XW4nT^bZS{0aIkF7NLfyF?$2 zt*93Vu-@!R@^8`nf4ej@qcg#9jMrn?Gb|i!Ie+AsIPKtN|7%o=(U0FxYX!MZx-&6F z-l;C`#3|W+h(EUKA^&NPBj_j0$)%b19MRU;Y6B z%d4veYWN|88d6n_c;^!=k+vM!-FUKat%YWRKpaOe+)P_)BaYIm+2fJV zo~WX?Ff?A2P$;bS9nm#5mD0a&bew%dv{v+XVq7Bgf)DfCUF4ziTZ~se5 z(T$a1ojy7}e$k@y9LU1g(`e@-XTi{$HvDm5ZaB$hI?0hMAIi$K+0X(8IW@dS!Ogqe7>cwCzZof;P7b|r> zLoPBu(X*drP@F=NrPM>5rFmG2wp`U-8QpsQr>_@|zPSju&e}GwQ_N_(xQyF?Hawq- zPMM#^$_8Bh{lVw-c=PkG7`0oreXMCvZf?7r-JMLQ&wrI=?>RO$W(ie2@j`usOC5{F z-HP}8`E%kf^@&T7VxRrN_jkZ``F}ozeyp^OzDSyrQg7^qSANYOs@vuUE&Pt|((ig5 z3~~;?CcbGFo+yXS_2ekv;qQD{IF4@*WVP{`s^LfF?0z_0uE~fQqg-=s_J|;5jOR_F zR2BI&WFgmn_-(k&aW}Kn(wVMFFCcA>T3Rw=x^XW{ACY8_rFCFL@dKyp+r{N*%Ts!1 z;cw_ML26z3#J|xo&wCRk9q^VmD;wUXNVxZ6@1r|$C#;rv$?+V_rAJ_k#V`H28$ri9 z)(myJ&h6eBTfhz?8-rAKw`TTXwQp!)5EYV`Im3SFwR-acvgUuKW33>{;?f(h8Nhr9 zTo&4p8G^j6a!ytg1qd@;;zyH6IrikEAJwc!rx(xDd*EPRfj)HDM}8;27&fz=U3aWPx0}V8!yw}`PcA~`FwG-CZ^7tI9K}U zq{?vqXV3FDS~SI#xr`o_yz{-5CgabC@Cf0HU<$;4=g#; zN}dyXAVu=@z&B7dyV4`T10O-wS12xY^_P=b$J811m(?VjvqR^{CP^p70&zsgC+C#RmlORzt&0v{D|ZBGP` z;Q*bq^B^WYS=t!+7+Lt-C04Jl>?q_t2Vvo|aprDZhUes)A#_GYO~*!!yw<)r>`1HCRG- z(^?!g^3|mj!gA)s4v&2@_=D8KgY8Mj)S?fPRljEsRs+mJX@pxLc2z41n(_rbQ zbotqGFg4VU>z)>E@pSj2|4nU|gAjN#BdYl72wBE;-&{0|qQGZx_Z;Ltvk%MF;M**; zAm{v)g&Txxomqi`;1ZZ~Zz#o>dJb3m;-o4^^4ewB$igr^GRH-H$CXCTRCDNEdjbe9 zAO&NOCmQ~v4!TE=P-`esS9tuTKH8po*iWlwI9g)fLzcep9rA)ajW@0&g( zmxnN#5rDTmB}31AqYlv_4iF7xW;N!VdS`5`I^H5bQe5EtT8@4Edy+k)#Demr2#!*Rk|!{Va|$BBcr1Mnt3=9jGi2y zi$)bPn9mKEvp_TWu6$h5&#LKy(0Ba*t8uobY8gNSxsiN1EGQaU_u?Xrq@?80$w_ES zOUsTi3o|azz6926U>d4&nTIY)NG+6>mJe6~hyu=YAIXo9QcxJuAwok#@$m5SWMRd{ z%yO`{Vw5%plrf(l1hh&tE*CY z6}qGd>!p!X;IKJ?wIgz15)l86N{lCRrY&bKw>XcDkdF#cr**f3q za-0!^>@<-ba6YXqYiedj3k>4V3<1rF-Km$uxfuyd{5r0NAYq1y79fgpFkX$`A$;+4OVy{RJ}U8{)`RA)ivFJxe-G5;)8km5gF36^wQW7R>g!Vjx`-r_SxGiLA=p5&^C zw`7o>z8tkh+azYwGpm#OW)|4^&&3Ag&gvk@q^aX4x-y=BB20!kAVW9&WSYOh@{Pfy z@2XmiQfEB!vJozW|0aOOz8w@n6jO*&Odjj2ZjqtA(S;oCyDpvYa_~N5em2_Fpib(s zRozqXXRxJlq#yKW8wF!39H?Sr`Q$*o^SX+OHD~>IGugFi)H39xTYY zzsn%;U(k*p42=JDYgmw=20x_O1f?ni-QC`bp?C`u8P(K_1Zy1rCU)%%XYF z)(m-%$edL(P(TLsJ;A5}yy=T6qZuE7q+q&7J{qKa$JcF*gM4ulIv6!6nRT-g1Y6bY z{_gg2={@ezn7R}l3ky1k!u<*-HHicmR$J4v5nX9(EVI3uh=#DC|E5Gxf(@>jnO7?U z;5Ee1{(%8xD~#pR;@mE#bfeHQH8E@p3k$t=f04UW*!|Lax@phRa(4p5`T9lh2Q=q} zCtV-|gj{wUFulLea}F6%un0lrdnf2O8aMsTs=%<(QCs{9gko!vJOF?O1|0{d>g3yD zAk_6VIA*B6=JZ((a#J}#GGwUhy~3DMo(Q`C)q46=y&dU6^DbA@_wU-gp8?Bef+T{a zs%Zri4q7Dj52f8>GJbiG!exz9ex-&S0n#HHMEbI#_`uJtZNA$nua*Zj89?ck(FX!M zVdu1$CWsP=OCA0!Q!ainDHXi$7re_=KDO)4i(JP<>4zXHYe$>t{}`hQGX!Kw@xTqq zHkzK98I4Bm{Q!V1HBc$(A?rf`@7xuP^018d%8lV@)_2KivI&zFp@iJ34Ww;Tb(|-_ zXyyx2_cf;{-q{vA_1c1PFIl&#qI^8FYVbN-5$BUF}WKEp}6$>|-kjAXgKWfyAjx|D132IXyb+#$^x@Aw%9+0NWaIb-HQZmq_G(#U#5Ls)wH{YTg1uodH)+6*k zfBmAGgsDrlwo+#B5$YYi%Q5MV0lpG=oE)54(}y8z=8B!#=xg9|2UMC!Sky?Bu~;kk zTX-|u?c-KTU_kOt<#q;whv)El=j^Pu^@uuhn|N@+Hl4T#uAYa`n2y~@A|3~*Q=pXf^km3*A`B&;DZ_&?Kr|G4;q@f9~j>gMQS;Qg(ahtuX@4xNKh`{fFj_Am%H-jl;bF0_|M zPlKCq&U`tYKrkH4Mi>=rMe&1#Mlb>`f<$GLX+Pcbm9whPug&kWI;Xos4wy|43Kjn& zS#cnLQjMQ?lEkFCyxcUP-LH-c(^TVxRwwdWt zi$M7?I>Wa#>}TpQTD%S;{JFR1VSxw?Am3aEO{+M_!@fIdNCTM{d-(oZf7F3o6)9b5 zAn9neypha!>abBb74Ak( zBr!M!6 zA*UYDh9j&Vgs3udyKw*6fPSq1*g2B?H$ivt97VImBpxLu@=${wTVT&NjH(aL8uDIp|$U$r!OjRWiKMyL!LJk8V zMYrP|Cc`+$0XtIxL961QfPaLN$4Y}*@#sA!X699Juk3su%@d)cLjfLFE0bEu zn4Qs>7Y~{D?!%>Jo5KH8Gvn|-q!?xjFDgI;nO^DXm7LG#JhLGHReP^0(-p>oH}5h2 zd~(!8caK5p1{LIu^z*&Um|~|gK!HWq09EpsN|Xq+p94|0J<6q#tIlt@2EX}dl#x6eiZch@x{>L_<-@}SqzVKW+Q@{2>f_IibGWVN(4`HX zi;I*0){`~_ffN8Ku>~av*GpQ^#OrLM1)QiFw@o$w+q20GaPy>b8AsREJu`BV`#Yb0 z=nu^hBRr}MEEY_+Q0_(Qqr6&RR0#;ak%U3*6={M0&D{nkaBSXwI$pMZwF&D5_3t0* z?IvH0B89>u&O{ydP@IPt9ixHnNwX|+`cIKZbmhlq8%8rrNV!gB*Y#mX^~5RgA+4SW zJLg5i=lxIrKH;}ii7S$VbMTyr(z12^Sr`#S3PcSJI04sjtP=DgPw9BP4vd&iK=bgC zdOO`SHJfohfSvUA^_{Tp-Xjh9oetTbc^37_ALBpi?c@cbl#L1Ae@0JhV~mTNz;=-a z0>k|Lgr7fu7LYvsgxV>$8mz|q|J7UxGWqNqy6V8Vw1c#F0C!7>af|2kGN1Lt%IQK~ z*xo3e&EihxvyMv=9!r+tf{j70s`#`!q-iQ$0F;RxQH4JX#uTg*7zn`t>q{>vNCMcX zv<+*OLVAHJa{enYSz-M0t4q;MQ*%hA;8oZu28Ezhl17| zucO4x{n9`+Sv}gJzEuvYlhdJXo6j{v-b)UiLPX9Chiq`se~PRg+zI-2t=1s079CvZ zA$7Gzh}2P)hK)U87=+Gc)?sV<8}qxx`N&B03eye~xvQtDnb1b^hPg{P1#Ksdu$AoU)URUXd%?0{r2;z${z!y|n4otw1@af>wQ> z5@gvzM~+)B6d2@85mEBV!B^;tu=XLTdrC3Sz0R69-Twkx8W()oi&Q@4&ousXuh2)c zpL=w3rhIxO8}pxH8w8pH)G5H@pel-HwS;NAah3FqYrmlYCCOjIOc)X|1 zE*glmp8Kot5`wvj}*+zWcsYF9P-R2j_S6uI4t8N>8Q475W_h|?X~oJUIK zd|jbismQOU<1}W#@A;s^js578gbdT#2^~HBusk(<0#+lAj+|NqiFkB>Y$3;EZ|4 z4L~7TUDE-Ok{K5y>O)9SEAF4>0VB`vUj>4EJP6aA)IKyeGIL3kW9i)Z;3@E(IM4qy zIl4IOYV6pP({RBUq#}uFy?N_j=Po8H*VqYiSGAtAZ*H3J@T$mWFma9M@b4C=t74Pe zQ-YBIoKL>q)|42}s8EzPm3*u7njSNKS>O4U{PpzQ^+QLa7{p(EY4SnGu;y5ZPxV9f zxk>l-V^sk{ydM`Gs@q#6q#?Y;UeYcutan$_k78*^K3w8_W~;pZJCuq{zdqd7NAWH(6T0#FSDKB;Y}!^$2lsR2cxWiFWs!E7r@TZ2idnC?CC6 zdJIFHb$ZT5sKtFphE(U|Ln`{4;g*005kEiVIjQh;J#53<+eEqWP(-BOU%`{nToa}Y=o#=Ssn$wDZ6;Lb>&82O#%+U-_RUxCJ=OcrT03b5dMN=KBFk` znC35+yp4^Bf2+hleWTZpoYZl>eVZBBi}9QvippP^zrA0uQ1%b$nC%PRhUrcyr};8rdQGB{6Qau95!L5M2B_7B1<_p+jUHbt5Xz+u0+LoS?khZ{@nSo}Nc(VH*Hj(9~!1`{ow&Q4fB85@uh|0ZS!He>0lMQshJ7 zT64)kU`-2_6&sqIK!;L}hxeoLoeW#<X1U%0r7&NB-#5*DSFG{HG*vo)tDz_D1Szxq=Xc-oSRQI;sf=3^08EZJ^a zuU?5FZs)A>YctD}`WLqy?$V|L8ZBSn>`BGe1B|ICpw4pSQ`!?dmCzNHy{0#wiJy#6 zucd!qjg@prjht;dMQ>m#EcLZWo4W)*!#d3f;gx?YMg-kFKPIlOOij&4^*mG=054i`} zICcMaQc~DF@xH+$-HM?b@86zbA1>eM-CKM6=tQ^dOu(Z`ad`Ej-3IYSHu2)a<#IeM z5C1O~;EVTqx76`op|BAT59UI|=CdR}eg1i>9-N@eS|9& z*x}m*;s0X&iN{m=;c*Dz-#Vvepa5P+fj!v z!nCv#6MT{k1+DuuDp6NQ+@bQ4=V<3eYv%pL zx9kADwC@zyfD+ImTYCT4o0@$kamX$j?y%rNBvmaI`J2$UYqHqYVe@`s@4eLZ z@({@bN>kRPB)NoM9M1E(`FV|bR;l!%I7scbCEDUUD{xvosf`ixkVg=9uXjsTa$^5P z+iOU0T%Hnt0?;QGZgvIlty)yi2hq{}iJvq}CTzl?S6bq7uf0ybcO)=F9#Zbs7p@5P zVc8zv{WYJN=o1HRSme$aXM_%EI>Tx^QxZ%QKmisDU0=aA`s1b`fzcCXdk@3@BG66G4zPWMkKPyRveT`kvJzj&CCXe={H*BMv}A)UShq!=}jP% z|Gtg%y%g;l2s!gt28OiWCU;P8q|w#69QfA~_I5BAlgs0E(_Be$n;z$ztJ z34KqozgyFE?^n^$m0qQT(dileTHmbKZ z6|F`B8}n`K7`Uc$_%bbZB_noJ`z>pk;eDdbl)q4~Yd|b7<&`THe}oi*f`DJyxm&JH zTgEb=_3TPMbzy&Ar_@iMqMRgeAGui${y;XQYB^|rDR<}Z@BdF1Kg1Pe7*^DA%rmDvEIA|` zSdh9~E_sL!g^&>3GK5}jEe{t01Dm|#7JLEIWv!>gF;^v9(lwl zAJ)_M|naU~22r zZlqm!Ld+XDWSXXpukP(j6}XrZE>itdVr-L5= zsO()Zc zVFTneVX0i!3+HcL%$lOifT}_GatBku6Acjs4JO8XOXENjhFRAqIDI zKs9UueGlqMkKOL=3yS&6{zkMTxGqMMzmZp66lU0UEvo;bl5BNhg)$b2%XJp4ym|p7 znj|Q>d9@Ce7u(aN^kT@;!`|L>ntA(>lc3E+zL9BO+1`jM4f=%X)wFtdefXiHqk|xj z{sGg8RqUn4r2wPPq#ubKY&T9s!t*&q%3irU?tTgqBt=sf|G0uSG1ahS=3C?vzmDk! zY1)#tZ*KI0Y?vsU?|NcjfX$~X+Yb>L4Rpk?mmvzawvSphC-Y?{MpJa`p6-c3xM^tW z9M(%7SDk9$c>DPl051-i8nfNwpjWSc&lgy!b~AnzAlUMJ!uvd@7V|SFgzE371cA3z zRfh{vvZfvZw}nq+%e~3st%|M9d5fHy@9L6OGR2DuDPpCwH41aFaGK`rp_6_r2b9=nQ3$`+s^$*{DekqD4 z$32kZu8S&*eV|OF5H0SC6+JF09k519#K0s#c>HF&sm|0h1&@=1<3ext6^;z7Ou zsxG0A9+i!;+`z>*D66ovP3%C9zxPTS!X>>_T)EwJR_S0(MjRT&Ag1k|otP1&O+lc| zR0Sd{3IL{X^78KD?{DQN*;3+FE558pdL3u9kA9&DA5V-I6cJe7i4n;nO1VoYPxqBJ@Y&Z$AUmPenhx*S2I3JL0uH?sX zb%8(!9wlW(7+_N>e|b7__q#P2N{KWu2o*a~(JQ7?OMQVZx>_3j*3!8;KWhOvtXc)SXmk{tI3|($R);R2EJRhWIFMl|FG{J8%`(X8GG3cI@ z|1dKONn{}t@mQmjw~b5r^*hmhcF6EJuFVIDb(rDtI7}gRNyF#1LarNBH2C4XTZ*v|a~ZgNr9wUeku=frKl@~k zBytHfzG6RUJyi<}3zJ45qK?K+r@m)4N**prRDoiZA&=hN+!nl$hoz|ASF;Z<0}Tax zaCak1Y96cycm!OmxhWJLdjAhVbhFXIi|zbSD)N)A?B|#67W|tV(ycdA1H89`+hxQm z?(Xit^1Z3f#@dE6y9K|seQT-JCk9CZL0AGJBFr>HzCw_~4?~%0!mqubZn=Bx-|rAC%G; z1R$iiRE~2Y??~H$lNOE!t7^ePnO?X5U8FVF?u-UDq%^?G0)Jv8*1tZ;(HqMYzRi&& zso*XjEj+QW`1~D~6ns0s+-o59iBX3HYVE!OZF?I-Tvm=@WTjtxzN#|{bz70ew_^C* zQiLwdo4BL;&iIS(Su=|{#bf+naY|_2(Y1wNk-?Qj5VPKiZq#8tDoI1tL}-JbnE5XAY@6ZC}FfrJ9AK1+%3&e0aor zHBJcN^suD#XN&Jw=|?0166W(>^TliU_k*c1H&TY0H$j5bH_k%f_NXM;d0Ah@F*wA{ z^8C35M(9I-txPqHkmT3(-lh|_zgGf8-YEbch_`@46qFk%IJ7XueTs=z9%lPVC6ql6 zu{tZScF-eF>8`(ropAszc2+R6#T$O?zxESNoqMIeUZ1b zb<)c6)V@7(d0zgEIu0tbE=r#W0`9L|(h2TIH>`TwwF)hXmNr~Cou@z19a$~+u&S50 zeiY9ZIa1-!tC7Y4%po`1MAZw;f1893Svx-Bg1jk!Nb&!3|2K}&$Gu-Y`DNws@Icx+ zvO{@O$$Wuf`)VpTF(O0o2XPyMvHzQ!DY*gkD&GxFq29^T5x?P3RdctMkxfqrr;og& z4Q*_=rA_Rhg@XX)=}f?KrPV@L4>pBMFO`>8VV^rwVWc#*Hb&%;Sh98)h3R7G+5J6D zSaPzf!n5D=`1fZgC&2IjRJM@%u^rZkHc0U#vRt8F+C7X^9NX_Q+2Iy2E?o4pSF`*e zB_}taL##=0`Z}=5nckAMoaBHAv^WAjzm9G%@iB&3YB6Tq@9PMsAb|{`?zyK4exNa| z#P=jlr0xBT;kb_~tnkAHv&9N1%GjD`BFLEuXZwK!TYn_ASZO%z9ub-t(h?_ZWL_D? zNMHFYw5Zkb>}-bR>KAK=iVvl_bhKD>^uQ}EgJ_{3;jk}Rqcz*o)R@sPm!b${!>?Ck z9q+crMo7DTAJKO98WW=e*uy*D9VozmZhuKHiq8yFl@|5P+UQEL9Ss_xj@xa z=|N}Dtw_e%v7@~bn{6fY`WLsfoO(J=DldSe{di|u{)?{# zCrs-)UW#Am)~7q3Xl?V|QuDVLyhRBjqs=`iIB;~?5-%1cce1R!ybiil)OmQgK!71x zxr(IH)c~vAC1y-?63jI3b=(JBnx5OCIozhyQY!Iy2UI)aMh^30k^pXyU~MAk^wI9sSER0S4cfIRjHbzE9zh+qQ1Lz?> zTIzsQ3m~=nKEYrKNP5cOzkhpgU43{J!Iy6*3vg3yM_pKeqKkg4IdpQ$SMgA4K62w| zL=cHY`-bvGjPaErBzY&`Za3gEz>DN7)&Tz2VO;W8KKCdLg*;d~s5|9^8MECFn(%2~?`=wqfAPU={}eepd)Wz(6XkhJmauv%TA@)Ur>%_6B%Pi4e9E7(Z{;m zB%eSX7al`O-|Sb%gkdux1lmZi%9;YAdyZ{Q%_k0kL*!05Y#-2Jy~q!6?Yp>;bmh+V zfs>ti%>1#rgqyg`km=^VPSZ7;zIJ&+k8(U;T(@pl($WIP-%@yt+8POgD4 zptiP_t*zWk2&7+pMh)fQQBx^0SS_eAqmnV zoKpMpDt@FW!qB^#23?e=ev7AQ)lw4tNZGU=DGqvS^KRAuA0!Ec?(S=s3o-#r$n=}p z=1Zl{Y$&-Q{7Z3>Zef3{jqv9Y%6unK&z9&m!J*(DiKdkxDe}cQrfR`q@J0MVTZ?X_ z;HF6aW(tYp;AtdC7Gy%p0G<-b_C`=bJ3Ix1VsygpYpnJsRZax5yJPF^`K(@(GaWMO zl>Q0zb)BZxVPWpZ33t-XT2$PP+&Mz-2(NkR+5b@Pn_2^xoi}3czm5$7jE{yVaBXML# zs4TeUcR${qpOHt@(e&)h+c`Ds5WDmtBnxOO_A}d)tP-^3D0}L@#1>-&1H` zu5;N0zBRs{KAOtaMQD=9jUpcmb9 z&qpSCD6c;5fE9PK{7?R^IYz8vKMJo-B&EdJ3F(yn5g&guGTw6g$Rtd4H@&-ijL^Kt zB>IPpe1Ylxn6~e!EIywQsWF$_$fUn&p2eUhJZERoe<6q-=}OUnmQ7hvm#jojfQn04;3V{Ek627%d>m5}I><&$b|}A3aH298n%E`7KsJ4yG^P zmFo%M5^hGIHvV6Xv^mg=ne3YqS{~85Btwn6!&QK>)o~CYODz4*#&yfI2S9XI`#IV# z({=aHTji6cIgeVR@~eNmI(a^htc|QgCZ6Dmrf#%Vs&1CsL(C%`76WM-msAvt0Fawe znR*Dg;!N&5gT&-u^9mVvNzzp4&vXi_ah^V#`cjV{fPKzKArYBh?SqyAeq7Do?t|zV z%^QRQ!~^JkT{JzxwvWjF)rn~*HSvDFPh6SK1U#{>|3x#y;h-%U+MH4SOo`8jzEP** zt#9z75pM!(J!ITtU@Tf4VAk6ZJLQUMYCSSTQek`_^+z}dri@ayurM)SgQUl7R{juQ zfsLdLE8>sP)4E7#W*qWZe-`>1Q@_Q|$*JvkxUsou{v#9>^j-#Y3DxLV9sCvfgTX8o z4*HD&ezGXI(#M3P_NPxCQ?!TX4@JCJPFKup2V%DKa!~R@Bu4TR;r-o3NA0`c1RR%U zDA5BJc7oJ#anKcBNb-$M?ikV?-V>UsZiQZcUz z`CZC?0w*ctOqG-{-l-vzkY@r$jdoNg{U>{yby4Dox67oLYX$1gyOoU~tn#%;T^6Qx z2pB=FhdJJ1{x8x_+MKYaU<(PYdTVaZPVy5C4Xr>mOE4~O^y|=Mesx8K$`>yzEUcvT z^bdf1dNl`k;d$=@73Xf&H1>t(X;12=NfhAaUO~bg^3~O%;HXfj7JyIhgVzK+`)flZ z2NUTH*GZE8hL>o1wQZs{IolU(5LU!Nr50_0ip+{0M;9KCmUV zPgEKjjusd38OXw90dq_Wy0fKa5h9_}&Z#XTu=`pdm6hw1I_kvO^V}jbKE4N))Cl0- zCF6iH@#M6hUf~-n_(Az)%Z}%xKOTl2EI3j!YEQB7aK^6sS6t&<|gweNcColB7oeKu!8_)Gr=mr#+pOu0qstfm{(Qw`P}utHWr2N z>#Yk7mJ~%d9?{WovPt>h-2Xr$HT^+Y(X*+hDnOklx(>_AiV<4ymciH-lJX~6&I6*05Km)DyUA-XS;YPvt|LScz z>Qk;;twS89Q!(WZSZTA)GYsB)g8aP}e!$7gXKZZ!t?$hU24Y7fKaq;gFn1jS6x$Er z%DSB92$_$XGShL0|6$ZI9EeRF(0P0QXBr*j@ek8`gl@f~`bKd!J>Xq38Q7ddzTGaa zUcchY7XN@Ez`*dJfVUgKf3Mtvl2fBE-o3^mgV2fbg|NMk_U?9z*uap^HyE-q!sG5x zWT2+Xt^J=9YB+|)fB}MEteGZ5Dr%LTE_;V~RRoJ2<70L6YAzG9yyhN?s8`nwVEMzYL z&`vxmbyt_3mcEm~#JAb!ZGWofN8GPm8n530OA+<>&6`-2aZ8@K5y_m5aeS#O^^k0R zeSN*!x2O$Hi}A6sk3Y7g%ji6`9?{FXXzCZR_+o*6gd6;)!*RZu4nPI8SNpjrfU&cL z=itM6z2t6_)4zGaFSHI=^Y0|~kST@L(w@#3+SD?e261)rPMh97KGGDT%$ z!EbPrG8y;KFS;0>kyg$8rF#9-Nj&4yS7_{jyJEC1y{Nk66{DcjLhOZP0Pc~1*Z4c> z8>~~4PPF^W2mF?QUTyQP279-4Rz6PLba90A)CQaf$RIvs^KB~(AxK6@L_YqX&b~S- z>aJ^>l28N*X=x-RL?nd)q(K-;x^M3DI z-~HF;V##9i{Lb0GefHV=+Sk?h)0$NLY*K@e%X*(9xBGJnqYI;Jblv^$LyNi1@h9P} zU6y*Hl{l3KjqEV4u4oTN^aR%Q8=Z}>5z;OysiMKU<*!V4ni@Ubf0WCwM_c^%9z_HC z108~Cu&m4&(2!k)zDK+;qy{+)m;1fD)qjFI^snIf~J0Dy6-^h}Iy0l0leO z_!QE}#Dmw78nZ*}hK+qiO-;^RUC^i&Bo-TN^FG*P1u)JDD^(5@ndL&~qFIzsxC`_1 z6y#}#BOIkwqwy)`3H&In`0-AL*V=R`A5eMMakPuQ^7lN;;;?>78_wFV+73M-;tJTe z3ENjNE`#oQ=Uq<7ox4^*EmVNO&N8KC9|X};;jnbUDL(NSU6IZQ8=w`!{jVsvgJ)mw z#c1vTvgkaiZ)NB_*XzF80!CVdr&} zxGQOij{mz?+)1oN&vd<6SXg9ajyJnxk>7V2eUAC)SIR|`Wn0+bvS&jWU$ffp;u)J? zNDnD4d#4G=URIo1*AD6DQ(8iKT3#%?X{-{k4Q7YEvZss>#Y&NGftwmFX&HD&83kV> zOASN{b8prJ-A7mRj{MW;`itd;9@&J!*T6C}L|7{{!dhK7g~1IYVyTJ$R%J*5)Ti?=AjD;f`qL?QKGL289F^v7kL^@nRR~d(*9Xd%vj9vtbvLeS?(= zqKd{aq^&&Kkxy*n!N%u?^G%fLFaXoZC3-D?8MdFBF?2Dzf0-^x$E*32~DiW zU!gm#LRIqEao!&)*cJd zw&9A8!=jM~6WZwvKgK+zrs`qo5FMktCKSh+?BF*%|NWFiJ<~&E(Taw?4}Fhd^QkW> zFeQK$Ie#%D%1MJKl+ZGPy_04=e_d+<9b3DK3|MA1apGfy9V1IWV0TatHNQv_uBO{V zg24l1GLld3SqUk#i4DfFc@-5^#oTbfh2s^q{MPg#kS?eC1>g0NnxkeJ7*5v}`U^Xf z!H8|rde@^LR^+_mn?x>|S2N96I(9HlVZr5&vP^N*pZ}b5X1&uxuTS=`L~lVW~OT;f3C} z95|ve;pk?;ME?Oy>47yZKB7FpL%r;t=c;3i43qyhd%F}0WXC*@ixCTvQ(ff)FIHjN zJs<*(hr5-K1l@V;e>B%q4--TxYM z&&hY^|6&3D@Az9tT88H^c-8**EC1)&$1qx_8+%}53t*y9bM+Pt(MJ?}h7XXRL%7p| zw9l&rsh(9q^N59>Bog zL=yjP7y0C$g<36{WKhTi{UmIUaB{@3FWm?-{_U-c#Pi=-19E8@N&mByL|`dHo~D5r zHepiL!4loaFPZ0g_xv9tVM7^7)an~xBzB<9BH$JedL)$f-`@J^3+AO8@9x^wzrHoX z5|gJ1@7EdMzmBP`%fDj>op45(4P}`U7!iyT$Ty_c5YPtPB0E2CI$wxrG2Z^y5tr=H z??&FB4c$omKkr2w9>w@fK(-K9Okg_nJw`}PGk85&?;Xy0x~=a$Y&U|o_cK}ji&Uvp*gFBC(n0|9k18$r4_ccOg@;fnAX4NT%AAuX*2O!YSy{9C>&= zeRSy~wDtA#EqM4DC^TfdmO`5B?@_HSxo^5}qXQb+nm-;6+WcA{|Du4E{0FTjb49VHo=d*WhPbfh)KIqHV9|2K8>(-ZVX3l0bR(q z;U2p)`sqQO0!2LW0=JN+SQP@(xESl&vt0jWXxv}Z1n}#_q&hDhA#K(YGb`Hb{aGW6 z6gDXv7t-jd_vXD-S+B{dL-wSiotZC~NA1NUj-444F{-zO1MDwU(*5*k7~3#*mvWd& zViQc)R}^a8O$wBjy1Tn2TwKcX+EyQ+C{iE97}P0pilXkJ8d7i{DDjiu*-*riK7G|x zjl&vZ`?yB?S+-kPXZ*~Bym(@evs5$@_5F8JU7>b^V>fTB*owb)<{0XBi)wxBk#&78 z^OAqmLF_|j!}IB_)D*-&n49BpuQ;qFMXh9CXrPX{YB?~YOo%28emAZv z!&+TJN*Q$L9wn`R#8$!5u}Zv_N#A!-O|6l1ZN;$Y_O~(j#}kr5C4WeIE(#hNy0`@K zPFCB9m6#JgUh)2lJHIxNMY(d&@5fUh0Jf?n)UDl>4BfwnF}G8a<7P=?tm@ChX+(Cv zBYN20&F$`6j4RDpXhdEfRjjsFTh|nZU$aKJt8K<$-Tk-`+}(qK$VhV4JDOv|^um*L z9$}6&tz6UHy<0CAKk&@Wmp^P z6$xN!F2NUfeD)!h?M`ZP;$rm1Df0Ck_0E>uD$#tURROUO=mzlExLrVqGN;4{;NM)8 zTQO>%1Q^PNl)3mwpZyrk@Oda`vHir`2v{UCbrSKYSo{QKNdFa#&8wA=q1- zbDXg4qN=))=VYRJhYimEm{|KH^a+0`-+hOUko$>G&jh5a6g)MsNQuK1 zBWxjQ1&fW>W)Q4K+l%w*7dHvw%CmU&@NS&_NOGVJ-C{;yj6va=6{n-B>b>ab=*K24 zXwot=>=Osa$6C3Ok&#=rTmhYHX;Ts=GGHcNCa=YOqp}%M91?a1}==X zQeb0p9V^~mD8OfKBAj50iPzz^+|+?PU3W*$p&kA(46n3J9zh(11);X%shz^pD#LCOd+a2+1Ze1dTM8F#_On;{c zcHBqERaIZ6_}bCxX=Eq^YgOTNSN{LWecdj^Kc3_bvIVN?Isg{Ea{8=%)q8 zJ;m$g;eFNtar3${-%68UFwxV&VBx>$#ke_(1Uv`|EuCM&-~9EhbA?F+plYFU-!fQq zmapFQ&fdMd-}VtcI#JJGX3>*sM$xO?<%1;8i?Wy zw=0V$-N{^X{Q?!F<*ec2-wbhy6sj zZLCYlzV>0zY?<<_Z6IaTGS)RkhP0(N{r-;Ew8rJ0M*XWDoX-6fx*u|Vzs2@|&?N&e zFA)O+!%;i5Z`-n>FHSGck_CMX6D$UqIe~m#n zSjG{(uoXZHA)ftbDZ_75=9Lj5xpZphZIz9|9GFug@&^`Ee%h~gil!V4Q*8BtPB#MJm=V2A+FrU*C(0H&wWP6=J> z+bi@t{et{t*Ko*q(+<{T*ZVyC@g_qbRpqshK+( zbC6Z3W{tF%cFbxT(RMfQ7YAxP4FgtUakq7`h6i1@t+*i%dx|e~_c$a=r!x0mkPC;Z z?#qCWCdRIIFEcVTF+jcqC^ZQ|t}o45 zV4~9r{_#zqV{IxM3S9*upJRRbD-_2^EQGHTyJrzpt6&au?N$ZzN!ieN`+?A>e1m^# zuLAj5|JMOE7dKJu{HJ2i+U*qA+-O!VFQ1{4#VWk&g%I1~$L~*(`_tFCQ*np2>%gi<;>~LnS^$&8`E)Lq zE(tlki2zdnaGdeJu+Mh*pL>+BRo?eXbA}=H59biLbBFbxANzc_!@|OrFcyDxNpYX6 zA${zYC-O@|zc8Zwe6zMl>4l0Wk!jPbIyt)g_z0~-VKPDidI;RTR=YQ9lsInD3i7>KI&9?cT za!YY?({FTqgZU@hK*Re;&h}}UH!q2#52bNsxCyOjwW8!6AfHXawltcp9;IP^HWUjP z{PTLzmli~;Vjx*}frTgZ$v+9v2e+F`bT-$-+6_;b`$~S7G)lyMIgz+5Ar+2yb2Z=0 zQJ3&3F&z}#*MJhr$Kx@6Qd2v&C!PYx7%R%I6Ql@5k5kURLiS)34x%rr;*1l-ZnEd& zIPxt&uzoSaj^A3u(tjZ{Jl%iJ>Ful5s6hL+gnIJb8y z>Rm&tFWN435A63*pB}p#3T=F?#4gAT)8h_b8A4jix#RrL>^i3k@Yg zmM)H?AWYAf{%j%?GyScocwXO3m(Tq1WrD>*SUtQUsbD{PiUrgTl{HG}QzcsL26MZP zkb7@{@BzElgWjofKveO5vOlqjPhlkfu09x(^!ajsQ!Xz-83I4Vyj5eOdIq+p(x0I$Jm6`08S`wFrk zEYVNk{>7yJ^3t6a#83z0&n|w%LaeIM(xBk{jx?vEN5=t)DdBrnKWJr;e7b=pLd^34 z;KOLg*9yuGz)g_SH9G;#ITWtHb?OTi7FZ2%3aAeaC{aFU%Q~!doTCN(l(>Y1aymK` z|IjR<(b3VNid!*%sb4FeqAMCJk*r+F&vSxLPMs2?if#f;h@TJ7E-p0AMXP;ER+;DT zfsqH9tV)5-TL~p&H#dIJr-^b`s2X0NB^|wpaB|{wqQAUxS7L58e=Tt7aX#Fmo^<$ySJWrpJ>YX<N1knB?<5pvDuVP=+A02S0U`xkVG zzPr!R^QAE!qH>v%OeMIfQWDwF$c_Ah0?k2f1A{QNELqdNXQ2c3Xc`R;6V!?Uv=4kt zK+Cthg2Fe!RA@Hz)piJ|>4IPC=hJ26CF;!cu3(OH1<~)!D`15UvM!wiPan471KNd4 z?Ixc1Ue0ud9oOmxff$wc?0{*!*+U#0KC?4@&tr!joSaIcQ8i0_n}oqXufF(?FrWig z;lreC1|9r926__V65-|BZ~9!^Vs21wRmSk&>vIK z%ff+pw6TvoI%EFHYKt0QHdO8mY!9>SI%335s6aoa<)AcGsYR#=s@@%pO+Qk$c`@i;hs z7nHQMukY<{zuxJEuE)vzf)Iw~eF@17yL^my@6f&nxb+nkMhWa`n;$WUKg#V+2^)z~ zpdua^T4XKuHiVpoWxE|s`o7o_DH1zlCf=0>1_8Bm8=WA<0yUjnugcRO?F7Pv7V%~y z=T8cz3?jH6{B)K~Py~2(^%#le;YGH%3^b7<1wI0FeRqtN6^Y`fchsNhrxh}}c?Vc> z!H9cNU*ximn??qy)gn+#Tbhi5GNMDl-FeWiW%Wf_QbOsoa{_^Gr{z%9?E)Q*h%1~& z{nb9g-Z}A1{msOT@1HDbtN0-KWZsJw+++0Hs78C=A#p=XcG%RC*$xG390kcb4PH}N zhV~7QkO(G@9+gD2tw;NlfW=P1O^bXOQ1{f4tI60f@P58Ur^9{hqeAH$TCIVhTr!9k z|7|9~)U+W-ob=2ISEmtOD9ZNxJlu$4u#W@A=;mT`HdNfXM*F_c%f5>>#-A1VMK81b z^4~cOpJH%)o9oCPjSgojxp2wif0eYc+Mt3HAMrJTO9cpp;}=6=99)m~PnJaP5Ii_) z?Upp6;Fr#XX`Kxbf7NJ~oiJA%6W!{L{^VZ|LbF<*JLT{k<`PyZ3&Qb|`xL?y6uc#5 zd!?hLUV7_cp+eMMd&psKM4zZ~euuIVU!-1%OE~%9iI3@~Do@yh?e{Hc8^<=sWpWFA zQ0g*f=6O7nSMC2$=B~`&z&B>3X>&*JKR(Y??XT6-=nc8RUS>>6|UMkeG2@&|6rGq1V-VD z^cpOk(oXMAS$&ye<32v|VK!H*b3J2ar0q&4-?Y&?N8ovED8KmZG?FvPMQBDnQNB`cUP`To8wAXH8VsQ=Ws94MgD$0iq7nmx@_n|GP}Ik28Y>ScK|`bb@1 zW?`fM2oCp)-Ah|dYI3-oIsI|KQUbVTM306wP5~iN80g}@gF{H$zBy4o00>3As|93t z!;E{RBa8jen)GiOJf*35jdhO_-h@~@LVZuaCq~#If9id41&naU60ab)2BTFXTTSR- z&Gd^bwY3))48i+XD?EOZp#O*0v=xj0cpse2I{`(NKVUdX*Df{+=k_r|-#t=fL#GjI z=kVtp2yX%yCKL_FE3lmW)DL)=14J-JM%>s9#EtVe?@~)V-+nHEwG+&m+VZAPENFaO zN59eterAcHn*n}6xyWYVrW2f&gV6|(IC1B3KSckQg3>|1|G8c$=gtNZR@s{k^%`r# zLiT9~L($B2S`7u@-bxoy4VuSWQ$YZjQ8FQ_sJO9Q?C4=TSq<|ockH?Y0u%Xpz+ng5 zq+#yI$3R{bup3N7DCIgWO+HEl0+sKA&TX-q%Y%=R#pS%Zg3ch{fg*1L658Ig zM_<1dC|%^ZmHsq#xj1Oza{Qa+7XV(u9h>+yM!?IBLTiKI->)YQj;veno~k7<(%-S@ zOXk1xMZ~R@t9n|!coWb7wbI?3%84HQ;`$JZ0uFe`POEfD9Mz=;el&Wfm^!{V_l( zzf{0J4Vj^KV;5gu#M~5!@rg5Qt1A&hIxZo z{JnXPzw#?Lr{qe&=EH>6#U0GK2#IUn8OxW3w*}eyIef~(unCEUr~^Q36Svxk%=xVO6xxXf2ShS9cbh>g-yML2k^)UY zPCr-@<^epu9ej1b-cpzOVtX(yfy4C;v&A!Ug$r*VeI~!FzOuGE`ha)W9|-Cxrtw{1 zAo`LHN6I79zA7yoZ(@g0;b*(Lc$ey+ku%aqR|5nZiyz>{1XS@siU&W{xrtX$w8^`t zOOg4S#oY@Z?o#gp{*wHpW>ZsB4m~y(Pn4isi+>K+c8x>m%WI1-@=?u_FaungP>=$f zcLMVp#3U&CY4Fd}^Jgb$bH(WHn?*_sozlXELcS%TB%rjSTJCYOIS~k?obR>;5o#l6 zK+I8LKc)3!R_tUt5QHbXy@xP>I@N54#{28mxqef=hlz>#S;lP0-F8y@*ekw*haB6H zOx8#m!vX3)_~+L{2qE%7Nm=3&X9!)KZg_b3t9{1db-}Ayl?gbX_nDE(M9u7J<0hM{Q{dk=@4z zzpIc|F5O?V&_E`9#gS?*L*GSQF=#3xHeZ`{hy#I<(8t!LsAMCK`PNQ4}7((!}XN?#PCnf~XY;%nwg( z7g|GcfCglfE*=fULHWW+sNkE&{2$=LrlY{|BB{`uc2N5Z>3d7-*DI05G!qmRqaC5KuzrPr&t0Q$_ ztgg1X{TyC(3%8p>Tz3P?=<{Uh1gx2w?Zppi0+1=+xG?lwc<*_0b@GyVcTkDv=KJmqQ-~JK^slYu@;Ow7*`GVC^tiEoQx|%@m1$`ew5_EPUtFR zucgr%8}!oE8vx0ZzY^+PRX*`s>ikJV$X>@g_qEaHXN(qm+~mR*?n|Y=%yo{gIDAiM zgAzrppTGfoSpIMV$bD};y`9c`^ayj66`JZhI$1Pl7T36$Qb$_E>HIwqD@BI>*)#p# zSwj?++^kF{9K^FLaoW4fG0;3q6Nlz2_saU9U&nDELy*}8C}K2YRU<<3sO)~Rsh6GX ze1jhvMsTRN%NFXjQ zUimVv;paCdKSnsYp=(s$dW#DQ;02(=QjnI^1Uv&idT~9EfH7q-jFNI&J*l(l+YNJ3 znyd!hvNk!zoR=waakrwRg3%N;RhiWu`gCW1f^{jCI`}cn>N%6vN5o}*&AttR7`>)` z5LOm~N=Y#ZaNvR>L^ltIoaaY6^(9Q+0woGrgv|WgfcmD>i@m_NUc5r-3NR(5?YYXMm! zi4V`(Sk130E`K~cE<=ofJJP<~w>no}qo)1@?44Pks|vsI>8JKRM3<2mta(zffI>C` zvIi%i#`$f>(u2@z29`+{3h8a{{6*X@8qLZONn$oGa|)_a31ZZTS;Q_Rq3tI~#7pK|khNrdOJMC%o&ewKIHa!AMGFWKdC zh51XoZXNC5OBDXurgYVPYjR;{jEIZ$?W|+9t{uA!re_X7^hX z*A9xwcTjOD_g}NXK@`)%j6-=G>ee3~Zcb<*yevI1lPY-qzTer!Yr2;|dXcGt;}}M{ z9!~r1x1A8=GnQVEe>Y%R=AEa0*9=b%KJgQY5E#f<^OK}$Rgu|y5_#X$sn4@rM!(v5 zs)X+jD1Wa_aghxWjiP&t+e6;A#;kz933#I~kzzx^^ zFBKtaxbyRHt+UWb`C>Pi~P;Yny_Ubnvc1)HkL==7dCNnXL*?l=e;^t8> zVmz8zmxB$`wYYdu-vz4Zz7l%61|KKPwG6ntVhQ&~YarHiQVaR#H@n?~FyIISBDR?B5wGRLF|)0f^VW>&$M2n9 z=w-RdK}oZ+3yAmZpWh=jxvEyvGzbXny8ZH8P(<{ekr5dSJQ};{V(|F1cel#MD}nC; z3&L%Gth(N9+SsRlCBlL{y41WY&$+6sg9f!p9e~hUxIEm(R?UkI=Pa~Y6VYF9Gdw(+ znNvsgS-|nRBpm&Nkq~}mCI6A4O)%d3o!&OnQl%lGauKe*&3ildq|f9Ss_dyEXlFy# z1n|}dh4Gr2X4eTrjp~a5N8h@SET!ICksZ^A7*7axwgo*FdJ4T>QiK0x=^XP4>A9O?S?8f8nZpv_sA6B5whu%de)90hMvZ zTN@{q?mOh-+g%lph@Dvg;eN(L4$BQPna(5S2Jg(tz(Y{Jk(HKy zH`yVfKK20~eH#kRj(gWJzvdNvZ=u~2AQJt2 zSU3g84~ifkiD?J$AKx-xLRokGmO}DsIf*TW&8ceW)+Z*l!%mvH%hxlDg@!5o`+s)6 z1c0{ruPj#5XsF6ZVgd*pr0ug1#h^j~IBaeBujl5jeei4TJ_ajJ)X5MbKl}DtRNe`& z8_GdIk6Gd@4Wv(**FolPIqS zbNB7O@2jBFyb0=j(_`8cC$c})imGCt$gIMOwM7_*I<^Pthw=^ z6T>U-5P?8^lQ*`o$ObvQWNoE1=}S+LJRm;3%73;y5^sRNk?^s~zJSklMW+-3l*z8; zl_Q?df5W5RzpfHv9cB*SHk=#|MN{PPc;ijxo!id%+lej--{r6cJq%x|D}$>iZuiG; z`d%@Bq|quuAFOVSd^yL}{^71|vd<$UD|L+H*4!?wsht>j(*@#l#ks>vPQ|p~Opt4=zZqSp+C@F>;BCXg)>F2O#GLK-R>=S>Dk z$(=KIC?RbJwmUy3#kLqKxi1bW*Vfp$YBN)J9>VHe=q|4s1^{%+rk)>`V*O%n8`Ddt z@d#J;NJ(1VH*xDAUw}^1O&4D; z6P$J)u9HPXH^me413MNW3|$n!8r|k<5A*O~Vq<)Pmr5Hs)?epi71Q)#^r(l2qs^~r zDwJCGbSY2L6c^8K`U#f<%)B%5`{u=~rME`p!=cMR`pAFjrq9yB_Fns*jCh0{ zR;qZ+8;ZqBD04YY*-q^ZrN*qy@^=a_d7OOr{aE3q98yqi(Nlz3Ym*xuyUeCPsa<6^ z6`fkh=wleoh*IF9>0_5QGD6>O6u^Lq;H28leh8{U%by{|(1%aH)qgns*6(tO&ZhN? zk;cnqXy>W*-jX`Ea>k^08se~$7Korta1OGnpDa|y7jD#yTcy7YAgioNaDWQoEmdi9UwU(~fQi z{eiZ0Ee1Ygoelgxs%^+8;ACDKF_&U2Fq>3lF>PR4jg8D zFd&tP#Pd+L!wnj=9S!qacwex7C$x;xRhzAEY3%Ly@Z`Tv`v`n=n6**F)-&UuTyMk> z#g;-<-G($QFe~bz+@X3#_W;R&*d{V--Pw0o$torjog|*eo$$kbrLf;8V~Wkhtgur^`GPZoX^B;&cl+q$ZJ6*dzbX zT@a5IU-Y9@$@sx@6>F|KH=96!E<1HzGOY;4m!5NQ{)l_fwcaZi1%m!pJF@R@nVftV z?an47YFq1;0HNPPcPUBDS8cSS2V@@vOkZr&Sz0-pAuby)o%dQoM@BQs+|y=d6yz?z z2+Wqo#gYfDQmdTCqq%y+5A7#P-kYDl7&g`+?W3n(tUjG;lNZ+tDSD7OvW+?-#T_Et z!ai{JGJZ3NY8ot4^etbd2l(555ILwUCuC;V+#^56Z+{sm#qOIrU`b=7Bpymv)V%Bs zsqQo z-$ebxbs^4>DUwf`JA(ReO3kbwih2IgE*tIP*;S@OQQB{#_c>f`=mG$^jNWIvvkQx9 zycm0cfuCaP5d~8n4liQkxUt>q{_von-FS)jAglSs;X8t)j{K8VHzS2J3*dCl{h5Hq zTb@Ip%);WYSB?zveY#i{E?v#qR;E(241XeJ6-!mnH)Lwxrw}5x#sSapkuL|I+Q9V*z}d?zRUiwigZu20fD)0 z_)#s`u51!Ab7;a17xM}#3TDs0zFM&;sE=<7z{HtkgfYU8Q9G@M_lphR_`xv|gU@c- zigbu#-3LMBUij$Ru}xDquFr}tj@yL5;r-rj(1oFhUXQk$g76%w=6YB?w|BZR>j5X92+h_ zgph^2{=wiANNxFxEk-2o^|aQ$oxa>U%hzREkvwfZ^*lyctH`rQ)R9+5yi;Uxws4)S z+4{xFM|M$=i4OUn77alWzmaJZJkBg>acp1XjSY?2J^Gr&prMESnksxUXzZ|umzK^S z7}dZ%rzML79l;&Sf-~>*Z=4=|Fc4_}d-8C4VZ5=wGGqAJKVK=0chKXEKVdB9vn3sO zppg*dM7l^1*GO)-LR74NSvTx~xR!#hnM#lpS1Mm7=8YD;OTCB+ zxxX0>i^<5c&WI?$9?()2i6|-Rg={tQE_Iolk@t-JVQ#dYu2P5O?=XlDF|t~Yx*1k` zf8kKl$liIeVrS!B%kKk06!RmiHc?%4JqHcjvdDZoWc^xZsGY`5xHX3ENiYtcCnH!G z$OSKqQ8IeF5_+`0!&3GzNIorMoKl9Hfp;OSjBQGaDl1rT{@StiCd1=q_Gr1E%`R#n zN^w5of$)cVtLbp@xpOO)II;7?mRve`9u{{Zz>u+@g@D!)UKZgAnaB|5d~5={k_*Ilqk)duRyXTJf|vXQBXM#O8PzW~As9 zE^WgfNfwy))qb8g@dVYN;8hed@nl}~siq27%&WCR0LH3#zJxkJ(y#{kDk>Sv$h?nk z3ZnJKHPonE{P4`dsr#UJ_Y+z%TG*zTy8ZM_wd0(3sBg&T4{vBdK)@?DjvfgN0@nGw zL94LMj?Rv}HEjo#ZR^480IIHQ-dVkdNth^H8>V>>1C@y;$(>= zDd{Zr3a1w+_m!B;d;&nENp%*?Fy z@S7n6s^sqPys(^WR;0^&5dD7rVPj(xdm4QBBQrlKDQRu2nC{7&C+LKfomHD(EIqeY z#+-HK=C`<=XI!5AnA?BVveYgC9GXXG1gHJNXYc zt&VLbp32U+&IwNegpiu_!^CO+GwzoHSv2dxq@5G>$4a$p7gK$+BT?eD#WXHoexa>y z8bU9%x5h;@&S`os3ZO%S+Am)svWv5`u>jQtq4(i-z})PKK1p1KTS%rxeS)DoB{*ni zsMj;XT|T^f$A&yOIM7%GM_kb;|3?aGtW}Y@qe)1^F>5cdDNO3;9jTK7=RS-Pnu@fz3?B z0*^fS)Y8fdu!haHfbw7X*Hbop3IVjzEwhC!b2w3SU0gz}`OWr~PPxn7*1%R?P|O6F zmTZ+y&=jCx0kwcO#cMc@at;1jSwZ~k1zCd&THog&5jo5z-~z~m7!78pu_D9qax239 zgM*PjVPikXUOnR^3k?~Sk(0{;iFQz&RiE3Stc`9R$z;X&n(%tS+K|iFh3?;`%b9v2 z*X!sM^5BRBJyxSBfwbh(ARFlD#^7c&&Dy;jF3VX_9<0zim)?{<56k6kWlf9QII^y) zD-}hxFM^$sbN+fQE7EL&ut(KMWBa4oE+w;SB*2VH24b5ocSqfINMk424QuWS?ia=q z@);AJ?mN>oPu8|j$yVt}`)sxp>}o|t@ToO&sHf!PDJ9fvE^!dC z`=xwp7t=wd#RyP-!GVAcKv{Uze{S@aMN;$IXf|%~9Z8FdJ^b9<^<^p<6-9Div+yX& z(e`(YvmKAtM`~`aFZQFHSe(^j8?NLBAqQWQ}x|77+JhpNo zjOeR<@L}+e!L=2vj!gXGYuaqq*s0AZTUt>%fco^LM4TdZYdf`$VaTF0rbW6hwH;i_GwAc(ds;dRw-d}AnHrYK*jh} zT&Rxa=v=0NWAn3LpGNJ!njH^7%!m8f-gfT!kV0ZS)XDlXu$JelA}%*rzMw!!EPlps z3B+c6#%P1yuC`Gr)Blkm=nSU`0%V7s4}HtBqB$E82q@u*X?F2|j{Zs@=#%|Exi82s zdlhywB|a2psQn3&k&Wmx+7ELX-+$^QN9<$>!anIs5Dq=O0kjqKbn}tc2RRwo{6+f0 z@zX4L4g05$PQAAJ5}#OxD4$!%u{3^;zPgRit*ao&{uI@2Gsxz0S9$cc{NXP~zq>LU zVP;l5USZp{s$CXp4-_TjE@jRwo+rqsan3xo8-HxqHy*Kj>J$_oM0j9_asSr+wS-B+ zp&Vr?J-y^fh(@Nbw;aoogQ7^|#zcFHzK>$sn=`=+z=;1wS?$&p@i2$dy(C}KRN);AyXRq4#3vJVuTLc zMX!TqYqy}tH{5=Zzp_@zpaC4aIO6z+Ryayyz$eFcA?E1JA^^7J2^z*y z=G*|5!4WeaphNtzlBLr#WRk-dPXKhyY;Un6@p{+Qz`GZ*7CneiIQbK#kj{W{akAA# zPUja;>z5R|x72Cg`VOy3Y^d@O2^#{QwYBSu(65mMHrT2SVf+WwXZ}`b5wbPr885Qh zS8Oi^zW?HQt4;jo3|i^QcNsunC_>N7Db4k%ClHHDDIGNa%iNL?s@b8>3(4;<)Catq z;DfwlK}TJ_j|q`{2MLI4(c>=bRvGr7;+MltcTVVCojeZb333$Tkj(; zwo=Kj$(j=f#}?(iq(Gg4*a;tf>4lMbJ2VsS60-b*-FU;E`bY)RX_@9~&F&vzEm$tz z0b#UiwyK*I&;a`-kr$K;SxvZE+;!$_PhQf&;z^M%Ff{m`?meSuYUgd`-JaCcd zT&v@C?Ioj`PFso<+b1rOH7)Qf%?De2+mYM@qFmnll}5?$FLFLthpL|cniAloM0Mpo z4e`Hn4--kYA{Dzzg~dW?TPhr~9{WrOQ4xzb%GIe|A6neK;#;aprp4)9z7LYk4FNi$ zsEdD%kA87gd-U!umsckqO=q9L>g;8h70GM1-ux3~!H`tv&-^*Ay%SbovF*s?f#xhQ zAek1pvBL$Mi4=)Y@)5n!vNM(|7L=n1(RVHOGqtw<7NT!@t8Eaa-6Ii$H@?#gt7@!E znzVmn6j_(f5L_O4X-!WGIqk|3gJRIaw)szC%{!VO8ab-SaOW?MaPoiDgHR9oqZ&tQ zwR}n|{^yO%{hT15^vZNe=Knr4k7}PO8ZqMJLe1$vKTksepjUU?6X;<6_n{gxP!ak6 c9onVe)_F+@Ibq5O8u+Imqat1O+~n>50sbrk4FCWD literal 90605 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 Hn7;Wx``@8F diff --git a/files/Model/Model-AIModuleCreate.svg b/files/Model/Model-AIModuleCreate.svg index 2da1d05..88103bb 100644 --- a/files/Model/Model-AIModuleCreate.svg +++ b/files/Model/Model-AIModuleCreate.svg @@ -1 +1 @@ -(0)(1)GenerateDelete Module(0)(1)BeginEndSelectModuleSelectGroupSelectDomaininteractionPromptAIGenerationRemoveModuleCreateModuleChoiceGrantUserTranslateDomainNewScopeneedConfigCheckAIConfig \ No newline at end of file +(0)(1)GenerateDelete Module(0)BeginEndSelectModuleSelectGroupSelectDomaininteractionPromptAIGenerationRemoveModuleCreateModuleChoiceGrantUserTranslateDomainNewScopeneedConfigCheckAIConfig \ No newline at end of file diff --git a/module-info.json b/module-info.json index f75cd95..9197b12 100644 --- a/module-info.json +++ b/module-info.json @@ -1,5 +1,5 @@ { - "date": "2024-07-03 11:25:02", + "date": "2024-07-03 11:45:49", "name": "AIBySimplicite", "format": "json", "files": ["AIBySimplicite.json"], From b20ec7757d2f98e34ab15f1d07f43bc7ba8f1ed5 Mon Sep 17 00:00:00 2001 From: "designer (Designer)" <> Date: Wed, 3 Jul 2024 12:42:36 +0200 Subject: [PATCH 11/74] Updated --- AIBySimplicite-openapi-3.0.2.yml | 6 - AIBySimplicite-swagger-2.0.yml | 6 - AIBySimplicite.json | 1621 ++++++++++++++---------------- README.md | 3 - module-info.json | 4 +- pom.xml | 4 +- 6 files changed, 765 insertions(+), 879 deletions(-) diff --git a/AIBySimplicite-openapi-3.0.2.yml b/AIBySimplicite-openapi-3.0.2.yml index c50a72b..f025d9e 100644 --- a/AIBySimplicite-openapi-3.0.2.yml +++ b/AIBySimplicite-openapi-3.0.2.yml @@ -130,9 +130,6 @@ components: description: Model type: string enum: - - ANTRHROPIC - - AIML - - HUGGINGFACE - MISTRAL - OPENAI aiSetConfig: @@ -452,9 +449,6 @@ paths: - schema: type: string enum: - - ANTRHROPIC - - AIML - - HUGGINGFACE - MISTRAL - OPENAI in: query diff --git a/AIBySimplicite-swagger-2.0.yml b/AIBySimplicite-swagger-2.0.yml index b1ddb37..0b1132d 100644 --- a/AIBySimplicite-swagger-2.0.yml +++ b/AIBySimplicite-swagger-2.0.yml @@ -261,9 +261,6 @@ paths: type: string required: false enum: - - ANTRHROPIC - - AIML - - HUGGINGFACE - MISTRAL - OPENAI - in: query @@ -434,9 +431,6 @@ definitions: description: Model type: string enum: - - ANTRHROPIC - - AIML - - HUGGINGFACE - MISTRAL - OPENAI aiSetConfig: diff --git a/AIBySimplicite.json b/AIBySimplicite.json index f341a93..53174e8 100644 --- a/AIBySimplicite.json +++ b/AIBySimplicite.json @@ -98,7 +98,7 @@ "mod_doc": { "path": "files/Model/Model-AiChartToCrossTable.svg", "mime": "image/svg+xml", - "name": "model.svg" + "name": "Model-AiChartToCrossTable.svg" }, "mod_image": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -115,7 +115,7 @@ "mod_doc": { "path": "files/Model/Model-AIGenData.svg", "mime": "image/svg+xml", - "name": "model.svg" + "name": "Model-AIGenData.svg" }, "mod_image": { "path": "files/Model/Model-AIGenData.png", @@ -136,7 +136,7 @@ "mod_doc": { "path": "files/Model/Model-AIModuleCreate.svg", "mime": "image/svg+xml", - "name": "model.svg" + "name": "Model-AIModuleCreate.svg" }, "mod_image": { "path": "files/Model/Model-AIModuleCreate.png", @@ -638,6 +638,8 @@ "userkey": "AI_CONF_MODELE", "item": { "lov_name": "AI_CONF_MODELE", + "lov_navbar": null, + "lov_navbar_opt": null, "row_module_id__mdl_name": "AIBySimplicite", "lov_model_id__mod_name": null, "lov_model_id__mod_image": null @@ -648,6 +650,8 @@ "userkey": "AI_EX_TYPE", "item": { "lov_name": "AI_EX_TYPE", + "lov_navbar": null, + "lov_navbar_opt": null, "row_module_id__mdl_name": "AIBySimplicite", "lov_model_id__mod_name": null, "lov_model_id__mod_image": null @@ -759,17 +763,6 @@ "icon": "img/system/translation", "field": "row_module_id", "list": [ - { - "object": "FieldListValue", - "userkey": "AI_CONF_MODELE~OPENAI~ENU", - "item": { - "lov_code_id__lov_list_id__lov_name": "AI_CONF_MODELE", - "lov_code_id__lov_code": "OPENAI", - "lov_lang": "ENU", - "lov_value": "OpenAi", - "row_module_id__mdl_name": "AIBySimplicite" - } - }, { "object": "FieldListValue", "userkey": "AI_CONF_MODELE~MISTRAL~ENU", @@ -783,34 +776,12 @@ }, { "object": "FieldListValue", - "userkey": "AI_CONF_MODELE~HUGGINGFACE~ENU", - "item": { - "lov_code_id__lov_list_id__lov_name": "AI_CONF_MODELE", - "lov_code_id__lov_code": "HUGGINGFACE", - "lov_lang": "ENU", - "lov_value": "huggingface", - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "FieldListValue", - "userkey": "AI_CONF_MODELE~AIML~ENU", - "item": { - "lov_code_id__lov_list_id__lov_name": "AI_CONF_MODELE", - "lov_code_id__lov_code": "AIML", - "lov_lang": "ENU", - "lov_value": "ai/ml", - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "FieldListValue", - "userkey": "AI_CONF_MODELE~ANTRHROPIC~ENU", + "userkey": "AI_CONF_MODELE~OPENAI~ENU", "item": { "lov_code_id__lov_list_id__lov_name": "AI_CONF_MODELE", - "lov_code_id__lov_code": "ANTRHROPIC", + "lov_code_id__lov_code": "OPENAI", "lov_lang": "ENU", - "lov_value": "Antrhropic (claude)", + "lov_value": "OpenAi", "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -836,39 +807,6 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, - { - "object": "FieldListValue", - "userkey": "AI_CONF_MODELE~HUGGINGFACE~FRA", - "item": { - "lov_code_id__lov_list_id__lov_name": "AI_CONF_MODELE", - "lov_code_id__lov_code": "HUGGINGFACE", - "lov_lang": "FRA", - "lov_value": "huggingface", - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "FieldListValue", - "userkey": "AI_CONF_MODELE~AIML~FRA", - "item": { - "lov_code_id__lov_list_id__lov_name": "AI_CONF_MODELE", - "lov_code_id__lov_code": "AIML", - "lov_lang": "FRA", - "lov_value": "ai/ml", - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "FieldListValue", - "userkey": "AI_CONF_MODELE~ANTRHROPIC~FRA", - "item": { - "lov_code_id__lov_list_id__lov_name": "AI_CONF_MODELE", - "lov_code_id__lov_code": "ANTRHROPIC", - "lov_lang": "FRA", - "lov_value": "Antrhropic (claude)", - "row_module_id__mdl_name": "AIBySimplicite" - } - }, { "object": "FieldListValue", "userkey": "AI_EX_TYPE~OTHER~ENU", @@ -893,23 +831,23 @@ }, { "object": "FieldListValue", - "userkey": "AI_EX_TYPE~CODE~FRA", + "userkey": "AI_EX_TYPE~OTHER~FRA", "item": { "lov_code_id__lov_list_id__lov_name": "AI_EX_TYPE", - "lov_code_id__lov_code": "CODE", + "lov_code_id__lov_code": "OTHER", "lov_lang": "FRA", - "lov_value": "Code", + "lov_value": "Autre", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "FieldListValue", - "userkey": "AI_EX_TYPE~OTHER~FRA", + "userkey": "AI_EX_TYPE~CODE~FRA", "item": { "lov_code_id__lov_list_id__lov_name": "AI_EX_TYPE", - "lov_code_id__lov_code": "OTHER", + "lov_code_id__lov_code": "CODE", "lov_lang": "FRA", - "lov_value": "Autre", + "lov_value": "Code", "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -950,7 +888,10 @@ "fld_name": "aiActPrompt", "fld_dbname": null, "fld_visible": "3", - "fld_updatable": "1", + "fld_updatable": [ + "2", + "3" + ], "fld_required": false, "fld_fonctid": false, "fld_research": null, @@ -994,7 +935,10 @@ "fld_name": "aiApiKey", "fld_dbname": null, "fld_visible": "3", - "fld_updatable": "1", + "fld_updatable": [ + "2", + "3" + ], "fld_required": false, "fld_fonctid": false, "fld_research": null, @@ -1038,7 +982,10 @@ "fld_name": "aiFieldsParam", "fld_dbname": "ai_fields_param", "fld_visible": "2", - "fld_updatable": "1", + "fld_updatable": [ + "2", + "3" + ], "fld_required": false, "fld_fonctid": false, "fld_research": "1", @@ -1082,7 +1029,10 @@ "fld_name": "aiFldSpe", "fld_dbname": "ai_fld_spe", "fld_visible": "3", - "fld_updatable": "1", + "fld_updatable": [ + "2", + "3" + ], "fld_required": false, "fld_fonctid": false, "fld_research": "1", @@ -1126,7 +1076,10 @@ "fld_name": "aiGrantUser", "fld_dbname": null, "fld_visible": "3", - "fld_updatable": "1", + "fld_updatable": [ + "2", + "3" + ], "fld_required": true, "fld_fonctid": false, "fld_research": null, @@ -1170,7 +1123,10 @@ "fld_name": "aiSelectProcess", "fld_dbname": null, "fld_visible": "3", - "fld_updatable": "1", + "fld_updatable": [ + "2", + "3" + ], "fld_required": true, "fld_fonctid": false, "fld_research": null, @@ -1214,7 +1170,10 @@ "fld_name": "aiSetActive", "fld_dbname": null, "fld_visible": "3", - "fld_updatable": "1", + "fld_updatable": [ + "2", + "3" + ], "fld_required": true, "fld_fonctid": false, "fld_research": "1", @@ -1258,7 +1217,7 @@ "fld_name": "aiSetConfig", "fld_dbname": "ai_set_config", "fld_visible": "2", - "fld_updatable": "0", + "fld_updatable": ["0"], "fld_required": false, "fld_fonctid": false, "fld_research": "1", @@ -1302,7 +1261,10 @@ "fld_name": "aiSetModele", "fld_dbname": "ai_set_modele", "fld_visible": "3", - "fld_updatable": "1", + "fld_updatable": [ + "2", + "3" + ], "fld_required": true, "fld_fonctid": true, "fld_research": "1", @@ -1346,7 +1308,10 @@ "fld_name": "aiSetUrl", "fld_dbname": "ai_set_url", "fld_visible": "3", - "fld_updatable": "1", + "fld_updatable": [ + "2", + "3" + ], "fld_required": false, "fld_fonctid": false, "fld_research": "1", @@ -1400,6 +1365,7 @@ "tpl_min": null, "tpl_image": null, "tpl_grid": null, + "tpl_context": null, "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -1412,6 +1378,7 @@ "tpl_min": null, "tpl_image": null, "tpl_grid": null, + "tpl_context": null, "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -1424,6 +1391,7 @@ "tpl_min": null, "tpl_image": null, "tpl_grid": null, + "tpl_context": null, "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -1436,6 +1404,7 @@ "tpl_min": null, "tpl_image": null, "tpl_grid": null, + "tpl_context": null, "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -1448,6 +1417,7 @@ "tpl_min": null, "tpl_image": null, "tpl_grid": null, + "tpl_context": null, "row_module_id__mdl_name": "AIBySimplicite" } } @@ -1725,9 +1695,11 @@ "obo_exportorder": null, "obo_distinct": false, "obo_indexable": false, - "obo_groupby": null, + "obo_groupby": false, "obo_dfltref": null, "obo_template_id__tpl_name": "AiConfiguration", + "obo_tpl_list_id__tpl_name": null, + "obo_tpl_list_id__tpl_context": null, "obo_copy": true, "obo_export": ["1"], "obo_pagine": true, @@ -1744,13 +1716,13 @@ "obo_useform": true, "obo_title": null, "obo_icon": "icon/color/define", - "obo_refcount": null, - "obo_tree": null, + "obo_refcount": false, + "obo_tree": false, "obo_viewmode": "T", "obo_historic": null, "obo_printable": true, "obo_followlink": true, - "obo_mergeable": null, + "obo_mergeable": false, "obo_social": ["1"], "obo_rowid_id__fld_name": null, "obo_extend_id__obj_name": null, @@ -1781,7 +1753,7 @@ "obo_sortable": true, "obo_list_areas": null, "obo_minifiable": "M", - "obo_minified": null, + "obo_minified": false, "obo_permalink": null, "obo_btn_searchform": true, "aiFieldsParam": null @@ -1817,7 +1789,7 @@ "obf_ref_order": null, "obf_fld_visible": null, "obf_fld_required": null, - "obf_fld_updatable": "0", + "obf_fld_updatable": ["0"], "obf_fld_research": null, "obf_fld_more": null, "obf_fld_listmore": null, @@ -2806,7 +2778,7 @@ }, "pcs_max_duration": null, "pcs_duration_unit": "D", - "pcs_persitant": null, + "pcs_persitant": false, "pcs_persist_depth": null, "pcs_alert_id__alt_name": null, "pcs_compensate_id__pcs_name": null, @@ -2839,7 +2811,7 @@ }, "pcs_max_duration": null, "pcs_duration_unit": "D", - "pcs_persitant": null, + "pcs_persitant": false, "pcs_persist_depth": null, "pcs_alert_id__alt_name": null, "pcs_compensate_id__pcs_name": null, @@ -3699,30 +3671,30 @@ "list": [ { "object": "BPMData", - "userkey": "AIGenData~GGD-END~Forward~PARAM=1", + "userkey": "AIGenData~GGD-END~Forward~Page", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIGenData", "dta_activity_id__acy_step": "GGD-END", "dta_activity_id__acy_name": "End", "dta_group": "Forward", - "dta_name": "PARAM:1", + "dta_name": "Page", "dta_order": 1, - "dta_value": "GGD_0100.Field.row_id", + "dta_value": "[EXPR:HTMLTool.getFormURL(\"Module\", null, \"[PARAM:1]\", \"nav=add\")]", "dta_field_id__fld_name": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "BPMData", - "userkey": "AIGenData~GGD-END~Forward~Page", + "userkey": "AIGenData~GGD-END~Forward~PARAM=1", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIGenData", "dta_activity_id__acy_step": "GGD-END", "dta_activity_id__acy_name": "End", "dta_group": "Forward", - "dta_name": "Page", + "dta_name": "PARAM:1", "dta_order": 1, - "dta_value": "[EXPR:HTMLTool.getFormURL(\"Module\", null, \"[PARAM:1]\", \"nav=add\")]", + "dta_value": "GGD_0100.Field.row_id", "dta_field_id__fld_name": null, "row_module_id__mdl_name": "AIBySimplicite" } @@ -3954,45 +3926,45 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate~AIC_0017~Field~row_module_id", + "userkey": "AIModuleCreate~AIC_0017~Field~viw_icon", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0017", "dta_activity_id__acy_name": "NewScope", "dta_group": "Field", - "dta_name": "row_module_id", + "dta_name": "viw_icon", "dta_order": 1, - "dta_value": "[AIC_0010.Field.row_id]", + "dta_value": null, "dta_field_id__fld_name": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "BPMData", - "userkey": "AIModuleCreate~AIC_0017~Field~viw_icon", + "userkey": "AIModuleCreate~AIC_0017~Field~viw_type", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0017", "dta_activity_id__acy_name": "NewScope", "dta_group": "Field", - "dta_name": "viw_icon", + "dta_name": "viw_type", "dta_order": 1, - "dta_value": null, + "dta_value": "H", "dta_field_id__fld_name": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "BPMData", - "userkey": "AIModuleCreate~AIC_0017~Field~viw_type", + "userkey": "AIModuleCreate~AIC_0017~Field~row_module_id", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0017", "dta_activity_id__acy_name": "NewScope", "dta_group": "Field", - "dta_name": "viw_type", + "dta_name": "row_module_id", "dta_order": 1, - "dta_value": "H", + "dta_value": "[AIC_0010.Field.row_id]", "dta_field_id__fld_name": null, "row_module_id__mdl_name": "AIBySimplicite" } @@ -4014,31 +3986,31 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate~AIC_0020~Data~Template", + "userkey": "AIModuleCreate~AIC_0020~Data~AREA=1", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0020", "dta_activity_id__acy_name": "GrantUser", "dta_group": "Data", - "dta_name": "Template", + "dta_name": "AREA:1", "dta_order": 1, - "dta_value": "Base", - "dta_field_id__fld_name": null, + "dta_value": "1", + "dta_field_id__fld_name": "aiGrantUser", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "BPMData", - "userkey": "AIModuleCreate~AIC_0020~Data~AREA=1", + "userkey": "AIModuleCreate~AIC_0020~Data~Template", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0020", "dta_activity_id__acy_name": "GrantUser", "dta_group": "Data", - "dta_name": "AREA:1", + "dta_name": "Template", "dta_order": 1, - "dta_value": "1", - "dta_field_id__fld_name": "aiGrantUser", + "dta_value": "Base", + "dta_field_id__fld_name": null, "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -4831,18 +4803,10 @@ "list": [ { "object": "Map", - "userkey": "AIDomain~ViewSimple(DaaModulesFilter)~5", + "userkey": "AIDomain~~5", "item": { "map_domain_id__obd_name": "AIDomain", - "map_object_id__obj_name": null, - "map_process_id__pcs_name": null, - "map_object": { - "item": {"viw_name": "DaaModulesFilter"}, - "icon": "img/system/view", - "label": "Simple view", - "userkeylabel": "DaaModulesFilter", - "object": "ViewSimple" - }, + "map_object": null, "map_order": 5, "map_ext": true, "row_module_id__mdl_name": "AIBySimplicite" @@ -4853,8 +4817,6 @@ "userkey": "AIDomain~BPMProcess(AIModuleCreate)~150", "item": { "map_domain_id__obd_name": "AIDomain", - "map_object_id__obj_name": null, - "map_process_id__pcs_name": null, "map_object": { "item": {"pcs_name": "AIModuleCreate"}, "icon": "img/system/process", @@ -4872,8 +4834,6 @@ "userkey": "AIDomain~BPMProcess(AIGenData)~200", "item": { "map_domain_id__obd_name": "AIDomain", - "map_object_id__obj_name": null, - "map_process_id__pcs_name": "AIGenData", "map_object": { "item": {"pcs_name": "AIGenData"}, "icon": "img/system/process", @@ -4891,8 +4851,6 @@ "userkey": "AIDomain~ObjectExternal(AIChatBot)~300", "item": { "map_domain_id__obd_name": "AIDomain", - "map_object_id__obj_name": null, - "map_process_id__pcs_name": null, "map_object": { "item": {"obe_name": "AIChatBot"}, "icon": "img/system/external_object", @@ -4910,8 +4868,6 @@ "userkey": "AIDomain~ObjectInternal(AiSettings)~400", "item": { "map_domain_id__obd_name": "AIDomain", - "map_object_id__obj_name": null, - "map_process_id__pcs_name": null, "map_object": { "item": {"obo_name": "AiSettings"}, "icon": "img/system/business_object", @@ -5054,7 +5010,7 @@ "res_file": { "path": "resources/Disposition/default/AI_STYLE.less", "mime": "text/less", - "name": "CHATBOT_STYLE.less" + "name": "AI_STYLE.less" }, "res_image": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -5103,30 +5059,30 @@ "res_image": { "path": "resources/Disposition/default/ai_module.svg", "mime": "image/svg+xml", - "name": "Module_IA.svg" + "name": "ai_module.svg" }, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "Resource", - "userkey": "ObjectExternal(AIProcessResource)~ANY~CHAT_BOT_CSS", + "userkey": "ObjectExternal(AIChatBot)~ANY~STYLES", "item": { "res_object": { - "item": {"obe_name": "AIProcessResource"}, + "item": {"obe_name": "AIChatBot"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIProcessResource", + "userkeylabel": "AIChatBot", "object": "ObjectExternal" }, "res_type": "CSS", "res_lang": "ANY", - "res_code": "CHAT_BOT_CSS", + "res_code": "STYLES", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AIProcessResource/CHAT_BOT_CSS.less", + "path": "resources/ObjectExternal/AIChatBot/STYLES.less", "mime": "text/less", - "name": "CHAT_BOT_CSS.less" + "name": "STYLES.less" }, "res_image": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -5134,47 +5090,23 @@ }, { "object": "Resource", - "userkey": "ObjectExternal(AIProcessResource)~ANY~CHAT_BOT_MODEL", + "userkey": "ObjectExternal(AIChatBot)~ANY~HTML", "item": { "res_object": { - "item": {"obe_name": "AIProcessResource"}, + "item": {"obe_name": "AIChatBot"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIProcessResource", + "userkeylabel": "AIChatBot", "object": "ObjectExternal" }, "res_type": "HTML", "res_lang": "ANY", - "res_code": "CHAT_BOT_MODEL", + "res_code": "HTML", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AIProcessResource/CHAT_BOT_MODEL.html", + "path": "resources/ObjectExternal/AIChatBot/HTML.html", "mime": "text/html", - "name": "CHAT_BOT_MODEL.html" - }, - "res_image": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "Resource", - "userkey": "ObjectExternal(AIProcessResource)~ANY~AI_GEN_MODEL", - "item": { - "res_object": { - "item": {"obe_name": "AIProcessResource"}, - "icon": "img/system/external_object", - "label": "External object", - "userkeylabel": "AIProcessResource", - "object": "ObjectExternal" - }, - "res_type": "JS", - "res_lang": "ANY", - "res_code": "AI_GEN_MODEL", - "res_cached": false, - "res_file": { - "path": "resources/ObjectExternal/AIProcessResource/AI_GEN_MODEL.js", - "mime": "text/javascript", - "name": "AI_GEN_MODEL.js" + "name": "HTML.html" }, "res_image": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -5182,47 +5114,23 @@ }, { "object": "Resource", - "userkey": "ObjectExternal(AIProcessResource)~ANY~CHAT_BOT_SCRIPT", + "userkey": "ObjectExternal(AIChatBot)~ANY~SCRIPT", "item": { "res_object": { - "item": {"obe_name": "AIProcessResource"}, + "item": {"obe_name": "AIChatBot"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIProcessResource", + "userkeylabel": "AIChatBot", "object": "ObjectExternal" }, "res_type": "JS", "res_lang": "ANY", - "res_code": "CHAT_BOT_SCRIPT", + "res_code": "SCRIPT", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AIProcessResource/CHAT_BOT_SCRIPT.js", + "path": "resources/ObjectExternal/AIChatBot/SCRIPT.js", "mime": "text/javascript", - "name": "CHAT_BOT_SCRIPT.js" - }, - "res_image": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "Resource", - "userkey": "ObjectExternal(AIProcessResource)~ANY~CONTEXT_DIRECT_PROMPT", - "item": { - "res_object": { - "item": {"obe_name": "AIProcessResource"}, - "icon": "img/system/external_object", - "label": "External object", - "userkeylabel": "AIProcessResource", - "object": "ObjectExternal" - }, - "res_type": "OTHER", - "res_lang": "ANY", - "res_code": "CONTEXT_DIRECT_PROMPT", - "res_cached": false, - "res_file": { - "path": "resources/ObjectExternal/AIProcessResource/CONTEXT_DIRECT_PROMPT.text", - "mime": "application/octet-stream", - "name": "CONTEXT_DIRECT_PROMPT.text" + "name": "SCRIPT.js" }, "res_image": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -5230,23 +5138,23 @@ }, { "object": "Resource", - "userkey": "ObjectExternal(AIProcessResource)~ANY~CONTEXT_INTERACTION_PROMPT", + "userkey": "ObjectExternal(AIExpTool)~ANY~STYLES", "item": { "res_object": { - "item": {"obe_name": "AIProcessResource"}, + "item": {"obe_name": "AIExpTool"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIProcessResource", + "userkeylabel": "AIExpTool", "object": "ObjectExternal" }, - "res_type": "OTHER", + "res_type": "CSS", "res_lang": "ANY", - "res_code": "CONTEXT_INTERACTION_PROMPT", + "res_code": "STYLES", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AIProcessResource/CONTEXT_INTERACTION_PROMPT.text", - "mime": "application/octet-stream", - "name": "CONTEXT_INTERACTION_PROMPT.text" + "path": "resources/ObjectExternal/AIExpTool/STYLES.less", + "mime": "text/less", + "name": "STYLES.less" }, "res_image": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -5254,23 +5162,23 @@ }, { "object": "Resource", - "userkey": "ObjectExternal(AIProcessResource)~ANY~CROSSTABLE_PROMPT", + "userkey": "ObjectExternal(AIExpTool)~ANY~HTML", "item": { "res_object": { - "item": {"obe_name": "AIProcessResource"}, + "item": {"obe_name": "AIExpTool"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIProcessResource", + "userkeylabel": "AIExpTool", "object": "ObjectExternal" }, - "res_type": "OTHER", + "res_type": "HTML", "res_lang": "ANY", - "res_code": "CROSSTABLE_PROMPT", + "res_code": "HTML", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AIProcessResource/CROSSTABLE_PROMPT.text", - "mime": "application/octet-stream", - "name": "AIProcessResource_CROSSTABLE_PROMPT.text" + "path": "resources/ObjectExternal/AIExpTool/HTML.html", + "mime": "text/html", + "name": "HTML.html" }, "res_image": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -5278,23 +5186,23 @@ }, { "object": "Resource", - "userkey": "ObjectExternal(AIProcessResource)~ANY~MODELE_CLASSE", + "userkey": "ObjectExternal(AIExpTool)~ANY~SCRIPT", "item": { "res_object": { - "item": {"obe_name": "AIProcessResource"}, + "item": {"obe_name": "AIExpTool"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIProcessResource", + "userkeylabel": "AIExpTool", "object": "ObjectExternal" }, - "res_type": "OTHER", + "res_type": "JS", "res_lang": "ANY", - "res_code": "MODELE_CLASSE", + "res_code": "SCRIPT", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AIProcessResource/MODELE_CLASSE.text", - "mime": "application/octet-stream", - "name": "MODELE_CLASSE.text" + "path": "resources/ObjectExternal/AIExpTool/SCRIPT.js", + "mime": "text/javascript", + "name": "SCRIPT.js" }, "res_image": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -5374,23 +5282,23 @@ }, { "object": "Resource", - "userkey": "ObjectExternal(AIExpTool)~ANY~STYLES", + "userkey": "ObjectExternal(AIProcessResource)~ANY~CHAT_BOT_CSS", "item": { "res_object": { - "item": {"obe_name": "AIExpTool"}, + "item": {"obe_name": "AIProcessResource"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIExpTool", + "userkeylabel": "AIProcessResource", "object": "ObjectExternal" }, "res_type": "CSS", "res_lang": "ANY", - "res_code": "STYLES", + "res_code": "CHAT_BOT_CSS", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AIExpTool/STYLES.less", + "path": "resources/ObjectExternal/AIProcessResource/CHAT_BOT_CSS.less", "mime": "text/less", - "name": "STYLES.less" + "name": "CHAT_BOT_CSS.less" }, "res_image": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -5398,23 +5306,23 @@ }, { "object": "Resource", - "userkey": "ObjectExternal(AIExpTool)~ANY~HTML", + "userkey": "ObjectExternal(AIProcessResource)~ANY~CHAT_BOT_MODEL", "item": { "res_object": { - "item": {"obe_name": "AIExpTool"}, + "item": {"obe_name": "AIProcessResource"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIExpTool", + "userkeylabel": "AIProcessResource", "object": "ObjectExternal" }, "res_type": "HTML", "res_lang": "ANY", - "res_code": "HTML", + "res_code": "CHAT_BOT_MODEL", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AIExpTool/HTML.html", + "path": "resources/ObjectExternal/AIProcessResource/CHAT_BOT_MODEL.html", "mime": "text/html", - "name": "HTML.html" + "name": "CHAT_BOT_MODEL.html" }, "res_image": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -5422,23 +5330,23 @@ }, { "object": "Resource", - "userkey": "ObjectExternal(AIExpTool)~ANY~SCRIPT", + "userkey": "ObjectExternal(AIProcessResource)~ANY~AI_GEN_MODEL", "item": { "res_object": { - "item": {"obe_name": "AIExpTool"}, + "item": {"obe_name": "AIProcessResource"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIExpTool", + "userkeylabel": "AIProcessResource", "object": "ObjectExternal" }, "res_type": "JS", "res_lang": "ANY", - "res_code": "SCRIPT", + "res_code": "AI_GEN_MODEL", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AIExpTool/SCRIPT.js", + "path": "resources/ObjectExternal/AIProcessResource/AI_GEN_MODEL.js", "mime": "text/javascript", - "name": "SCRIPT.js" + "name": "AI_GEN_MODEL.js" }, "res_image": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -5446,23 +5354,23 @@ }, { "object": "Resource", - "userkey": "ObjectExternal(AIChatBot)~ANY~STYLES", + "userkey": "ObjectExternal(AIProcessResource)~ANY~CHAT_BOT_SCRIPT", "item": { "res_object": { - "item": {"obe_name": "AIChatBot"}, + "item": {"obe_name": "AIProcessResource"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIChatBot", + "userkeylabel": "AIProcessResource", "object": "ObjectExternal" }, - "res_type": "CSS", + "res_type": "JS", "res_lang": "ANY", - "res_code": "STYLES", + "res_code": "CHAT_BOT_SCRIPT", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AIChatBot/STYLES.less", - "mime": "text/less", - "name": "STYLES.less" + "path": "resources/ObjectExternal/AIProcessResource/CHAT_BOT_SCRIPT.js", + "mime": "text/javascript", + "name": "CHAT_BOT_SCRIPT.js" }, "res_image": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -5470,23 +5378,23 @@ }, { "object": "Resource", - "userkey": "ObjectExternal(AIChatBot)~ANY~HTML", + "userkey": "ObjectExternal(AIProcessResource)~ANY~CONTEXT_DIRECT_PROMPT", "item": { "res_object": { - "item": {"obe_name": "AIChatBot"}, + "item": {"obe_name": "AIProcessResource"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIChatBot", + "userkeylabel": "AIProcessResource", "object": "ObjectExternal" }, - "res_type": "HTML", + "res_type": "OTHER", "res_lang": "ANY", - "res_code": "HTML", + "res_code": "CONTEXT_DIRECT_PROMPT", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AIChatBot/HTML.html", - "mime": "text/html", - "name": "HTML.html" + "path": "resources/ObjectExternal/AIProcessResource/CONTEXT_DIRECT_PROMPT.text", + "mime": "application/octet-stream", + "name": "CONTEXT_DIRECT_PROMPT.text" }, "res_image": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -5494,23 +5402,71 @@ }, { "object": "Resource", - "userkey": "ObjectExternal(AIChatBot)~ANY~SCRIPT", + "userkey": "ObjectExternal(AIProcessResource)~ANY~CONTEXT_INTERACTION_PROMPT", "item": { "res_object": { - "item": {"obe_name": "AIChatBot"}, + "item": {"obe_name": "AIProcessResource"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIChatBot", + "userkeylabel": "AIProcessResource", "object": "ObjectExternal" }, - "res_type": "JS", + "res_type": "OTHER", "res_lang": "ANY", - "res_code": "SCRIPT", + "res_code": "CONTEXT_INTERACTION_PROMPT", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AIChatBot/SCRIPT.js", - "mime": "text/javascript", - "name": "SCRIPT.js" + "path": "resources/ObjectExternal/AIProcessResource/CONTEXT_INTERACTION_PROMPT.text", + "mime": "application/octet-stream", + "name": "CONTEXT_INTERACTION_PROMPT.text" + }, + "res_image": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "Resource", + "userkey": "ObjectExternal(AIProcessResource)~ANY~CROSSTABLE_PROMPT", + "item": { + "res_object": { + "item": {"obe_name": "AIProcessResource"}, + "icon": "img/system/external_object", + "label": "External object", + "userkeylabel": "AIProcessResource", + "object": "ObjectExternal" + }, + "res_type": "OTHER", + "res_lang": "ANY", + "res_code": "CROSSTABLE_PROMPT", + "res_cached": false, + "res_file": { + "path": "resources/ObjectExternal/AIProcessResource/CROSSTABLE_PROMPT.text", + "mime": "application/octet-stream", + "name": "CROSSTABLE_PROMPT.text" + }, + "res_image": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "Resource", + "userkey": "ObjectExternal(AIProcessResource)~ANY~MODELE_CLASSE", + "item": { + "res_object": { + "item": {"obe_name": "AIProcessResource"}, + "icon": "img/system/external_object", + "label": "External object", + "userkeylabel": "AIProcessResource", + "object": "ObjectExternal" + }, + "res_type": "OTHER", + "res_lang": "ANY", + "res_code": "MODELE_CLASSE", + "res_cached": false, + "res_file": { + "path": "resources/ObjectExternal/AIProcessResource/MODELE_CLASSE.text", + "mime": "application/octet-stream", + "name": "MODELE_CLASSE.text" }, "res_image": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -5598,13 +5554,13 @@ "list": [ { "object": "Script", - "userkey": "AITools", + "userkey": "AIData", "item": { - "scr_code": "AITools", + "scr_code": "AIData", "scr_file": { - "path": "src/com/simplicite/commons/AIBySimplicite/AITools.java", + "path": "src/com/simplicite/commons/AIBySimplicite/AIData.java", "mime": "text/plain", - "name": "AITools.java" + "name": "AIData.java" }, "scr_type": "JSR", "row_module_id__mdl_name": "AIBySimplicite" @@ -5612,13 +5568,13 @@ }, { "object": "Script", - "userkey": "AIData", + "userkey": "AITools", "item": { - "scr_code": "AIData", + "scr_code": "AITools", "scr_file": { - "path": "src/com/simplicite/commons/AIBySimplicite/AIData.java", + "path": "src/com/simplicite/commons/AIBySimplicite/AITools.java", "mime": "text/plain", - "name": "AIData.java" + "name": "AITools.java" }, "scr_type": "JSR", "row_module_id__mdl_name": "AIBySimplicite" @@ -5668,74 +5624,6 @@ } ] }, - { - "object": "ScriptUsage", - "label": "Shared code usage", - "icon": "img/system/shared_code", - "field": "row_module_id", - "list": [ - { - "object": "ScriptUsage", - "userkey": "ObjectExternal(AIProcessResource)~AIModel", - "item": { - "scu_object": { - "item": {"obe_name": "AIProcessResource"}, - "icon": "img/system/external_object", - "label": "External object", - "userkeylabel": "AIProcessResource", - "object": "ObjectExternal" - }, - "scu_script_id__scr_code": "AIModel", - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "ScriptUsage", - "userkey": "ObjectExternal(AIRestAPI)~AIField", - "item": { - "scu_object": { - "item": {"obe_name": "AIRestAPI"}, - "icon": "img/system/external_object", - "label": "External object", - "userkeylabel": "AIRestAPI", - "object": "ObjectExternal" - }, - "scu_script_id__scr_code": "AIField", - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "ScriptUsage", - "userkey": "ObjectExternal(AIRestAPI)~AITools", - "item": { - "scu_object": { - "item": {"obe_name": "AIRestAPI"}, - "icon": "img/system/external_object", - "label": "External object", - "userkeylabel": "AIRestAPI", - "object": "ObjectExternal" - }, - "scu_script_id__scr_code": "AITools", - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "ScriptUsage", - "userkey": "ObjectInternal(Field)~AIField", - "item": { - "scu_object": { - "item": {"obo_name": "Field"}, - "icon": "img/system/business_object", - "label": "Business object", - "userkeylabel": "Field", - "object": "ObjectInternal" - }, - "scu_script_id__scr_code": "AIField", - "row_module_id__mdl_name": "AIBySimplicite" - } - } - ] - }, { "object": "TranslateAction", "label": "Action translation", @@ -5744,442 +5632,442 @@ "list": [ { "object": "TranslateAction", - "userkey": "Action(AIAddData)~ENU", + "userkey": "Action(AI_SENT)~ENU", "item": { "tsl_object": { - "item": {"act_name": "AIAddData"}, + "item": {"act_name": "AI_SENT"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIAddData", + "userkeylabel": "AI_SENT", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Data generation", + "tsl_value": "Sent", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "Action(AIAddData)~FRA", + "userkey": "Action(AI_SENT)~FRA", "item": { "tsl_object": { - "item": {"act_name": "AIAddData"}, + "item": {"act_name": "AI_SENT"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIAddData", + "userkeylabel": "AI_SENT", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Génération de données", + "tsl_value": "Envoyé", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "Action(AI_SENT)~ENU", + "userkey": "Action(AIAutoGenModule)~ENU", "item": { "tsl_object": { - "item": {"act_name": "AI_SENT"}, + "item": {"act_name": "AIAutoGenModule"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AI_SENT", + "userkeylabel": "AIAutoGenModule", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Sent", + "tsl_value": "Model generation by AI", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "Action(AI_SENT)~FRA", + "userkey": "Action(AIAutoGenModule)~FRA", "item": { "tsl_object": { - "item": {"act_name": "AI_SENT"}, + "item": {"act_name": "AIAutoGenModule"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AI_SENT", + "userkeylabel": "AIAutoGenModule", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Envoyé", + "tsl_value": "Génération du modèle par l'IA", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "Action(AICalculateFieldJs)~ENU", + "userkey": "Action(AI_GENDATA_RETRY)~ENU", "item": { "tsl_object": { - "item": {"act_name": "AICalculateFieldJs"}, + "item": {"act_name": "AI_GENDATA_RETRY"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AICalculateFieldJs", + "userkeylabel": "AI_GENDATA_RETRY", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Save with AI", + "tsl_value": "Relaunch", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "Action(AICalculateFieldJs)~FRA", + "userkey": "Action(AI_GENDATA_RETRY)~FRA", "item": { "tsl_object": { - "item": {"act_name": "AICalculateFieldJs"}, + "item": {"act_name": "AI_GENDATA_RETRY"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AICalculateFieldJs", + "userkeylabel": "AI_GENDATA_RETRY", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Enregistrer avec IA", + "tsl_value": "Relancer", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "Action(AIGenerate)~ENU", + "userkey": "Action(AI_ACTIVE_SETTINGS)~ENU", "item": { "tsl_object": { - "item": {"act_name": "AIGenerate"}, + "item": {"act_name": "AI_ACTIVE_SETTINGS"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIGenerate", + "userkeylabel": "AI_ACTIVE_SETTINGS", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Generate the data model", + "tsl_value": "Activate", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "Action(AIGenerate)~FRA", + "userkey": "Action(AI_ACTIVE_SETTINGS)~FRA", "item": { "tsl_object": { - "item": {"act_name": "AIGenerate"}, + "item": {"act_name": "AI_ACTIVE_SETTINGS"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIGenerate", + "userkeylabel": "AI_ACTIVE_SETTINGS", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Générer le modèle de données", + "tsl_value": "Activer", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "Action(AI_CLEAR_HIST)~ENU", + "userkey": "Action(AIButtonSkip)~ENU", "item": { "tsl_object": { - "item": {"act_name": "AI_CLEAR_HIST"}, + "item": {"act_name": "AIButtonSkip"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AI_CLEAR_HIST", + "userkeylabel": "AIButtonSkip", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Clear historic", + "tsl_value": "Button skip", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "Action(AI_CLEAR_HIST)~FRA", + "userkey": "Action(AIButtonSkip)~FRA", "item": { "tsl_object": { - "item": {"act_name": "AI_CLEAR_HIST"}, + "item": {"act_name": "AIButtonSkip"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AI_CLEAR_HIST", + "userkeylabel": "AIButtonSkip", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Effacer l'historique", + "tsl_value": "Saut de bouton", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "Action(AI_GENDATA_RETRY)~ENU", + "userkey": "Action(AI_CLEAR_HIST)~ENU", "item": { "tsl_object": { - "item": {"act_name": "AI_GENDATA_RETRY"}, + "item": {"act_name": "AI_CLEAR_HIST"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AI_GENDATA_RETRY", + "userkeylabel": "AI_CLEAR_HIST", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Relaunch", + "tsl_value": "Clear historic", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "Action(AI_GENDATA_RETRY)~FRA", + "userkey": "Action(AI_CLEAR_HIST)~FRA", "item": { "tsl_object": { - "item": {"act_name": "AI_GENDATA_RETRY"}, + "item": {"act_name": "AI_CLEAR_HIST"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AI_GENDATA_RETRY", + "userkeylabel": "AI_CLEAR_HIST", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Relancer", + "tsl_value": "Effacer l'historique", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "Action(AIButtonSkip)~ENU", + "userkey": "Action(AIAddData)~ENU", "item": { "tsl_object": { - "item": {"act_name": "AIButtonSkip"}, + "item": {"act_name": "AIAddData"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIButtonSkip", + "userkeylabel": "AIAddData", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Button skip", + "tsl_value": "Data generation", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "Action(AIButtonSkip)~FRA", + "userkey": "Action(AIAddData)~FRA", "item": { "tsl_object": { - "item": {"act_name": "AIButtonSkip"}, + "item": {"act_name": "AIAddData"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIButtonSkip", + "userkeylabel": "AIAddData", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Saut de bouton", + "tsl_value": "Génération de données", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "Action(AIDeleteModule)~ENU", + "userkey": "Action(AIDirectPrompt)~ENU", "item": { "tsl_object": { - "item": {"act_name": "AIDeleteModule"}, + "item": {"act_name": "AIDirectPrompt"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIDeleteModule", + "userkeylabel": "AIDirectPrompt", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Delete module", + "tsl_value": "Direct prompt", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "Action(AIDeleteModule)~FRA", + "userkey": "Action(AIDirectPrompt)~FRA", "item": { "tsl_object": { - "item": {"act_name": "AIDeleteModule"}, + "item": {"act_name": "AIDirectPrompt"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIDeleteModule", + "userkeylabel": "AIDirectPrompt", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Supprimer le module", + "tsl_value": "Champs direct", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "Action(AIDirectPrompt)~ENU", + "userkey": "Action(AIDeleteModule)~ENU", "item": { "tsl_object": { - "item": {"act_name": "AIDirectPrompt"}, + "item": {"act_name": "AIDeleteModule"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIDirectPrompt", + "userkeylabel": "AIDeleteModule", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Direct prompt", + "tsl_value": "Delete module", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "Action(AIDirectPrompt)~FRA", + "userkey": "Action(AIDeleteModule)~FRA", "item": { "tsl_object": { - "item": {"act_name": "AIDirectPrompt"}, + "item": {"act_name": "AIDeleteModule"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIDirectPrompt", + "userkeylabel": "AIDeleteModule", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Champs direct", + "tsl_value": "Supprimer le module", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "Action(AIAutoGenModule)~ENU", + "userkey": "Action(AICalculateFieldJs)~ENU", "item": { "tsl_object": { - "item": {"act_name": "AIAutoGenModule"}, + "item": {"act_name": "AICalculateFieldJs"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIAutoGenModule", + "userkeylabel": "AICalculateFieldJs", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Model generation by AI", + "tsl_value": "Save with AI", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "Action(AIAutoGenModule)~FRA", + "userkey": "Action(AICalculateFieldJs)~FRA", "item": { "tsl_object": { - "item": {"act_name": "AIAutoGenModule"}, + "item": {"act_name": "AICalculateFieldJs"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIAutoGenModule", + "userkeylabel": "AICalculateFieldJs", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Génération du modèle par l'IA", + "tsl_value": "Enregistrer avec IA", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "Action(CompleteModule)~ENU", + "userkey": "Action(AIGenerate)~ENU", "item": { "tsl_object": { - "item": {"act_name": "CompleteModule"}, + "item": {"act_name": "AIGenerate"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "CompleteModule", + "userkeylabel": "AIGenerate", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Complete module", + "tsl_value": "Generate the data model", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "Action(CompleteModule)~FRA", + "userkey": "Action(AIGenerate)~FRA", "item": { "tsl_object": { - "item": {"act_name": "CompleteModule"}, + "item": {"act_name": "AIGenerate"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "CompleteModule", + "userkeylabel": "AIGenerate", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Complete module", + "tsl_value": "Générer le modèle de données", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "Action(AI_ACTIVE_SETTINGS)~ENU", + "userkey": "Action(AiSaveAsCrosstable)~ENU", "item": { "tsl_object": { - "item": {"act_name": "AI_ACTIVE_SETTINGS"}, + "item": {"act_name": "AiSaveAsCrosstable"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AI_ACTIVE_SETTINGS", + "userkeylabel": "AiSaveAsCrosstable", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Activate", + "tsl_value": "Save as crosstable", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "Action(AI_ACTIVE_SETTINGS)~FRA", + "userkey": "Action(AiSaveAsCrosstable)~FRA", "item": { "tsl_object": { - "item": {"act_name": "AI_ACTIVE_SETTINGS"}, + "item": {"act_name": "AiSaveAsCrosstable"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AI_ACTIVE_SETTINGS", + "userkeylabel": "AiSaveAsCrosstable", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Activer", + "tsl_value": "Enregistrer en tant que tableau croisé", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "Action(AiSaveAsCrosstable)~ENU", + "userkey": "Action(CompleteModule)~ENU", "item": { "tsl_object": { - "item": {"act_name": "AiSaveAsCrosstable"}, + "item": {"act_name": "CompleteModule"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AiSaveAsCrosstable", + "userkeylabel": "CompleteModule", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Save as crosstable", + "tsl_value": "Complete module", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "Action(AiSaveAsCrosstable)~FRA", + "userkey": "Action(CompleteModule)~FRA", "item": { "tsl_object": { - "item": {"act_name": "AiSaveAsCrosstable"}, + "item": {"act_name": "CompleteModule"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AiSaveAsCrosstable", + "userkeylabel": "CompleteModule", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Enregistrer en tant que tableau croisé", + "tsl_value": "Complete module", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } @@ -6282,17 +6170,17 @@ }, { "object": "TranslateField", - "userkey": "Field(aiFldSpe)~ENU", + "userkey": "Field(aiApiKey)~ENU", "item": { "tsl_object": { - "item": {"fld_name": "aiFldSpe"}, + "item": {"fld_name": "aiApiKey"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiFldSpe", + "userkeylabel": "aiApiKey", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Specification AI", + "tsl_value": "API key", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -6304,17 +6192,17 @@ }, { "object": "TranslateField", - "userkey": "Field(aiFldSpe)~FRA", + "userkey": "Field(aiApiKey)~FRA", "item": { "tsl_object": { - "item": {"fld_name": "aiFldSpe"}, + "item": {"fld_name": "aiApiKey"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiFldSpe", + "userkeylabel": "aiApiKey", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Spécification IA", + "tsl_value": "Clé d'API", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -6326,17 +6214,17 @@ }, { "object": "TranslateField", - "userkey": "Field(aiGrantUser)~ENU", + "userkey": "Field(aiFldSpe)~ENU", "item": { "tsl_object": { - "item": {"fld_name": "aiGrantUser"}, + "item": {"fld_name": "aiFldSpe"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiGrantUser", + "userkeylabel": "aiFldSpe", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Grant user", + "tsl_value": "Specification AI", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -6348,17 +6236,17 @@ }, { "object": "TranslateField", - "userkey": "Field(aiGrantUser)~FRA", + "userkey": "Field(aiFldSpe)~FRA", "item": { "tsl_object": { - "item": {"fld_name": "aiGrantUser"}, + "item": {"fld_name": "aiFldSpe"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiGrantUser", + "userkeylabel": "aiFldSpe", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Grant user", + "tsl_value": "Spécification IA", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -6370,17 +6258,17 @@ }, { "object": "TranslateField", - "userkey": "Field(aiSelectProcess)~ENU", + "userkey": "Field(aiSetUrl)~ENU", "item": { "tsl_object": { - "item": {"fld_name": "aiSelectProcess"}, + "item": {"fld_name": "aiSetUrl"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiSelectProcess", + "userkeylabel": "aiSetUrl", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Create new module", + "tsl_value": "Set api url", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -6392,17 +6280,17 @@ }, { "object": "TranslateField", - "userkey": "Field(aiSelectProcess)~FRA", + "userkey": "Field(aiSetUrl)~FRA", "item": { "tsl_object": { - "item": {"fld_name": "aiSelectProcess"}, + "item": {"fld_name": "aiSetUrl"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiSelectProcess", + "userkeylabel": "aiSetUrl", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Créer un module", + "tsl_value": "Api url", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -6414,17 +6302,17 @@ }, { "object": "TranslateField", - "userkey": "Field(aiApiKey)~ENU", + "userkey": "Field(aiGrantUser)~ENU", "item": { "tsl_object": { - "item": {"fld_name": "aiApiKey"}, + "item": {"fld_name": "aiGrantUser"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiApiKey", + "userkeylabel": "aiGrantUser", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "API key", + "tsl_value": "Grant user", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -6436,17 +6324,17 @@ }, { "object": "TranslateField", - "userkey": "Field(aiApiKey)~FRA", + "userkey": "Field(aiGrantUser)~FRA", "item": { "tsl_object": { - "item": {"fld_name": "aiApiKey"}, + "item": {"fld_name": "aiGrantUser"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiApiKey", + "userkeylabel": "aiGrantUser", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Clé d'API", + "tsl_value": "Grant user", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -6458,17 +6346,17 @@ }, { "object": "TranslateField", - "userkey": "Field(aiSetModele)~ENU", + "userkey": "Field(aiSetConfig)~ENU", "item": { "tsl_object": { - "item": {"fld_name": "aiSetModele"}, + "item": {"fld_name": "aiSetConfig"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiSetModele", + "userkeylabel": "aiSetConfig", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Model", + "tsl_value": "Setting", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -6480,17 +6368,17 @@ }, { "object": "TranslateField", - "userkey": "Field(aiSetModele)~FRA", + "userkey": "Field(aiSetConfig)~FRA", "item": { "tsl_object": { - "item": {"fld_name": "aiSetModele"}, + "item": {"fld_name": "aiSetConfig"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiSetModele", + "userkeylabel": "aiSetConfig", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Modèle", + "tsl_value": "configuration", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -6502,17 +6390,17 @@ }, { "object": "TranslateField", - "userkey": "Field(aiSetConfig)~ENU", + "userkey": "Field(aiSetModele)~ENU", "item": { "tsl_object": { - "item": {"fld_name": "aiSetConfig"}, + "item": {"fld_name": "aiSetModele"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiSetConfig", + "userkeylabel": "aiSetModele", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Setting", + "tsl_value": "Model", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -6524,17 +6412,17 @@ }, { "object": "TranslateField", - "userkey": "Field(aiSetConfig)~FRA", + "userkey": "Field(aiSetModele)~FRA", "item": { "tsl_object": { - "item": {"fld_name": "aiSetConfig"}, + "item": {"fld_name": "aiSetModele"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiSetConfig", + "userkeylabel": "aiSetModele", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "configuration", + "tsl_value": "Modèle", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -6546,17 +6434,17 @@ }, { "object": "TranslateField", - "userkey": "Field(aiSetUrl)~ENU", + "userkey": "Field(aiSetActive)~ENU", "item": { "tsl_object": { - "item": {"fld_name": "aiSetUrl"}, + "item": {"fld_name": "aiSetActive"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiSetUrl", + "userkeylabel": "aiSetActive", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Set api url", + "tsl_value": "Active", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -6568,17 +6456,17 @@ }, { "object": "TranslateField", - "userkey": "Field(aiSetUrl)~FRA", + "userkey": "Field(aiSetActive)~FRA", "item": { "tsl_object": { - "item": {"fld_name": "aiSetUrl"}, + "item": {"fld_name": "aiSetActive"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiSetUrl", + "userkeylabel": "aiSetActive", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Api url", + "tsl_value": "Actif", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -6590,17 +6478,17 @@ }, { "object": "TranslateField", - "userkey": "Field(aiSetActive)~ENU", + "userkey": "Field(aiSelectProcess)~ENU", "item": { "tsl_object": { - "item": {"fld_name": "aiSetActive"}, + "item": {"fld_name": "aiSelectProcess"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiSetActive", + "userkeylabel": "aiSelectProcess", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Active", + "tsl_value": "Create new module", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -6612,17 +6500,17 @@ }, { "object": "TranslateField", - "userkey": "Field(aiSetActive)~FRA", + "userkey": "Field(aiSelectProcess)~FRA", "item": { "tsl_object": { - "item": {"fld_name": "aiSetActive"}, + "item": {"fld_name": "aiSelectProcess"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiSetActive", + "userkeylabel": "aiSelectProcess", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Actif", + "tsl_value": "Créer un module", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -6642,65 +6530,65 @@ "list": [ { "object": "TranslateFieldArea", - "userkey": "ObjectFieldArea(AITest-1)~ENU", + "userkey": "ObjectFieldArea(AIExemple-1)~ENU", "item": { "tsl_object": { - "item": {"ofa_name": "AITest-1"}, + "item": {"ofa_name": "AIExemple-1"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AITest-1", + "userkeylabel": "AIExemple-1", "object": "ObjectFieldArea" }, "tsl_lang": "ENU", - "tsl_value": "AITest-1", + "tsl_value": "AIExemple-1", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "ObjectFieldArea(AITest-1)~FRA", + "userkey": "ObjectFieldArea(AIExemple-1)~FRA", "item": { "tsl_object": { - "item": {"ofa_name": "AITest-1"}, + "item": {"ofa_name": "AIExemple-1"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AITest-1", + "userkeylabel": "AIExemple-1", "object": "ObjectFieldArea" }, "tsl_lang": "FRA", - "tsl_value": "AITest-1", + "tsl_value": "AIExemple-1", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "ObjectFieldArea(AIExemple-1)~ENU", + "userkey": "ObjectFieldArea(AiSettings-2)~ENU", "item": { "tsl_object": { - "item": {"ofa_name": "AIExemple-1"}, + "item": {"ofa_name": "AiSettings-2"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AIExemple-1", + "userkeylabel": "AiSettings-2", "object": "ObjectFieldArea" }, "tsl_lang": "ENU", - "tsl_value": "AIExemple-1", + "tsl_value": "Settings -2", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "ObjectFieldArea(AIExemple-1)~FRA", + "userkey": "ObjectFieldArea(AiSettings-2)~FRA", "item": { "tsl_object": { - "item": {"ofa_name": "AIExemple-1"}, + "item": {"ofa_name": "AiSettings-2"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AIExemple-1", + "userkeylabel": "AiSettings-2", "object": "ObjectFieldArea" }, "tsl_lang": "FRA", - "tsl_value": "AIExemple-1", + "tsl_value": "AiSettings-2", "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -6738,33 +6626,33 @@ }, { "object": "TranslateFieldArea", - "userkey": "ObjectFieldArea(AiSettings-2)~ENU", + "userkey": "ObjectFieldArea(AITest-1)~ENU", "item": { "tsl_object": { - "item": {"ofa_name": "AiSettings-2"}, + "item": {"ofa_name": "AITest-1"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AiSettings-2", + "userkeylabel": "AITest-1", "object": "ObjectFieldArea" }, "tsl_lang": "ENU", - "tsl_value": "Settings -2", + "tsl_value": "AITest-1", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "ObjectFieldArea(AiSettings-2)~FRA", + "userkey": "ObjectFieldArea(AITest-1)~FRA", "item": { "tsl_object": { - "item": {"ofa_name": "AiSettings-2"}, + "item": {"ofa_name": "AITest-1"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AiSettings-2", + "userkeylabel": "AITest-1", "object": "ObjectFieldArea" }, "tsl_lang": "FRA", - "tsl_value": "AiSettings-2", + "tsl_value": "AITest-1", "row_module_id__mdl_name": "AIBySimplicite" } } @@ -6864,17 +6752,17 @@ "list": [ { "object": "TranslateExternal", - "userkey": "ObjectExternal(AIProcessResource)~ENU", + "userkey": "ObjectExternal(AIChatBot)~ENU", "item": { "tsl_object": { - "item": {"obe_name": "AIProcessResource"}, + "item": {"obe_name": "AIChatBot"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIProcessResource", + "userkeylabel": "AIChatBot", "object": "ObjectExternal" }, "tsl_lang": "ENU", - "tsl_value": "Process resource", + "tsl_value": "Chatbot", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -6882,17 +6770,53 @@ }, { "object": "TranslateExternal", - "userkey": "ObjectExternal(AIProcessResource)~FRA", + "userkey": "ObjectExternal(AIChatBot)~FRA", "item": { "tsl_object": { - "item": {"obe_name": "AIProcessResource"}, + "item": {"obe_name": "AIChatBot"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIProcessResource", + "userkeylabel": "AIChatBot", "object": "ObjectExternal" }, "tsl_lang": "FRA", - "tsl_value": "Ressources du processus", + "tsl_value": "Chatbot", + "tsl_plural_value": null, + "tsl_help": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "TranslateExternal", + "userkey": "ObjectExternal(AIExpTool)~ENU", + "item": { + "tsl_object": { + "item": {"obe_name": "AIExpTool"}, + "icon": "img/system/external_object", + "label": "External object", + "userkeylabel": "AIExpTool", + "object": "ObjectExternal" + }, + "tsl_lang": "ENU", + "tsl_value": "Example tools", + "tsl_plural_value": null, + "tsl_help": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "TranslateExternal", + "userkey": "ObjectExternal(AIExpTool)~FRA", + "item": { + "tsl_object": { + "item": {"obe_name": "AIExpTool"}, + "icon": "img/system/external_object", + "label": "External object", + "userkeylabel": "AIExpTool", + "object": "ObjectExternal" + }, + "tsl_lang": "FRA", + "tsl_value": "Exemples d'outils", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -6936,17 +6860,17 @@ }, { "object": "TranslateExternal", - "userkey": "ObjectExternal(AIExpTool)~ENU", + "userkey": "ObjectExternal(AIProcessResource)~ENU", "item": { "tsl_object": { - "item": {"obe_name": "AIExpTool"}, + "item": {"obe_name": "AIProcessResource"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIExpTool", + "userkeylabel": "AIProcessResource", "object": "ObjectExternal" }, "tsl_lang": "ENU", - "tsl_value": "Example tools", + "tsl_value": "Process resource", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -6954,17 +6878,17 @@ }, { "object": "TranslateExternal", - "userkey": "ObjectExternal(AIExpTool)~FRA", + "userkey": "ObjectExternal(AIProcessResource)~FRA", "item": { "tsl_object": { - "item": {"obe_name": "AIExpTool"}, + "item": {"obe_name": "AIProcessResource"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIExpTool", + "userkeylabel": "AIProcessResource", "object": "ObjectExternal" }, "tsl_lang": "FRA", - "tsl_value": "Exemples d'outils", + "tsl_value": "Ressources du processus", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -6972,17 +6896,17 @@ }, { "object": "TranslateExternal", - "userkey": "ObjectExternal(AIChatBot)~ENU", + "userkey": "ObjectExternal(AIRestAPI)~ENU", "item": { "tsl_object": { - "item": {"obe_name": "AIChatBot"}, + "item": {"obe_name": "AIRestAPI"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIChatBot", + "userkeylabel": "AIRestAPI", "object": "ObjectExternal" }, "tsl_lang": "ENU", - "tsl_value": "Chatbot", + "tsl_value": "Rest API", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -6990,17 +6914,17 @@ }, { "object": "TranslateExternal", - "userkey": "ObjectExternal(AIChatBot)~FRA", + "userkey": "ObjectExternal(AIRestAPI)~FRA", "item": { "tsl_object": { - "item": {"obe_name": "AIChatBot"}, + "item": {"obe_name": "AIRestAPI"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIChatBot", + "userkeylabel": "AIRestAPI", "object": "ObjectExternal" }, "tsl_lang": "FRA", - "tsl_value": "Chatbot", + "tsl_value": "Rest API", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -7077,42 +7001,6 @@ "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" } - }, - { - "object": "TranslateExternal", - "userkey": "ObjectExternal(AIRestAPI)~ENU", - "item": { - "tsl_object": { - "item": {"obe_name": "AIRestAPI"}, - "icon": "img/system/external_object", - "label": "External object", - "userkeylabel": "AIRestAPI", - "object": "ObjectExternal" - }, - "tsl_lang": "ENU", - "tsl_value": "Rest API", - "tsl_plural_value": null, - "tsl_help": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "TranslateExternal", - "userkey": "ObjectExternal(AIRestAPI)~FRA", - "item": { - "tsl_object": { - "item": {"obe_name": "AIRestAPI"}, - "icon": "img/system/external_object", - "label": "External object", - "userkeylabel": "AIRestAPI", - "object": "ObjectExternal" - }, - "tsl_lang": "FRA", - "tsl_value": "Rest API", - "tsl_plural_value": null, - "tsl_help": null, - "row_module_id__mdl_name": "AIBySimplicite" - } } ] }, @@ -7189,799 +7077,799 @@ "list": [ { "object": "TranslateActivity", - "userkey": "BPMActivity(AIModuleCreate AIC-END)~ENU", + "userkey": "BPMActivity(AIGenData GGD-BEG)~ENU", "item": { "tsl_object": { "item": { - "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC-END" + "acy_process_id__pcs_name": "AIGenData", + "acy_step": "GGD-BEG" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC-END", + "userkeylabel": "AIGenData GGD-BEG", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "End", + "tsl_value": "Begin", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIModuleCreate AIC-END)~FRA", + "userkey": "BPMActivity(AIGenData GGD-BEG)~FRA", "item": { "tsl_object": { "item": { - "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC-END" + "acy_process_id__pcs_name": "AIGenData", + "acy_step": "GGD-BEG" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC-END", + "userkeylabel": "AIGenData GGD-BEG", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Fin", + "tsl_value": "Begin", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIModuleCreate AIC_0350)~ENU", + "userkey": "BPMActivity(AIModuleCreate AIC-END)~ENU", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0350" + "acy_step": "AIC-END" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0350", + "userkeylabel": "AIModuleCreate AIC-END", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Definition of requirements", + "tsl_value": "End", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIModuleCreate AIC_0350)~FRA", + "userkey": "BPMActivity(AIModuleCreate AIC-END)~FRA", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0350" + "acy_step": "AIC-END" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0350", + "userkeylabel": "AIModuleCreate AIC-END", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Définition des besoins", + "tsl_value": "Fin", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIModuleCreate AIC_0100)~ENU", + "userkey": "BPMActivity(AIGenData GGD_0150)~ENU", "item": { "tsl_object": { "item": { - "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0100" + "acy_process_id__pcs_name": "AIGenData", + "acy_step": "GGD_0150" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0100", + "userkeylabel": "AIGenData GGD_0150", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Select module", + "tsl_value": "Confirm", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIModuleCreate AIC_0100)~FRA", + "userkey": "BPMActivity(AIGenData GGD_0150)~FRA", "item": { "tsl_object": { "item": { - "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0100" + "acy_process_id__pcs_name": "AIGenData", + "acy_step": "GGD_0150" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0100", + "userkeylabel": "AIGenData GGD_0150", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Sélectionner un module", + "tsl_value": "Confirmation", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIModuleCreate AIC_0400)~ENU", + "userkey": "BPMActivity(AIGenData GGD_0100)~ENU", "item": { "tsl_object": { "item": { - "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0400" + "acy_process_id__pcs_name": "AIGenData", + "acy_step": "GGD_0100" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0400", + "userkeylabel": "AIGenData GGD_0100", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Specifications", + "tsl_value": "Select module", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIModuleCreate AIC_0400)~FRA", + "userkey": "BPMActivity(AIGenData GGD_0100)~FRA", "item": { "tsl_object": { "item": { - "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0400" + "acy_process_id__pcs_name": "AIGenData", + "acy_step": "GGD_0100" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0400", + "userkeylabel": "AIGenData GGD_0100", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Cahier des charges", + "tsl_value": "Séléction du module", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIModuleCreate AIC_0200)~ENU", + "userkey": "BPMActivity(AIGenData GGD_0200)~ENU", "item": { "tsl_object": { "item": { - "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0200" + "acy_process_id__pcs_name": "AIGenData", + "acy_step": "GGD_0200" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0200", + "userkeylabel": "AIGenData GGD_0200", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Select groups", + "tsl_value": "Data generation", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIModuleCreate AIC_0200)~FRA", + "userkey": "BPMActivity(AIGenData GGD_0200)~FRA", "item": { "tsl_object": { "item": { - "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0200" + "acy_process_id__pcs_name": "AIGenData", + "acy_step": "GGD_0200" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0200", + "userkeylabel": "AIGenData GGD_0200", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Sélectionner les groupes", + "tsl_value": "Génération des données", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIModuleCreate AIC-BEG)~ENU", + "userkey": "BPMActivity(AIModuleCreate AIC_0005)~ENU", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC-BEG" + "acy_step": "AIC_0005" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC-BEG", + "userkeylabel": "AIModuleCreate AIC_0005", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Begin", + "tsl_value": "Create or update module", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIModuleCreate AIC-BEG)~FRA", + "userkey": "BPMActivity(AIModuleCreate AIC_0005)~FRA", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC-BEG" + "acy_step": "AIC_0005" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC-BEG", + "userkeylabel": "AIModuleCreate AIC_0005", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Commencer", + "tsl_value": "Créer ou mettre à jour module", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIModuleCreate AIC_0300)~ENU", + "userkey": "BPMActivity(AIModuleCreate AIC-NC-END)~ENU", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0300" + "acy_step": "AIC-NC-END" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0300", + "userkeylabel": "AIModuleCreate AIC-NC-END", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Select domain", + "tsl_value": "Please configure your AI Assistant", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIModuleCreate AIC_0300)~FRA", + "userkey": "BPMActivity(AIModuleCreate AIC-NC-END)~FRA", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0300" + "acy_step": "AIC-NC-END" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0300", + "userkeylabel": "AIModuleCreate AIC-NC-END", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Sélectionner un domaine", + "tsl_value": "Veuillez configurer votre assistant AI", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIModuleCreate AIC_0600)~ENU", + "userkey": "BPMActivity(AIModuleCreate AIC-BEG)~ENU", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0600" + "acy_step": "AIC-BEG" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0600", + "userkeylabel": "AIModuleCreate AIC-BEG", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Generation", + "tsl_value": "Begin", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIModuleCreate AIC_0600)~FRA", + "userkey": "BPMActivity(AIModuleCreate AIC-BEG)~FRA", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0600" + "acy_step": "AIC-BEG" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0600", + "userkeylabel": "AIModuleCreate AIC-BEG", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Génération", + "tsl_value": "Commencer", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIModuleCreate AIC_0700)~ENU", + "userkey": "BPMActivity(AIModuleCreate AIC_0015)~ENU", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0700" + "acy_step": "AIC_0015" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0700", + "userkeylabel": "AIModuleCreate AIC_0015", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Delete the module", + "tsl_value": "Translate Domain", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIModuleCreate AIC_0700)~FRA", + "userkey": "BPMActivity(AIModuleCreate AIC_0015)~FRA", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0700" + "acy_step": "AIC_0015" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0700", + "userkeylabel": "AIModuleCreate AIC_0015", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Supprimer le module", + "tsl_value": "Traduire le domaine", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIModuleCreate AIC_0005)~ENU", + "userkey": "BPMActivity(AIGenData GGD-END)~ENU", "item": { "tsl_object": { "item": { - "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0005" + "acy_process_id__pcs_name": "AIGenData", + "acy_step": "GGD-END" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0005", + "userkeylabel": "AIGenData GGD-END", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Create or update module", + "tsl_value": "End", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIModuleCreate AIC_0005)~FRA", + "userkey": "BPMActivity(AIGenData GGD-END)~FRA", "item": { "tsl_object": { "item": { - "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0005" + "acy_process_id__pcs_name": "AIGenData", + "acy_step": "GGD-END" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0005", + "userkeylabel": "AIGenData GGD-END", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Créer ou mettre à jour module", + "tsl_value": "End", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIModuleCreate AIC_0020)~ENU", + "userkey": "BPMActivity(AIModuleCreate AIC_0010)~ENU", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0020" + "acy_step": "AIC_0010" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0020", + "userkeylabel": "AIModuleCreate AIC_0010", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Grant your user to the generated group?", + "tsl_value": "Create module", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIModuleCreate AIC_0020)~FRA", + "userkey": "BPMActivity(AIModuleCreate AIC_0010)~FRA", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0020" + "acy_step": "AIC_0010" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0020", + "userkeylabel": "AIModuleCreate AIC_0010", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Habiliter votre utilisateur au groupe généré?", + "tsl_value": "Créé un module", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIModuleCreate AIC_0010)~ENU", + "userkey": "BPMActivity(AIModuleCreate AIC_0017)~ENU", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0010" + "acy_step": "AIC_0017" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0010", + "userkeylabel": "AIModuleCreate AIC_0017", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Create module", + "tsl_value": "Create scope", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIModuleCreate AIC_0010)~FRA", + "userkey": "BPMActivity(AIModuleCreate AIC_0017)~FRA", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0010" + "acy_step": "AIC_0017" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0010", + "userkeylabel": "AIModuleCreate AIC_0017", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Créé un module", + "tsl_value": "Créer un scope", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIModuleCreate AIC_0015)~ENU", + "userkey": "BPMActivity(AIModuleCreate AIC_0100)~ENU", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0015" + "acy_step": "AIC_0100" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0015", + "userkeylabel": "AIModuleCreate AIC_0100", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Translate Domain", + "tsl_value": "Select module", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIModuleCreate AIC_0015)~FRA", + "userkey": "BPMActivity(AIModuleCreate AIC_0100)~FRA", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0015" + "acy_step": "AIC_0100" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0015", + "userkeylabel": "AIModuleCreate AIC_0100", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Traduire le domaine", + "tsl_value": "Sélectionner un module", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIModuleCreate AIC_0017)~ENU", + "userkey": "BPMActivity(AIModuleCreate AIC_0020)~ENU", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0017" + "acy_step": "AIC_0020" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0017", + "userkeylabel": "AIModuleCreate AIC_0020", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Create scope", + "tsl_value": "Grant your user to the generated group?", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIModuleCreate AIC_0017)~FRA", + "userkey": "BPMActivity(AIModuleCreate AIC_0020)~FRA", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0017" + "acy_step": "AIC_0020" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0017", + "userkeylabel": "AIModuleCreate AIC_0020", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Créer un scope", + "tsl_value": "Habiliter votre utilisateur au groupe généré?", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIGenData GGD_0150)~ENU", + "userkey": "BPMActivity(AIModuleCreate AIC_0200)~ENU", "item": { "tsl_object": { "item": { - "acy_process_id__pcs_name": "AIGenData", - "acy_step": "GGD_0150" + "acy_process_id__pcs_name": "AIModuleCreate", + "acy_step": "AIC_0200" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIGenData GGD_0150", + "userkeylabel": "AIModuleCreate AIC_0200", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Confirm", + "tsl_value": "Select groups", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIGenData GGD_0150)~FRA", + "userkey": "BPMActivity(AIModuleCreate AIC_0200)~FRA", "item": { "tsl_object": { "item": { - "acy_process_id__pcs_name": "AIGenData", - "acy_step": "GGD_0150" + "acy_process_id__pcs_name": "AIModuleCreate", + "acy_step": "AIC_0200" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIGenData GGD_0150", + "userkeylabel": "AIModuleCreate AIC_0200", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Confirmation", + "tsl_value": "Sélectionner les groupes", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIModuleCreate AIC-NC-END)~ENU", + "userkey": "BPMActivity(AIModuleCreate AIC_0300)~ENU", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC-NC-END" + "acy_step": "AIC_0300" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC-NC-END", + "userkeylabel": "AIModuleCreate AIC_0300", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Please configure your AI Assistant", + "tsl_value": "Select domain", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIModuleCreate AIC-NC-END)~FRA", + "userkey": "BPMActivity(AIModuleCreate AIC_0300)~FRA", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC-NC-END" + "acy_step": "AIC_0300" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC-NC-END", + "userkeylabel": "AIModuleCreate AIC_0300", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Veuillez configurer votre assistant AI", + "tsl_value": "Sélectionner un domaine", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIModuleCreate AIC_CHECK_CONF)~ENU", + "userkey": "BPMActivity(AIModuleCreate AIC_0400)~ENU", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_CHECK_CONF" + "acy_step": "AIC_0400" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_CHECK_CONF", + "userkeylabel": "AIModuleCreate AIC_0400", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Check AI configuration", + "tsl_value": "Specifications", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIModuleCreate AIC_CHECK_CONF)~FRA", + "userkey": "BPMActivity(AIModuleCreate AIC_0400)~FRA", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_CHECK_CONF" + "acy_step": "AIC_0400" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_CHECK_CONF", + "userkeylabel": "AIModuleCreate AIC_0400", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Vérifier la configuration de l'IA", + "tsl_value": "Cahier des charges", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIGenData GGD-END)~ENU", + "userkey": "BPMActivity(AIModuleCreate AIC_CHECK_CONF)~ENU", "item": { "tsl_object": { "item": { - "acy_process_id__pcs_name": "AIGenData", - "acy_step": "GGD-END" + "acy_process_id__pcs_name": "AIModuleCreate", + "acy_step": "AIC_CHECK_CONF" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIGenData GGD-END", + "userkeylabel": "AIModuleCreate AIC_CHECK_CONF", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "End", + "tsl_value": "Check AI configuration", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIGenData GGD-END)~FRA", + "userkey": "BPMActivity(AIModuleCreate AIC_CHECK_CONF)~FRA", "item": { "tsl_object": { "item": { - "acy_process_id__pcs_name": "AIGenData", - "acy_step": "GGD-END" + "acy_process_id__pcs_name": "AIModuleCreate", + "acy_step": "AIC_CHECK_CONF" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIGenData GGD-END", + "userkeylabel": "AIModuleCreate AIC_CHECK_CONF", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "End", + "tsl_value": "Vérifier la configuration de l'IA", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIGenData GGD_0100)~ENU", + "userkey": "BPMActivity(AIModuleCreate AIC_0600)~ENU", "item": { "tsl_object": { "item": { - "acy_process_id__pcs_name": "AIGenData", - "acy_step": "GGD_0100" + "acy_process_id__pcs_name": "AIModuleCreate", + "acy_step": "AIC_0600" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIGenData GGD_0100", + "userkeylabel": "AIModuleCreate AIC_0600", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Select module", + "tsl_value": "Generation", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIGenData GGD_0100)~FRA", + "userkey": "BPMActivity(AIModuleCreate AIC_0600)~FRA", "item": { "tsl_object": { "item": { - "acy_process_id__pcs_name": "AIGenData", - "acy_step": "GGD_0100" + "acy_process_id__pcs_name": "AIModuleCreate", + "acy_step": "AIC_0600" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIGenData GGD_0100", + "userkeylabel": "AIModuleCreate AIC_0600", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Séléction du module", + "tsl_value": "Génération", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIGenData GGD_0200)~ENU", + "userkey": "BPMActivity(AIModuleCreate AIC_0700)~ENU", "item": { "tsl_object": { "item": { - "acy_process_id__pcs_name": "AIGenData", - "acy_step": "GGD_0200" + "acy_process_id__pcs_name": "AIModuleCreate", + "acy_step": "AIC_0700" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIGenData GGD_0200", + "userkeylabel": "AIModuleCreate AIC_0700", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Data generation", + "tsl_value": "Delete the module", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIGenData GGD_0200)~FRA", + "userkey": "BPMActivity(AIModuleCreate AIC_0700)~FRA", "item": { "tsl_object": { "item": { - "acy_process_id__pcs_name": "AIGenData", - "acy_step": "GGD_0200" + "acy_process_id__pcs_name": "AIModuleCreate", + "acy_step": "AIC_0700" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIGenData GGD_0200", + "userkeylabel": "AIModuleCreate AIC_0700", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Génération des données", + "tsl_value": "Supprimer le module", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIGenData GGD-BEG)~ENU", + "userkey": "BPMActivity(AIModuleCreate AIC_0350)~ENU", "item": { "tsl_object": { "item": { - "acy_process_id__pcs_name": "AIGenData", - "acy_step": "GGD-BEG" + "acy_process_id__pcs_name": "AIModuleCreate", + "acy_step": "AIC_0350" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIGenData GGD-BEG", + "userkeylabel": "AIModuleCreate AIC_0350", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Begin", + "tsl_value": "Definition of requirements", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "BPMActivity(AIGenData GGD-BEG)~FRA", + "userkey": "BPMActivity(AIModuleCreate AIC_0350)~FRA", "item": { "tsl_object": { "item": { - "acy_process_id__pcs_name": "AIGenData", - "acy_step": "GGD-BEG" + "acy_process_id__pcs_name": "AIModuleCreate", + "acy_step": "AIC_0350" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIGenData GGD-BEG", + "userkeylabel": "AIModuleCreate AIC_0350", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Begin", + "tsl_value": "Définition des besoins", "row_module_id__mdl_name": "AIBySimplicite" } } @@ -8087,14 +7975,14 @@ }, { "object": "Permission", - "userkey": "AI_BUSINESS~ObjectExternal(AIMetricsChat)~", + "userkey": "AI_BUSINESS~ObjectExternal(AIChatBot)~", "item": { "prm_group_id__grp_name": "AI_BUSINESS", "prm_object": { - "item": {"obe_name": "AIMetricsChat"}, + "item": {"obe_name": "AIChatBot"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIMetricsChat", + "userkeylabel": "AIChatBot", "object": "ObjectExternal" }, "prm_perm": true, @@ -8107,14 +7995,14 @@ }, { "object": "Permission", - "userkey": "AI_BUSINESS~ObjectExternal(AIChatBot)~", + "userkey": "AI_BUSINESS~ObjectExternal(AIMetricsChat)~", "item": { "prm_group_id__grp_name": "AI_BUSINESS", "prm_object": { - "item": {"obe_name": "AIChatBot"}, + "item": {"obe_name": "AIMetricsChat"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIChatBot", + "userkeylabel": "AIMetricsChat", "object": "ObjectExternal" }, "prm_perm": true, @@ -8165,26 +8053,6 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, - { - "object": "Permission", - "userkey": "AI_DESIGNER~ObjectExternal(AIProcessResource)~", - "item": { - "prm_group_id__grp_name": "AI_DESIGNER", - "prm_object": { - "item": {"obe_name": "AIProcessResource"}, - "icon": "img/system/external_object", - "label": "External object", - "userkeylabel": "AIProcessResource", - "object": "ObjectExternal" - }, - "prm_perm": true, - "prm_upd": false, - "prm_req": false, - "prm_prop": null, - "prm_value": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, { "object": "Permission", "userkey": "AI_DESIGNER~ObjectExternal(AIExpTool)~", @@ -8207,14 +8075,14 @@ }, { "object": "Permission", - "userkey": "AI_DESIGNER~ObjectExternal(AIChatBot)~", + "userkey": "AI_DESIGNER~ObjectExternal(AIRestAPI)~", "item": { "prm_group_id__grp_name": "AI_DESIGNER", "prm_object": { - "item": {"obe_name": "AIChatBot"}, + "item": {"obe_name": "AIRestAPI"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIChatBot", + "userkeylabel": "AIRestAPI", "object": "ObjectExternal" }, "prm_perm": true, @@ -8264,84 +8132,117 @@ "prm_value": null, "row_module_id__mdl_name": "AIBySimplicite" } - }, + } + ] + }, + { + "object": "PermGroup", + "label": "Group permissions", + "icon": "img/system/state_transition_permission", + "field": "row_module_id", + "list": [ { - "object": "Permission", - "userkey": "AI_DESIGNER~ObjectExternal(AIRestAPI)~", + "object": "PermGroup", + "userkey": "AI_DESIGNER~ADMIN~ObjectExternal(AIProcessResource)~", "item": { - "prm_group_id__grp_name": "AI_DESIGNER", - "prm_object": { - "item": {"obe_name": "AIRestAPI"}, + "pmg_group_id__grp_name": "AI_DESIGNER", + "pmg_perm_id__prm_group_id__grp_name": "ADMIN", + "pmg_perm_id__prm_object": { + "item": {"obe_name": "AIProcessResource"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIRestAPI", + "userkeylabel": "AIProcessResource", "object": "ObjectExternal" }, - "prm_perm": true, - "prm_upd": false, - "prm_req": false, - "prm_prop": null, - "prm_value": null, + "pmg_perm_id__prm_perm": true, + "pmg_perm_id__prm_upd": false, + "pmg_perm_id__prm_req": false, + "pmg_perm_id__prm_prop": null, + "pmg_perm_id__prm_value": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { - "object": "Permission", - "userkey": "AI_DESIGNER~ShortCut(AIBot)~", + "object": "PermGroup", + "userkey": "AI_DESIGNER~AI_BUSINESS~ObjectExternal(AIChatBot)~", "item": { - "prm_group_id__grp_name": "AI_DESIGNER", - "prm_object": { - "item": {"shc_name": "AIBot"}, - "icon": "img/system/shortcut", - "label": "Shortcut", - "userkeylabel": "AIBot", - "object": "ShortCut" + "pmg_group_id__grp_name": "AI_DESIGNER", + "pmg_perm_id__prm_group_id__grp_name": "AI_BUSINESS", + "pmg_perm_id__prm_object": { + "item": {"obe_name": "AIChatBot"}, + "icon": "img/system/external_object", + "label": "External object", + "userkeylabel": "AIChatBot", + "object": "ObjectExternal" }, - "prm_perm": true, - "prm_upd": false, - "prm_req": false, - "prm_prop": null, - "prm_value": null, + "pmg_perm_id__prm_perm": true, + "pmg_perm_id__prm_upd": false, + "pmg_perm_id__prm_req": false, + "pmg_perm_id__prm_prop": null, + "pmg_perm_id__prm_value": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { - "object": "Permission", - "userkey": "PUBLIC~ObjectExternal(AIChatBot)~", + "object": "PermGroup", + "userkey": "PUBLIC~AI_BUSINESS~ObjectExternal(AIChatBot)~", "item": { - "prm_group_id__grp_name": "PUBLIC", - "prm_object": { + "pmg_group_id__grp_name": "PUBLIC", + "pmg_perm_id__prm_group_id__grp_name": "AI_BUSINESS", + "pmg_perm_id__prm_object": { "item": {"obe_name": "AIChatBot"}, "icon": "img/system/external_object", "label": "External object", "userkeylabel": "AIChatBot", "object": "ObjectExternal" }, - "prm_perm": true, - "prm_upd": false, - "prm_req": false, - "prm_prop": null, - "prm_value": null, + "pmg_perm_id__prm_perm": true, + "pmg_perm_id__prm_upd": false, + "pmg_perm_id__prm_req": false, + "pmg_perm_id__prm_prop": null, + "pmg_perm_id__prm_value": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { - "object": "Permission", - "userkey": "PUBLIC~ObjectExternal(AIRestAPI)~", + "object": "PermGroup", + "userkey": "AI_DESIGNER~AI_BUSINESS~ShortCut(AIBot)~", "item": { - "prm_group_id__grp_name": "PUBLIC", - "prm_object": { + "pmg_group_id__grp_name": "AI_DESIGNER", + "pmg_perm_id__prm_group_id__grp_name": "AI_BUSINESS", + "pmg_perm_id__prm_object": { + "item": {"shc_name": "AIBot"}, + "icon": "img/system/shortcut", + "label": "Shortcut", + "userkeylabel": "AIBot", + "object": "ShortCut" + }, + "pmg_perm_id__prm_perm": true, + "pmg_perm_id__prm_upd": false, + "pmg_perm_id__prm_req": false, + "pmg_perm_id__prm_prop": null, + "pmg_perm_id__prm_value": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "PermGroup", + "userkey": "PUBLIC~AI_DESIGNER~ObjectExternal(AIRestAPI)~", + "item": { + "pmg_group_id__grp_name": "PUBLIC", + "pmg_perm_id__prm_group_id__grp_name": "AI_DESIGNER", + "pmg_perm_id__prm_object": { "item": {"obe_name": "AIRestAPI"}, "icon": "img/system/external_object", "label": "External object", "userkeylabel": "AIRestAPI", "object": "ObjectExternal" }, - "prm_perm": true, - "prm_upd": false, - "prm_req": false, - "prm_prop": null, - "prm_value": null, + "pmg_perm_id__prm_perm": true, + "pmg_perm_id__prm_upd": false, + "pmg_perm_id__prm_req": false, + "pmg_perm_id__prm_prop": null, + "pmg_perm_id__prm_value": null, "row_module_id__mdl_name": "AIBySimplicite" } } diff --git a/README.md b/README.md index 50befa6..a9d4418 100644 --- a/README.md +++ b/README.md @@ -117,9 +117,6 @@ In a `view` add an `external page` of source `External object`: `AIMetricsChat?m ### Lists * `AI_CONF_MODELE` - - `ANTRHROPIC` - - `AIML` ai/ml - - `HUGGINGFACE` huggingface - `MISTRAL` Mistral - `OPENAI` OpenAI diff --git a/module-info.json b/module-info.json index 9197b12..aab79e9 100644 --- a/module-info.json +++ b/module-info.json @@ -1,9 +1,9 @@ { - "date": "2024-07-03 11:45:49", + "date": "2024-07-03 12:38:47", "name": "AIBySimplicite", "format": "json", "files": ["AIBySimplicite.json"], "repository": {"origin": {"uri": "https://github.com/simplicitesoftware/module_ai.git"}}, "version": "0.12", - "platform": "6.0.14" + "platform": "6.1.0-beta-RC3" } \ No newline at end of file diff --git a/pom.xml b/pom.xml index 25b0df2..649360e 100644 --- a/pom.xml +++ b/pom.xml @@ -13,8 +13,8 @@ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ Simplicite module: AIBySimplicite UTF-8 - https://candicetest.demo.simplicite.io - 6.0-SNAPSHOT + https://candicedev61.demo.simplicite.io + 6.1-SNAPSHOT 11 11 simplicite-modules-AIBySimplicite From 1f5dd72358d93fa778f80498e905f7e39b96a983 Mon Sep 17 00:00:00 2001 From: Candice Bimont Date: Wed, 3 Jul 2024 13:10:11 +0200 Subject: [PATCH 12/74] Update loadDiagramEngine from V6.0 to V6.1 --- resources/ObjectExternal/AIProcessResource/AI_GEN_MODEL.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/ObjectExternal/AIProcessResource/AI_GEN_MODEL.js b/resources/ObjectExternal/AIProcessResource/AI_GEN_MODEL.js index a55c18e..b460028 100644 --- a/resources/ObjectExternal/AIProcessResource/AI_GEN_MODEL.js +++ b/resources/ObjectExternal/AIProcessResource/AI_GEN_MODEL.js @@ -51,7 +51,7 @@ var aiGenModel = aiGenModel || (function() { } let list = construcNodesList(ids); // Load SVG engine - $ui.loadDiagramEngine(false, function() { + $ui.loadDiagramEngine().then(function() { try { // Create the model in silent mode let currentDate = new Date(); @@ -113,7 +113,7 @@ var aiGenModel = aiGenModel || (function() { } } function updateModel(modelId){ - $ui.loadDiagramEngine(false, () => openAndUpdateModel(modelId)); + $ui.loadDiagramEngine().then(() => openAndUpdateModel(modelId)); } function openAndUpdateModel(modelId){ let ids = data.createdIds.values; From 415b448a7eac1a6973def811bd093e9f81ac22ba Mon Sep 17 00:00:00 2001 From: "designer (Designer)" <> Date: Wed, 3 Jul 2024 13:44:26 +0200 Subject: [PATCH 13/74] Remove useless objectfield --- AIBySimplicite.json | 1152 ++++++++++++++++++++----------------------- module-info.json | 2 +- 2 files changed, 542 insertions(+), 612 deletions(-) diff --git a/AIBySimplicite.json b/AIBySimplicite.json index 53174e8..46fa519 100644 --- a/AIBySimplicite.json +++ b/AIBySimplicite.json @@ -7,7 +7,7 @@ "mdl_version": "0.12", "mdl_type": "T", "mdl_icon": null, - "mdl_url": "{\n \"origin\": {\"uri\": \"https://github.com/simplicitesoftware/module_ai.git\"},\n \"type\": \"git\",\n \"branch\": \"6\"\n}", + "mdl_url": "{\n \"origin\": {\"uri\": \"https://github.com/simplicitesoftware/module_ai.git\"},\n \"type\": \"git\",\n \"branch\": \"6.1\"\n}", "mdl_comment": "### Introduction\nExploratory module on the use of AI in Simplicite\n\n### Import\nTo import this module:\n\nCreate a module named `AIBySimplicite`\nSet the settings as:\n```json\n{\n\t\"origin\": {\n\t\t\"uri\": \"https://github.com/simplicitesoftware/module_ai.git\"\n\t},\n\t\"type\": \"git\"\n}\n```\nClick on the Import module button\n### Configure\nTo configure the ia connection, use the `Configuring the wizard` object in `AI assistant` domain.\n\nSelect the model (LLM) you wish to use, configure the parameters and the url of your API. \n\n

\n LLM spesific configuration exemple<\/summary>\n\n#### OpenAI:\n```json\n{\n 'model':'',\n 'OpenAI-Project': \"\", // Optional\n 'OpenAI-Organization': \"\", //Optional\n 'hist_depth' : 3,\n 'code_max_token' : 2000,\n 'default_max_token':1500,\n 'trigger':''\n}\n```\n#### Mistral \n```json\n{\n 'hist_depth' : 3,\n 'code_max_token' : 2000,\n 'default_max_token':1500,\n 'trigger':''\n}\n```\n<\/details>\n\n\n
\n Parrameters details<\/summary>\n\n##### hist_depth\nDefines the number of messages in the history used for the context.\nThe greater this number, the more tokens the request uses, but the more relevant is the response. \n##### max_token\n*optional* \nLimits the number of tokens in the ia response\n###### default_max_token\nMaximum number of tokens in a usual context.\n###### code_max_token\nMaximum number of tokens for thecnical calls.\n##### trigger\nTo define a trigger for ia calls in fields (under development)\n\n<\/details> \n \n \nUse the `Activate` action to save your settings and enter your API key if required.\n\n### wizzard\n#### Module generation\nUse AI to co-create or update a module based on your business needs\n`Module generation` in `AI assistant` domain.\n\n#### Data generation\nUse AI to generate test data for a module.\n`Data generation` in `AI assistant` domain.\n\n#### Business chatbot\nA shortcut to a chatbot contextualized according to the form on which it is opened.\nThe user must have `AI_BUSINESS` rights.\nThe `Personal data`, `Confidential data` and `Intimate` fields are not sent to the AI.\n\n\n#### Metrics\nGenerating AI graphs on a module's data\nIn a `view` add an `external page` of source `External object`: `AIMetricsChat?module=`" }, "links": [ @@ -924,8 +924,7 @@ "fld_comment": null, "fld_classification": null, "row_module_id__mdl_name": "AIBySimplicite", - "fld_incrementsyntax": null, - "aiFldSpe": null + "fld_incrementsyntax": null } }, { @@ -971,8 +970,7 @@ "fld_comment": null, "fld_classification": ["CONFIDENTIAL"], "row_module_id__mdl_name": "AIBySimplicite", - "fld_incrementsyntax": null, - "aiFldSpe": null + "fld_incrementsyntax": null } }, { @@ -1018,8 +1016,7 @@ "fld_comment": "List of fields to take into account for the chatbot", "fld_classification": null, "row_module_id__mdl_name": "AIBySimplicite", - "fld_incrementsyntax": null, - "aiFldSpe": null + "fld_incrementsyntax": null } }, { @@ -1065,8 +1062,7 @@ "fld_comment": null, "fld_classification": null, "row_module_id__mdl_name": "AIBySimplicite", - "fld_incrementsyntax": null, - "aiFldSpe": null + "fld_incrementsyntax": null } }, { @@ -1112,8 +1108,7 @@ "fld_comment": null, "fld_classification": null, "row_module_id__mdl_name": "AIBySimplicite", - "fld_incrementsyntax": null, - "aiFldSpe": null + "fld_incrementsyntax": null } }, { @@ -1159,8 +1154,7 @@ "fld_comment": null, "fld_classification": null, "row_module_id__mdl_name": "AIBySimplicite", - "fld_incrementsyntax": null, - "aiFldSpe": null + "fld_incrementsyntax": null } }, { @@ -1206,8 +1200,7 @@ "fld_comment": null, "fld_classification": null, "row_module_id__mdl_name": "AIBySimplicite", - "fld_incrementsyntax": null, - "aiFldSpe": null + "fld_incrementsyntax": null } }, { @@ -1250,8 +1243,7 @@ "fld_comment": null, "fld_classification": null, "row_module_id__mdl_name": "AIBySimplicite", - "fld_incrementsyntax": null, - "aiFldSpe": null + "fld_incrementsyntax": null } }, { @@ -1297,8 +1289,7 @@ "fld_comment": null, "fld_classification": null, "row_module_id__mdl_name": "AIBySimplicite", - "fld_incrementsyntax": null, - "aiFldSpe": null + "fld_incrementsyntax": null } }, { @@ -1344,8 +1335,7 @@ "fld_comment": null, "fld_classification": null, "row_module_id__mdl_name": "AIBySimplicite", - "fld_incrementsyntax": null, - "aiFldSpe": null + "fld_incrementsyntax": null } } ] @@ -1930,47 +1920,6 @@ "obf_joined_id__obf_order": null } }, - { - "object": "ObjectFieldSystem", - "userkey": "Field~aiFldSpe~330", - "item": { - "obf_object_id__obo_name": "Field", - "obf_object_id__obo_dbtable": "m_field", - "obf_field_id__fld_name": "aiFldSpe", - "obf_field_id__fld_dbname": "ai_fld_spe", - "obf_field_id__fld_type": "13", - "obf_order": 330, - "obf_group_by": null, - "obf_dfault_order": null, - "obf_input": null, - "obf_ref_field_id__fld_name": null, - "obf_ref_object_id__obo_name": null, - "obf_cascad": null, - "obf_card": null, - "obf_visible": null, - "obf_ref_export": true, - "obf_copy": null, - "obf_ref_order": null, - "obf_fld_visible": null, - "obf_fld_required": null, - "obf_fld_updatable": null, - "obf_fld_research": null, - "obf_fld_more": null, - "obf_fld_listmore": null, - "obf_fld_researchreq": null, - "obf_fld_dfault": null, - "obf_field_id__fld_dfault": null, - "obf_fld_exportable": null, - "obf_field_id__fld_exportable": true, - "obf_fld_uk": null, - "obf_area_id__ofa_name": "Field-Display", - "obf_area_id__ofa_position": 3, - "row_module_id__mdl_name": "AIBySimplicite", - "obf_joined_id__obf_object_id__obo_name": null, - "obf_joined_id__obf_field_id__fld_name": null, - "obf_joined_id__obf_order": null - } - }, { "object": "ObjectFieldSystem", "userkey": "ObjectInternal~aiFieldsParam~650", @@ -2734,25 +2683,6 @@ "csi_objfield_id__obf_order": null, "row_module_id__mdl_name": "AIBySimplicite" } - }, - { - "object": "ConstraintImpact", - "userkey": "Constraint-AISpeField~Field~10", - "item": { - "csi_const_id__cst_name": "Constraint-AISpeField", - "csi_const_id__cst_object_id__obo_name": "Field", - "csi_const_id__cst_order": 1, - "csi_order": 10, - "csi_object_prop": null, - "csi_field_prop": "V", - "csi_apply": "F", - "csi_expr": "[VALUE:fld_rendering] == \"AI\"", - "csi_target": null, - "csi_objfield_id__obf_object_id__obo_name": "Field", - "csi_objfield_id__obf_field_id__fld_name": "aiFldSpe", - "csi_objfield_id__obf_order": 330, - "row_module_id__mdl_name": "AIBySimplicite" - } } ] }, @@ -3671,30 +3601,30 @@ "list": [ { "object": "BPMData", - "userkey": "AIGenData~GGD-END~Forward~Page", + "userkey": "AIGenData~GGD-END~Forward~PARAM=1", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIGenData", "dta_activity_id__acy_step": "GGD-END", "dta_activity_id__acy_name": "End", "dta_group": "Forward", - "dta_name": "Page", + "dta_name": "PARAM:1", "dta_order": 1, - "dta_value": "[EXPR:HTMLTool.getFormURL(\"Module\", null, \"[PARAM:1]\", \"nav=add\")]", + "dta_value": "GGD_0100.Field.row_id", "dta_field_id__fld_name": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "BPMData", - "userkey": "AIGenData~GGD-END~Forward~PARAM=1", + "userkey": "AIGenData~GGD-END~Forward~Page", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIGenData", "dta_activity_id__acy_step": "GGD-END", "dta_activity_id__acy_name": "End", "dta_group": "Forward", - "dta_name": "PARAM:1", + "dta_name": "Page", "dta_order": 1, - "dta_value": "GGD_0100.Field.row_id", + "dta_value": "[EXPR:HTMLTool.getFormURL(\"Module\", null, \"[PARAM:1]\", \"nav=add\")]", "dta_field_id__fld_name": null, "row_module_id__mdl_name": "AIBySimplicite" } @@ -3836,31 +3766,31 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate~AIC_0005~Data~AREA=1", + "userkey": "AIModuleCreate~AIC_0005~Data~Template", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0005", "dta_activity_id__acy_name": "Choice", "dta_group": "Data", - "dta_name": "AREA:1", + "dta_name": "Template", "dta_order": 1, - "dta_value": "0", - "dta_field_id__fld_name": "aiSelectProcess", + "dta_value": "Base", + "dta_field_id__fld_name": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "BPMData", - "userkey": "AIModuleCreate~AIC_0005~Data~Template", + "userkey": "AIModuleCreate~AIC_0005~Data~AREA=1", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0005", "dta_activity_id__acy_name": "Choice", "dta_group": "Data", - "dta_name": "Template", + "dta_name": "AREA:1", "dta_order": 1, - "dta_value": "Base", - "dta_field_id__fld_name": null, + "dta_value": "0", + "dta_field_id__fld_name": "aiSelectProcess", "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -4294,27 +4224,27 @@ "list": [ { "object": "BPMHelp", - "userkey": "AIModuleCreate~AIC_0400~ENU", + "userkey": "AIModuleCreate~AIC_0400~FRA", "item": { "hlp_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "hlp_activity_id__acy_step": "AIC_0400", "hlp_activity_id__acy_name": "Prompt", - "hlp_lang": "ENU", + "hlp_lang": "FRA", "hlp_abstract": null, - "hlp_content": "

Express your need as concisely as possible<\/p>", + "hlp_content": "

Exprimez votre besoin de la manière la plus concise possible<\/p>", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "BPMHelp", - "userkey": "AIModuleCreate~AIC_0400~FRA", + "userkey": "AIModuleCreate~AIC_0400~ENU", "item": { "hlp_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "hlp_activity_id__acy_step": "AIC_0400", "hlp_activity_id__acy_name": "Prompt", - "hlp_lang": "FRA", + "hlp_lang": "ENU", "hlp_abstract": null, - "hlp_content": "

Exprimez votre besoin de la manière la plus concise possible<\/p>", + "hlp_content": "

Express your need as concisely as possible<\/p>", "row_module_id__mdl_name": "AIBySimplicite" } } @@ -5136,150 +5066,6 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, - { - "object": "Resource", - "userkey": "ObjectExternal(AIExpTool)~ANY~STYLES", - "item": { - "res_object": { - "item": {"obe_name": "AIExpTool"}, - "icon": "img/system/external_object", - "label": "External object", - "userkeylabel": "AIExpTool", - "object": "ObjectExternal" - }, - "res_type": "CSS", - "res_lang": "ANY", - "res_code": "STYLES", - "res_cached": false, - "res_file": { - "path": "resources/ObjectExternal/AIExpTool/STYLES.less", - "mime": "text/less", - "name": "STYLES.less" - }, - "res_image": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "Resource", - "userkey": "ObjectExternal(AIExpTool)~ANY~HTML", - "item": { - "res_object": { - "item": {"obe_name": "AIExpTool"}, - "icon": "img/system/external_object", - "label": "External object", - "userkeylabel": "AIExpTool", - "object": "ObjectExternal" - }, - "res_type": "HTML", - "res_lang": "ANY", - "res_code": "HTML", - "res_cached": false, - "res_file": { - "path": "resources/ObjectExternal/AIExpTool/HTML.html", - "mime": "text/html", - "name": "HTML.html" - }, - "res_image": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "Resource", - "userkey": "ObjectExternal(AIExpTool)~ANY~SCRIPT", - "item": { - "res_object": { - "item": {"obe_name": "AIExpTool"}, - "icon": "img/system/external_object", - "label": "External object", - "userkeylabel": "AIExpTool", - "object": "ObjectExternal" - }, - "res_type": "JS", - "res_lang": "ANY", - "res_code": "SCRIPT", - "res_cached": false, - "res_file": { - "path": "resources/ObjectExternal/AIExpTool/SCRIPT.js", - "mime": "text/javascript", - "name": "SCRIPT.js" - }, - "res_image": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "Resource", - "userkey": "ObjectExternal(AIMetricsChat)~ANY~STYLES", - "item": { - "res_object": { - "item": {"obe_name": "AIMetricsChat"}, - "icon": "img/system/external_object", - "label": "External object", - "userkeylabel": "AIMetricsChat", - "object": "ObjectExternal" - }, - "res_type": "CSS", - "res_lang": "ANY", - "res_code": "STYLES", - "res_cached": false, - "res_file": { - "path": "resources/ObjectExternal/AIMetricsChat/STYLES.less", - "mime": "text/less", - "name": "STYLES.less" - }, - "res_image": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "Resource", - "userkey": "ObjectExternal(AIMetricsChat)~ANY~HTML", - "item": { - "res_object": { - "item": {"obe_name": "AIMetricsChat"}, - "icon": "img/system/external_object", - "label": "External object", - "userkeylabel": "AIMetricsChat", - "object": "ObjectExternal" - }, - "res_type": "HTML", - "res_lang": "ANY", - "res_code": "HTML", - "res_cached": false, - "res_file": { - "path": "resources/ObjectExternal/AIMetricsChat/HTML.html", - "mime": "text/html", - "name": "HTML.html" - }, - "res_image": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "Resource", - "userkey": "ObjectExternal(AIMetricsChat)~ANY~SCRIPT", - "item": { - "res_object": { - "item": {"obe_name": "AIMetricsChat"}, - "icon": "img/system/external_object", - "label": "External object", - "userkeylabel": "AIMetricsChat", - "object": "ObjectExternal" - }, - "res_type": "JS", - "res_lang": "ANY", - "res_code": "SCRIPT", - "res_cached": false, - "res_file": { - "path": "resources/ObjectExternal/AIMetricsChat/SCRIPT.js", - "mime": "text/javascript", - "name": "SCRIPT.js" - }, - "res_image": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, { "object": "Resource", "userkey": "ObjectExternal(AIProcessResource)~ANY~CHAT_BOT_CSS", @@ -5474,13 +5260,13 @@ }, { "object": "Resource", - "userkey": "ObjectExternal(AIPromptTool)~ANY~STYLES", + "userkey": "ObjectExternal(AIExpTool)~ANY~STYLES", "item": { "res_object": { - "item": {"obe_name": "AIPromptTool"}, + "item": {"obe_name": "AIExpTool"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIPromptTool", + "userkeylabel": "AIExpTool", "object": "ObjectExternal" }, "res_type": "CSS", @@ -5488,7 +5274,7 @@ "res_code": "STYLES", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AIPromptTool/STYLES.less", + "path": "resources/ObjectExternal/AIExpTool/STYLES.less", "mime": "text/less", "name": "STYLES.less" }, @@ -5498,13 +5284,13 @@ }, { "object": "Resource", - "userkey": "ObjectExternal(AIPromptTool)~ANY~HTML", + "userkey": "ObjectExternal(AIExpTool)~ANY~HTML", "item": { "res_object": { - "item": {"obe_name": "AIPromptTool"}, + "item": {"obe_name": "AIExpTool"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIPromptTool", + "userkeylabel": "AIExpTool", "object": "ObjectExternal" }, "res_type": "HTML", @@ -5512,7 +5298,7 @@ "res_code": "HTML", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AIPromptTool/HTML.html", + "path": "resources/ObjectExternal/AIExpTool/HTML.html", "mime": "text/html", "name": "HTML.html" }, @@ -5522,13 +5308,13 @@ }, { "object": "Resource", - "userkey": "ObjectExternal(AIPromptTool)~ANY~SCRIPT", + "userkey": "ObjectExternal(AIExpTool)~ANY~SCRIPT", "item": { "res_object": { - "item": {"obe_name": "AIPromptTool"}, + "item": {"obe_name": "AIExpTool"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIPromptTool", + "userkeylabel": "AIExpTool", "object": "ObjectExternal" }, "res_type": "JS", @@ -5536,18 +5322,162 @@ "res_code": "SCRIPT", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AIPromptTool/SCRIPT.js", + "path": "resources/ObjectExternal/AIExpTool/SCRIPT.js", "mime": "text/javascript", "name": "SCRIPT.js" }, "res_image": null, "row_module_id__mdl_name": "AIBySimplicite" } - } - ] - }, - { - "object": "Script", + }, + { + "object": "Resource", + "userkey": "ObjectExternal(AIMetricsChat)~ANY~STYLES", + "item": { + "res_object": { + "item": {"obe_name": "AIMetricsChat"}, + "icon": "img/system/external_object", + "label": "External object", + "userkeylabel": "AIMetricsChat", + "object": "ObjectExternal" + }, + "res_type": "CSS", + "res_lang": "ANY", + "res_code": "STYLES", + "res_cached": false, + "res_file": { + "path": "resources/ObjectExternal/AIMetricsChat/STYLES.less", + "mime": "text/less", + "name": "STYLES.less" + }, + "res_image": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "Resource", + "userkey": "ObjectExternal(AIMetricsChat)~ANY~HTML", + "item": { + "res_object": { + "item": {"obe_name": "AIMetricsChat"}, + "icon": "img/system/external_object", + "label": "External object", + "userkeylabel": "AIMetricsChat", + "object": "ObjectExternal" + }, + "res_type": "HTML", + "res_lang": "ANY", + "res_code": "HTML", + "res_cached": false, + "res_file": { + "path": "resources/ObjectExternal/AIMetricsChat/HTML.html", + "mime": "text/html", + "name": "HTML.html" + }, + "res_image": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "Resource", + "userkey": "ObjectExternal(AIMetricsChat)~ANY~SCRIPT", + "item": { + "res_object": { + "item": {"obe_name": "AIMetricsChat"}, + "icon": "img/system/external_object", + "label": "External object", + "userkeylabel": "AIMetricsChat", + "object": "ObjectExternal" + }, + "res_type": "JS", + "res_lang": "ANY", + "res_code": "SCRIPT", + "res_cached": false, + "res_file": { + "path": "resources/ObjectExternal/AIMetricsChat/SCRIPT.js", + "mime": "text/javascript", + "name": "SCRIPT.js" + }, + "res_image": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "Resource", + "userkey": "ObjectExternal(AIPromptTool)~ANY~STYLES", + "item": { + "res_object": { + "item": {"obe_name": "AIPromptTool"}, + "icon": "img/system/external_object", + "label": "External object", + "userkeylabel": "AIPromptTool", + "object": "ObjectExternal" + }, + "res_type": "CSS", + "res_lang": "ANY", + "res_code": "STYLES", + "res_cached": false, + "res_file": { + "path": "resources/ObjectExternal/AIPromptTool/STYLES.less", + "mime": "text/less", + "name": "STYLES.less" + }, + "res_image": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "Resource", + "userkey": "ObjectExternal(AIPromptTool)~ANY~HTML", + "item": { + "res_object": { + "item": {"obe_name": "AIPromptTool"}, + "icon": "img/system/external_object", + "label": "External object", + "userkeylabel": "AIPromptTool", + "object": "ObjectExternal" + }, + "res_type": "HTML", + "res_lang": "ANY", + "res_code": "HTML", + "res_cached": false, + "res_file": { + "path": "resources/ObjectExternal/AIPromptTool/HTML.html", + "mime": "text/html", + "name": "HTML.html" + }, + "res_image": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "Resource", + "userkey": "ObjectExternal(AIPromptTool)~ANY~SCRIPT", + "item": { + "res_object": { + "item": {"obe_name": "AIPromptTool"}, + "icon": "img/system/external_object", + "label": "External object", + "userkeylabel": "AIPromptTool", + "object": "ObjectExternal" + }, + "res_type": "JS", + "res_lang": "ANY", + "res_code": "SCRIPT", + "res_cached": false, + "res_file": { + "path": "resources/ObjectExternal/AIPromptTool/SCRIPT.js", + "mime": "text/javascript", + "name": "SCRIPT.js" + }, + "res_image": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + } + ] + }, + { + "object": "Script", "label": "Shared code", "icon": "img/system/shared_code", "field": "row_module_id", @@ -5632,68 +5562,68 @@ "list": [ { "object": "TranslateAction", - "userkey": "Action(AI_SENT)~ENU", + "userkey": "Action(AI_ACTIVE_SETTINGS)~ENU", "item": { "tsl_object": { - "item": {"act_name": "AI_SENT"}, + "item": {"act_name": "AI_ACTIVE_SETTINGS"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AI_SENT", + "userkeylabel": "AI_ACTIVE_SETTINGS", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Sent", + "tsl_value": "Activate", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "Action(AI_SENT)~FRA", + "userkey": "Action(AI_ACTIVE_SETTINGS)~FRA", "item": { "tsl_object": { - "item": {"act_name": "AI_SENT"}, + "item": {"act_name": "AI_ACTIVE_SETTINGS"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AI_SENT", + "userkeylabel": "AI_ACTIVE_SETTINGS", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Envoyé", + "tsl_value": "Activer", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "Action(AIAutoGenModule)~ENU", + "userkey": "Action(AI_CLEAR_HIST)~ENU", "item": { "tsl_object": { - "item": {"act_name": "AIAutoGenModule"}, + "item": {"act_name": "AI_CLEAR_HIST"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIAutoGenModule", + "userkeylabel": "AI_CLEAR_HIST", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Model generation by AI", + "tsl_value": "Clear historic", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "Action(AIAutoGenModule)~FRA", + "userkey": "Action(AI_CLEAR_HIST)~FRA", "item": { "tsl_object": { - "item": {"act_name": "AIAutoGenModule"}, + "item": {"act_name": "AI_CLEAR_HIST"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIAutoGenModule", + "userkeylabel": "AI_CLEAR_HIST", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Génération du modèle par l'IA", + "tsl_value": "Effacer l'historique", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } @@ -5734,170 +5664,170 @@ }, { "object": "TranslateAction", - "userkey": "Action(AI_ACTIVE_SETTINGS)~ENU", + "userkey": "Action(AI_SENT)~ENU", "item": { "tsl_object": { - "item": {"act_name": "AI_ACTIVE_SETTINGS"}, + "item": {"act_name": "AI_SENT"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AI_ACTIVE_SETTINGS", + "userkeylabel": "AI_SENT", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Activate", + "tsl_value": "Sent", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "Action(AI_ACTIVE_SETTINGS)~FRA", + "userkey": "Action(AI_SENT)~FRA", "item": { "tsl_object": { - "item": {"act_name": "AI_ACTIVE_SETTINGS"}, + "item": {"act_name": "AI_SENT"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AI_ACTIVE_SETTINGS", + "userkeylabel": "AI_SENT", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Activer", + "tsl_value": "Envoyé", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "Action(AIButtonSkip)~ENU", + "userkey": "Action(AIAddData)~ENU", "item": { "tsl_object": { - "item": {"act_name": "AIButtonSkip"}, + "item": {"act_name": "AIAddData"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIButtonSkip", + "userkeylabel": "AIAddData", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Button skip", + "tsl_value": "Data generation", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "Action(AIButtonSkip)~FRA", + "userkey": "Action(AIAddData)~FRA", "item": { "tsl_object": { - "item": {"act_name": "AIButtonSkip"}, + "item": {"act_name": "AIAddData"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIButtonSkip", + "userkeylabel": "AIAddData", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Saut de bouton", + "tsl_value": "Génération de données", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "Action(AI_CLEAR_HIST)~ENU", + "userkey": "Action(AIDirectPrompt)~ENU", "item": { "tsl_object": { - "item": {"act_name": "AI_CLEAR_HIST"}, + "item": {"act_name": "AIDirectPrompt"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AI_CLEAR_HIST", + "userkeylabel": "AIDirectPrompt", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Clear historic", + "tsl_value": "Direct prompt", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "Action(AI_CLEAR_HIST)~FRA", + "userkey": "Action(AIDirectPrompt)~FRA", "item": { "tsl_object": { - "item": {"act_name": "AI_CLEAR_HIST"}, + "item": {"act_name": "AIDirectPrompt"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AI_CLEAR_HIST", + "userkeylabel": "AIDirectPrompt", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Effacer l'historique", + "tsl_value": "Champs direct", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "Action(AIAddData)~ENU", + "userkey": "Action(AIButtonSkip)~ENU", "item": { "tsl_object": { - "item": {"act_name": "AIAddData"}, + "item": {"act_name": "AIButtonSkip"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIAddData", + "userkeylabel": "AIButtonSkip", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Data generation", + "tsl_value": "Button skip", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "Action(AIAddData)~FRA", + "userkey": "Action(AIButtonSkip)~FRA", "item": { "tsl_object": { - "item": {"act_name": "AIAddData"}, + "item": {"act_name": "AIButtonSkip"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIAddData", + "userkeylabel": "AIButtonSkip", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Génération de données", + "tsl_value": "Saut de bouton", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "Action(AIDirectPrompt)~ENU", + "userkey": "Action(AICalculateFieldJs)~ENU", "item": { "tsl_object": { - "item": {"act_name": "AIDirectPrompt"}, + "item": {"act_name": "AICalculateFieldJs"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIDirectPrompt", + "userkeylabel": "AICalculateFieldJs", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Direct prompt", + "tsl_value": "Save with AI", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "Action(AIDirectPrompt)~FRA", + "userkey": "Action(AICalculateFieldJs)~FRA", "item": { "tsl_object": { - "item": {"act_name": "AIDirectPrompt"}, + "item": {"act_name": "AICalculateFieldJs"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIDirectPrompt", + "userkeylabel": "AICalculateFieldJs", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Champs direct", + "tsl_value": "Enregistrer avec IA", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } @@ -5938,34 +5868,34 @@ }, { "object": "TranslateAction", - "userkey": "Action(AICalculateFieldJs)~ENU", + "userkey": "Action(AIAutoGenModule)~ENU", "item": { "tsl_object": { - "item": {"act_name": "AICalculateFieldJs"}, + "item": {"act_name": "AIAutoGenModule"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AICalculateFieldJs", + "userkeylabel": "AIAutoGenModule", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Save with AI", + "tsl_value": "Model generation by AI", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "Action(AICalculateFieldJs)~FRA", + "userkey": "Action(AIAutoGenModule)~FRA", "item": { "tsl_object": { - "item": {"act_name": "AICalculateFieldJs"}, + "item": {"act_name": "AIAutoGenModule"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AICalculateFieldJs", + "userkeylabel": "AIAutoGenModule", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Enregistrer avec IA", + "tsl_value": "Génération du modèle par l'IA", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } @@ -6126,18 +6056,18 @@ }, { "object": "TranslateField", - "userkey": "Field(aiFieldsParam)~ENU", + "userkey": "Field(aiApiKey)~ENU", "item": { "tsl_object": { - "item": {"fld_name": "aiFieldsParam"}, + "item": {"fld_name": "aiApiKey"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiFieldsParam", + "userkeylabel": "aiApiKey", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "List of IA attributes", - "tsl_simplehelp": "

List of attributes to consider when calling the chatbot.<\/p>\n

"); - html.append(getTdField(dom.getFieldValue("obd_name"))); + html.append(getTdField(dom.getFieldValue(DOMAIN_NAME_FIELD))); for (int i=0; i Date: Wed, 17 Jul 2024 16:57:43 +0200 Subject: [PATCH 23/74] improved monitoring --- AIBySimplicite.json | 241 +----------------- README.md | 2 - files/Model/Model-AIModuleCreate.png | Bin 90050 -> 81383 bytes files/Model/Model-AIModuleCreate.svg | 2 +- module-info.json | 2 +- .../ObjectExternal/AiMonitoring/FRA/HTML.html | 4 +- .../ObjectExternal/AiMonitoring/HTML.html | 4 +- .../commons/AIBySimplicite/AITools.java | 9 +- .../AIBySimplicite/AIModuleCreate.java | 5 +- 9 files changed, 23 insertions(+), 246 deletions(-) diff --git a/AIBySimplicite.json b/AIBySimplicite.json index c95fc7e..c01b868 100644 --- a/AIBySimplicite.json +++ b/AIBySimplicite.json @@ -110,7 +110,7 @@ "mod_doc": { "path": "files/Model/Model-AIModuleCreate.svg", "mime": "image/svg+xml", - "name": "Model-AIModuleCreate.svg" + "name": "model.svg" }, "mod_image": { "path": "files/Model/Model-AIModuleCreate.png", @@ -486,7 +486,7 @@ "lov_name": "TEXT", "lov_code": "AI_SETTING_NEED", "lov_lang": "ENU", - "lov_value": "Your AI assistant has not yet been configured.", + "lov_value": "Your AI assistant has not been configured yet, or is not configured correctly.", "lov_order_by": 1, "lov_event_id__lev_code": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -694,7 +694,7 @@ "lov_name": "TEXT", "lov_code": "AI_SETTING_NEED", "lov_lang": "FRA", - "lov_value": "Votre assistant IA n'a pas encore été configuré.", + "lov_value": "Votre assistant IA n'a pas encore été configuré ou est mal configuré.", "lov_order_by": 1, "lov_event_id__lev_code": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -2821,7 +2821,7 @@ }, "pcs_max_duration": null, "pcs_duration_unit": "D", - "pcs_persitant": false, + "pcs_persitant": null, "pcs_persist_depth": null, "pcs_alert_id__alt_name": null, "pcs_compensate_id__pcs_name": null, @@ -3045,25 +3045,6 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, - { - "object": "BPMActivity", - "userkey": "AIModuleCreate~AIC-NC-END", - "item": { - "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC-NC-END", - "acy_name": "needConfig", - "acy_comment": null, - "acy_type": "E", - "acy_posx": null, - "acy_posy": null, - "acy_reversible": "N", - "acy_max_duration": null, - "acy_duration_unit": null, - "acy_alert_id__alt_name": null, - "acy_user_dlg": true, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, { "object": "BPMActivity", "userkey": "AIModuleCreate~AIC_0005", @@ -3311,25 +3292,6 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, - { - "object": "BPMActivity", - "userkey": "AIModuleCreate~AIC_CHECK_CONF", - "item": { - "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_CHECK_CONF", - "acy_name": "CheckAIConfig", - "acy_comment": null, - "acy_type": "I", - "acy_posx": null, - "acy_posy": null, - "acy_reversible": "N", - "acy_max_duration": null, - "acy_duration_unit": null, - "acy_alert_id__alt_name": null, - "acy_user_dlg": false, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, { "object": "BPMActivity", "userkey": "AiSettingsProcess~ASP-0100", @@ -3530,15 +3492,15 @@ }, { "object": "BPMTransition", - "userkey": "AIModuleCreate~AIModuleCreate~AIC-BEG~AIModuleCreate~AIC_CHECK_CONF", + "userkey": "AIModuleCreate~AIModuleCreate~AIC-BEG~AIModuleCreate~AIC_0005", "item": { "trs_process_id__pcs_name": "AIModuleCreate", "trs_from_id__acy_process_id__pcs_name": "AIModuleCreate", "trs_from_id__acy_step": "AIC-BEG", "trs_from_id__acy_name": "Begin", "trs_to_id__acy_process_id__pcs_name": "AIModuleCreate", - "trs_to_id__acy_step": "AIC_CHECK_CONF", - "trs_to_id__acy_name": "CheckAIConfig", + "trs_to_id__acy_step": "AIC_0005", + "trs_to_id__acy_name": "Choice", "trs_name": null, "trs_action_id__act_name": null, "trs_condition": null, @@ -3813,25 +3775,6 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, - { - "object": "BPMTransition", - "userkey": "AIModuleCreate~AIModuleCreate~AIC_CHECK_CONF~AIModuleCreate~AIC_0005", - "item": { - "trs_process_id__pcs_name": "AIModuleCreate", - "trs_from_id__acy_process_id__pcs_name": "AIModuleCreate", - "trs_from_id__acy_step": "AIC_CHECK_CONF", - "trs_from_id__acy_name": "CheckAIConfig", - "trs_to_id__acy_process_id__pcs_name": "AIModuleCreate", - "trs_to_id__acy_step": "AIC_0005", - "trs_to_id__acy_name": "Choice", - "trs_name": null, - "trs_action_id__act_name": null, - "trs_condition": null, - "trs_callback": null, - "trs_alert_id__alt_name": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, { "object": "BPMTransition", "userkey": "AiSettingsProcess~AiSettingsProcess~ASP-0100~AiSettingsProcess~ASP-0200", @@ -4066,21 +4009,6 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, - { - "object": "BPMData", - "userkey": "AIModuleCreate~AIC-NC-END~Forward~Page", - "item": { - "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", - "dta_activity_id__acy_step": "AIC-NC-END", - "dta_activity_id__acy_name": "needConfig", - "dta_group": "Forward", - "dta_name": "Page", - "dta_order": 1, - "dta_value": "[EXPR:HTMLTool.getListURL(\"AiSettings\",\"\")]", - "dta_field_id__fld_name": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, { "object": "BPMData", "userkey": "AIModuleCreate~AIC_0005~Data~Template", @@ -4531,21 +4459,6 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, - { - "object": "BPMData", - "userkey": "AIModuleCreate~AIC_CHECK_CONF~Service~Name", - "item": { - "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", - "dta_activity_id__acy_step": "AIC_CHECK_CONF", - "dta_activity_id__acy_name": "CheckAIConfig", - "dta_group": "Service", - "dta_name": "Name", - "dta_order": 1, - "dta_value": "checkConf", - "dta_field_id__fld_name": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, { "object": "BPMData", "userkey": "AiSettingsProcess~ASP-0100~Constraint~Mandatory", @@ -4754,22 +4667,6 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, - { - "object": "BPMGrantActivity", - "userkey": "ADMIN~AIModuleCreate~AIC-NC-END", - "item": { - "gta_group_id__grp_name": "ADMIN", - "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", - "gta_activity_id__acy_step": "AIC-NC-END", - "gta_activity_id__acy_name": "needConfig", - "gta_grant": [ - "R", - "W", - "C" - ], - "row_module_id__mdl_name": "AIBySimplicite" - } - }, { "object": "BPMGrantActivity", "userkey": "ADMIN~AIModuleCreate~AIC_0005", @@ -4914,22 +4811,6 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, - { - "object": "BPMGrantActivity", - "userkey": "ADMIN~AIModuleCreate~AIC_CHECK_CONF", - "item": { - "gta_group_id__grp_name": "ADMIN", - "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", - "gta_activity_id__acy_step": "AIC_CHECK_CONF", - "gta_activity_id__acy_name": "CheckAIConfig", - "gta_grant": [ - "R", - "W", - "C" - ], - "row_module_id__mdl_name": "AIBySimplicite" - } - }, { "object": "BPMGrantActivity", "userkey": "AI_DESIGNER~AIGenData~GGD_0100", @@ -4978,22 +4859,6 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, - { - "object": "BPMGrantActivity", - "userkey": "AI_DESIGNER~AIModuleCreate~AIC-NC-END", - "item": { - "gta_group_id__grp_name": "AI_DESIGNER", - "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", - "gta_activity_id__acy_step": "AIC-NC-END", - "gta_activity_id__acy_name": "needConfig", - "gta_grant": [ - "R", - "W", - "C" - ], - "row_module_id__mdl_name": "AIBySimplicite" - } - }, { "object": "BPMGrantActivity", "userkey": "AI_DESIGNER~AIModuleCreate~AIC_0005", @@ -5133,22 +4998,6 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, - { - "object": "BPMGrantActivity", - "userkey": "AI_DESIGNER~AIModuleCreate~AIC_CHECK_CONF", - "item": { - "gta_group_id__grp_name": "AI_DESIGNER", - "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", - "gta_activity_id__acy_step": "AIC_CHECK_CONF", - "gta_activity_id__acy_name": "CheckAIConfig", - "gta_grant": [ - "R", - "W", - "C" - ], - "row_module_id__mdl_name": "AIBySimplicite" - } - }, { "object": "BPMGrantActivity", "userkey": "AI_DESIGNER~AiSettingsProcess~ASP-0100", @@ -8232,44 +8081,6 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, - { - "object": "TranslateActivity", - "userkey": "BPMActivity(AIModuleCreate AIC-NC-END)~ENU", - "item": { - "tsl_object": { - "item": { - "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC-NC-END" - }, - "icon": "img/system/activity", - "label": "Activity", - "userkeylabel": "AIModuleCreate AIC-NC-END", - "object": "BPMActivity" - }, - "tsl_lang": "ENU", - "tsl_value": "Please configure your AI Assistant", - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "TranslateActivity", - "userkey": "BPMActivity(AIModuleCreate AIC-NC-END)~FRA", - "item": { - "tsl_object": { - "item": { - "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC-NC-END" - }, - "icon": "img/system/activity", - "label": "Activity", - "userkeylabel": "AIModuleCreate AIC-NC-END", - "object": "BPMActivity" - }, - "tsl_lang": "FRA", - "tsl_value": "Veuillez configurer votre assistant AI", - "row_module_id__mdl_name": "AIBySimplicite" - } - }, { "object": "TranslateActivity", "userkey": "BPMActivity(AIModuleCreate AIC_0010)~ENU", @@ -8574,44 +8385,6 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, - { - "object": "TranslateActivity", - "userkey": "BPMActivity(AIModuleCreate AIC_CHECK_CONF)~ENU", - "item": { - "tsl_object": { - "item": { - "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_CHECK_CONF" - }, - "icon": "img/system/activity", - "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_CHECK_CONF", - "object": "BPMActivity" - }, - "tsl_lang": "ENU", - "tsl_value": "Check AI configuration", - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "TranslateActivity", - "userkey": "BPMActivity(AIModuleCreate AIC_CHECK_CONF)~FRA", - "item": { - "tsl_object": { - "item": { - "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_CHECK_CONF" - }, - "icon": "img/system/activity", - "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_CHECK_CONF", - "object": "BPMActivity" - }, - "tsl_lang": "FRA", - "tsl_value": "Vérifier la configuration de l'IA", - "row_module_id__mdl_name": "AIBySimplicite" - } - }, { "object": "TranslateActivity", "userkey": "BPMActivity(AIModuleCreate AIC_0600)~ENU", diff --git a/README.md b/README.md index bcd6811..3a55dd2 100644 --- a/README.md +++ b/README.md @@ -139,7 +139,6 @@ Auomatic model generation process * `Begin`: * `End`: -* `needConfig`: * `Choice`: * `CreateModule`: * `TranslateDomain`: @@ -153,7 +152,6 @@ Auomatic model generation process * `AI`: AI for modeling * `Generation`: Module generation based on ia feedback * `RemoveModule`: Remove module -* `CheckAIConfig`: `AiSettingsProcess` business process definition ----------------------------------------------- diff --git a/files/Model/Model-AIModuleCreate.png b/files/Model/Model-AIModuleCreate.png index 099384f3ca09c8e058a814fb91ce31f639fba9c8..57b447bc15d6c47f33da0c064ad554a43502762c 100644 GIT binary patch literal 81383 zcmd43by$?$);|v8APgWewDd3og94Hw(lVr^bT^_%2@(Pl(%s#ygmfw*4Fb|4A&r1E zNC@J0&w1bTob&$q`|o#MT+i{k@45HhtJnIhwNIG3s{9SYn}j$xI5!j(FpqF>AZQ$% zYnueu!4t{hDHiZQxGs<6AK+9DGi>7Eu;3_Sq_sRuwzKe4sV2|=ew_6xIb~NN!>#rs zM4!k>6@-yj$wi^5F&g9=8k7&aFvm1h6cj@2avD{6evh~)$)z`~H?945yiSw<{>?hz zs!eHaJ>9hzaBn*jJN>q{JII;iVskd=HJllC1`{`J@H3Pq!f?cmg*|9;{Z&>43!j`-!^xH2(kY><3kr_Y1ISVK?{x z=Ls6UeeHjDmVy+sNlEh=CsaxO^MsP}aqMo86n}tzxRpt+ayp| zSN@9RBKzO7!~(K?{)cAp-~WG*o%;%cA|Y*HJjm4@_sGZc&_5L=B^~yy*t**yseMU_ z^t<7YE)K)Yrrkhf<^m_5PT9aqz{}}Wz}KFrFK-PK{0IgN?aB_08%YY0I3F@l>RRRB z61jw6u~Ondu-i;XGd_r%w1#X+sa`p`z7g2rI!s;tCZ>x~q1_1T4I`B8HnQ&;1M-5Z z`31nmWQwIA-?vph_}!UBPL zw95AJv-@EyoJvUv?ZrEe!2JvK;&P?ygF?F?G=MzOBZfkIRwwsQ+&d?^kXx(5L-OAF zKGfbvO=9<&_E=sSoKvh1rG+e|5cj6?S&kIQlOj>5C(jX*YXyO_vf60QVi7z&vJA4^ z-08wR{h?{r5n5@*{U-Icb5Wy_6PDekWe-Y0&QL~{sPg_eHu?RfkCI(oqU;vi)74GC zrVQ&tm6VjiPsY)=5)_a-J&-oRWmicLtg90&EH0jcQ&Fk#sa6WTDAKzJ55jNy@y#43-F`H1*@_OY8eyVZ~W=;^?#ZUT=nX%M+qFYbRorNuGb zZ}h{mvzsC5+p;p}^R<+fnz$76v(%-A$Ln|e?krruzbJcM_xm3cmIVIpP6`?5SOeLy}QJ+DxcD>>Yhr?|NG4ty=BO)Hm&S5LKIhy`I?oIscLB zZJTuJoZvR&-xeK#Fj`(SDQ?BM{@TcVy=rZJn=&}i()u+$hgmq8w5MYhMb0zlsrTJ_ zQ+(ti&iAv@a|cuTu4M>2_E`G*5c9-*ZYYOTcrYyU{<+$m{^%>|(6Y&H_4u(JGu^Jn zkw&COqSW}0E8w-RC~|YpzJzX4>$;X^hsZFnQh_OHYbTxbZR>Xqci`!o znuYTlz9EbF!PRp#p3|GisTrG)P~bD69+S>%=e<3x^ukhKv0Vw+q0Uq8wT z^X9sZFoFTcS4Z@7q6a3K_f|3dM6vD3%nggdqr!{d9_LKzWKl`Sp~GLkmFHe&kMD>A z#_SCiS+e|`sK|nVCgzqdWep4{5i?6LkgC2S`|xFhF^<3M5ΝW9P;~RFA+Hu>x4Q zH%1*9j_4HY(YCRC^Szu1mI^{h_cQK}!&oUl=)@&OSnfRr6124EMqCIQja!pApOh>1 zYeG{fAV1i1g01)IQiB}wiwtn`mq;n;0}4uaHr!e`uWBrn^qbPs_E2)*=bsowa7ueF zhjGNFr0BA7!le&PD2kj#_R+w(`(iCNuggcFy$c*Z&z^xiQA0N>fFPWB53Q&XVBtM? zuTDfj2>g-_7leRoFuhE_#@xh|6g%=nMNM|+&=PX{GN|>|#G85qy2dF3qmD*L`3=Y@ zo>lOtc9|E`fFu6BQ$_%XPf3W-=34-S+WuoD33m)4m z;Rlxah23Xan`Y-4EGTr0x9#z!VoeLuB6N)N%!~cqpz*4&0xB7V*#S-}>tD5ue+j-h?oIPypQa-QpF} z%m-vUKO0%?%v=DqlzSp*nPIv|wXYP>Im>yu)9({%e>VUXuC}hN9jnH$+zfydOQLw< zgE0nf)Vt+E9H`Vf8D}nz{@?(_IE()xICH?`K1v0ax6pESG~}Upe0h721>TIh5CjjU zg-j!XK|uxtXOLu4foO1;$x4UauX{-dk{*|zRnOcIU?WYt+Dbk}@S7Q%qTIk_4ox=y z9^k43lNn;za1%h(32a~mCb8B(p^#gRRc2K0ib6Z`UuHr;sATKOF9f&c0wKk+|KJ{+ z7Y6=iOaA~iF!4q+E+eDt!{|K@4t#xm{l(cxna}BO;-q}Qr`ya(GiQ)AINxJH-?`HZ z?34G&0P|~Ebb123lf(e#QN#dYW>M+4D%3pc8f)I96R(}>?)B%3IGK%fQ(D!&n`T39n`Iw#; z!X_coG^G48uTTPM<7BdBv*MyIL`mI< zhsG*Y9%?;SsAxM{gXi#mPwqKkY}!TTzbTS^e%PFnp-DG5Ve`Zazk^qbae8|%ZXoKztJ(f z_c4m(!~JOrWwxh2X0y1&;xEuwmp>%GV$_fU@mX0>AXIX{%!i^RB-+SD_Q|kL4=B$i zs{4;Zdm-@CP4f;a>Tln^t>f@C@jj3(H>fA9{hkx_RIOg|p<}iMst2_kt>JDU`%MI$4lW1?YrtQ0Ybl3h+KHBV1i%`!ulUGLYIcup84=Dhk1J6-UVRHgU6 zx$Ch=LMg~yMVfm3seyMBt#8^1&EVCSXFG2g<0!(C`_ehK*q&QNW{2j6W`YtUN`d7) z5be_1=Ltm?3+Vd-H2(zK5vNs0Iq|93(V&3GkA=O(-?Npy-)ORrT0A{K(4&VC?GJqpU6 zk$rrPJ0s|p^}?nHX(zf_J;4ZtK*W)U#r82!oC96x!f+21BRHP!hOKrjW$ic6YjWW3 zh#dtUZpjpb1V#gu3zZR{EI@D~*bujrbXH5?lyM2ap{PWvnP&R4z22AMY;z~mm!r@e5siCPJ z@@k+acurACFtBABEvN24hqr1KL}Oq~PI+!palI@bjotQ8!vf)3kQvw*m3kjGAq(o$ zHfac-Lc3_Z1tk@V3xPUpy;Sk>#?z9avodbJezw4If4|iM`ngMVH_EfW1S9!0_}7{(4z9C?&*$GXq2pjUtLu6F)3;(Ch2 z1-%QDRSXX=3=Q>o7-sM@u=9SLJ=?k*Bph2z`a>;J{o-#3c}{&*+sn%Wi9@3#j^l@S z*K!0&`eODqhe6%7Y@SGkLiGeq-($TStVX6YGy(Lo*nx>U8XCZ1mPn~MghsYqQF}+f zDA^xUS{(Yj<(u3)D94!uB&=;71KhBN|FUBDTCK5 zJ&z|9S)_p7;P^YcgL<@wLOlTSGe$L^j z<&yK`!mDloQti{zsZjnKSW-XU(1XCM2(k1Vgs&m}X<0z|?Js9VrNHt4P(ThDdIs3% z_t+G7%Km!G3&?Iu7zT@0b1f2!7e0V!51^(D3re~ zc9&MXR7u!0Nb2+>A7gy^t?*Ux`eZzIX{!Rx+58waGB9e8ahEO}cE zf(wX*21bY`0GL2#G3Inr-c*dZ$x4rx^FR;qKo4va_KVsEL@Nv+jr}Pxbr4ip6-fK= zy2XJ4OEM6T#Ty}g8aTlnK$^!n{|lgi*Fd)3dJPuq_Yr(^6~FunutOTK3mO#*9@>L% zo{dkGgGx9D5c%7_9Ukka4IY+{J>uekb>V=8hy@X40ImT3C5+70Mh4=>!Ey(d_(I)k z#j?k3??$;KOc1Et7%v;}LP#wo)Z39D z)ddzsL}${)`-x)};~U5?VS>q^7O!6QU;w9=0;k7aS{_E4c>yuay5mAv{QE#ghzS;O zVfEL;l9ZHeC9crE3Vz7$$U+?hRR)G?QFGngS%F0d#-&g4{-DyN^$mqzzYp!AzT;2NtxEf&Ta4YsaVU{MD9n?pWZDf&U5f}d8&W3eXeLIm8q4wpD9GhszY+*%-v)FPA~2|Uyp9EjG@ zOeY5V0O%v!B3C&YK#;;f|GlmQQL+GX{707Cz!p)!4xb3#XHtOtQ)nQ`Ji+IE0*|AS zX4XK|w;P#0t3s#|``fqMTZW_>Rojh)^-CAIZh@7wfTZ#RveM%H{(ygNe_b!<0|pDW zBo=1^yj}!bhA)&h0j0xP=) za{cYPnYjXs8{nlyqrJWWoB$sv_q|en6=3_81j?D$8N{H(+oX|g0e=5-j<3KmPe2yy zABt5-sDJ>ge=1fX(~7NR724;(;_D8~$_u4HV= z{eNRkO%gD%19(rkTi2i;)B=F$sP*(jDg^EkP{7o8DtZVwuPD~k3`5u0{ySuKfc?p@ z4{s~9M}vR4J$o^g1`Pm?9~R9V12TwxaHwulg}ERQzo>!oi9*2%reWm^#9~L`*+cWf zxW=ME;ty?rT7Uu&ga%=j2sMZf2#M7XZdXSl&3M2=mwNn%GLU~2r3pg=N^w$pKyn@7 zDPbTs5Mc2aT(D>^*xnz$g2ljau^v4#5KOzX6o8UYQwE8@ zSaB)fdNm9lE5;wpG&ykaJlVOB5uoW{b_?vODTGfX^MB$!c26uEfCIAyTWu3yRRlOJ zs8ZwwHb!BsjF+ED3eo@~Q?(Bb3l5w>5{U7PP5>VsDg;zs&rV}11gfk66r)4VJnp~U zq=kQb$dO;n`lgWQdB0vM`A@8wfOwziL}BwAYy_MD1=fdwG8B&H+f@T^dBNK4eICGb z0kpLH#Mlo31^7k}_%$$!lF1q655g_0!MQb4W8*@R~@7IzkB~ zfj(!Va~olPyK)ZAaXs| z6xvU~Hw}9bs1#(0}lr_l0&Z)Nus_cO!A(1iuR03?c4}rhc%TLo& zfb&ZF|ISChfDsmOtUKx^$3pW#M1XT24yHgYKn_JtZW_?Bp-Ak8qZ0;w0L%&gAXPaW zx~-a9i4Jefr9DmPp0|njqJj~6G&lk=MQp|AA*}PLo|oV|;4sCI$W7g)K!wFz znn}79u?fVgFjrC6MdSn38No2 zU|&FCsj*T;M5(`BgiPj*qW)+zHTfpN_wpMQqGVbl@0H&^$sOGM6l(+Xc&o<$a;?j5 z8D23&D|#wE1sitG=&aYWw} zEA3R_eJg`d9Z+kJdrCU|EZt93M{B8<&EdFTrG4O&wH@I^!C-9w+Dyp;?MINe6!O7m`Pg?W~fU}d~)VI z-oJWI=wQ0kKJ{E!bttA+_hNopcWpG-XZUHhAKjn$QK8!s6WvFm;&eS4E-Ec2Os^|H z$gLDK(uyC@v$!L1Gk^t7zrR-XdmX{zqT2KBZBGx}y`r!Gns~zguU9l}x1Y-(xc=Vf zrs_Xv_bFqT*4mm1cCn&W;EcNT@@_=VjS986Jkp|+&F47$R-ZLW;qvQVaxiod8?V1N znD;+ZSUg?OTI$SF)oOaGE1>~}O4TOb%gkhsdEyg)u)xUkzN*b2BK>S;rnqRw7-(>~h_Z5`(DMn)}FEb|tLjQF#J!sMdyRG#qdNyN)MeH?fd9nhkoo0*eBcl-@gbeAgZc@povkd7nh zQ#?QL__a!@tiRGO-)b~-nec8{sXOlJ;&2klGcNI)_6ORv*=bCJ+dG(3Vt18Q#29&` z>_Z~w&lQ%{k9#e=YoAHpZ;Vl;r4m2NHaCy!o389Fc|GBK{GM4_wpTAU=f9Hhh{ys6g3VUm!^8)s&c9T)?-E@Hu z)f168u?UiDIm3n(YrfyBzW05J;<*H{a-H2*l0UzH$&44P#Kp#{|4c|tE&XGt7@?t+ zZ}@y&6>0fC(9tmpj*@ij;;5DU6xN#)s!RBYC{z)9z6HY}pJIwRp8`uUP<4wIPkoWwVtp)J!c%-Y`>zy2jTb z>)PyRdg|!)H%#weKBas4qebxBl8&T*U=uX*qq!J^Hpv`lX!i{cP9SC3C*LZBr;FKn zE2kNOOsNA~5HVFMCqZw@E`DHCRn}W;Pv$q4+TDo@B(I>TKF+1z8TaqEdt3e6X~%m1 z=fFlWkM@~m$}K?^dp(<*+S9aRrHAUMXuB5--(UXZcHNnw0xgt!q^wG2QEr#nO0CjA zlPhlQEE<$)WEWdD9N`R1b&3(4Pw)=VFQmOl)iku{9fj{c7i|tBQagSlmBJ;b2H8~O zXSSXRe1h#MUmcf7vWkitMig3ES=n}qZ^4-Bs|;D5xR`>ppdDnCkd^KaiY(hurL6X* zB$CU3rDw+3p^g4$llV3 z&kufy47V`yyjwNVEDYS(KPU{DGz2x-USP+VS}z+@c-E@8x|+9g+u6I4;xItk!Jk4w z{{G>kLoBwvy0$h6I4fAjB)-n8w)o5w`d^hjIg;h}_m3Yt{}qAX_XWLunN67ttJbY^ zSxk>6sZ(%qdGw5ICy^;9nuoi^?Dz5J#>5+n=PoXG`Dp&Zg6xeYUNy2V_+X$$MYgb#qLXf|7144pz%Q$QEG1unyx925mQ_It^CYuESDO{mR{LF_(P4 z5i%Y&FmTKJaI?h2XNv1`<@LwTO=nxXygo6ia7Ejjk6;5`VHBgyEifxJloPd&)UEQl@KD4fX-L=^sMX9HS#T*pSjMzDM}iK#M`CW@OEiBMo7!Qi z`w^xs5Y)!ofTb2OZZ_Q9O6_R$(@>6h@_UPL@xYO0P6+0{iT8@^D%C1ur!H)8(foC_)AtAEf1J5{B*og~Y$6}9eIylm zte|4>ot!c$xsWx3uO`1xq3z>;+V(dLy)@N3f|Fqh{{hVa$~g+B6slwEymRa2vat(_ z>W|vyJH^hq(;v%4k4@jwLEzQue;wu-gCGcD-EI+=TbC7g|svbU%OZl;t%8w9gdWbmFgnEJX9|XxEhu| zK%xER)VE&dm*nvW7Jzo~Qtp7DB8wBK0NT?I2;iZ#fYnO5Y6l)_-ZxxH!owSAV{YG9 z?-D_i|FjXqGVG*Wq9q8|(}ObMue?Xe=5X z2mA`CeX%o$)YziV`?ZET;!7rIXZ&k^j|udkQyTR6}@I>saQ5P{4rW5=LB;7ou+N#j?_~WJNe0KZ!|!L6mX~++GW$k?>hOl6@8w+vCV7QJbA&vM z7O&`G3Xf1gJQz~KjyQst<+V|a#9E#jBaDPjxGDu?y^H?vfs>S(BU8hSprZ3?2c)%DuC?C6rG!mX5^vRF8+9lT5q0A$o|>Gn9en4 zyexc*5m;eY$>P|jlzh{VuhOA6@lXN+niQ02EM>tSw9@8ZSpD}wp&S^)t;y~mOGYLg zCxS+xNkU{O5`8XCo^*=+y;$|#m@c!#a=N{Plx8^(M!GaA&pf%FS-KH+$wOhKsi`R> z9k&rC_DM$C{N4XuPdy-?ePAF#40wIDL+|}h_^C&~7@8>NS^GZ^hcQe$cLVPn zqp2!_jSw?&F&MQ-FbTB8NEn{wMf{WLALIvARHjE@6zY+VPVgJel6)t5Ruj()D&%7% zep-SL=|ZhNY32KUrQ^K?=FSk(uj?71xqb4lXs{x>4=!X2xfPC} zu%2A$fy;7ob5Amfn7p^*%l28*&wRelDgDE`5h`)Mz|r(0*~{q@9?jx%#GNSw3V}qh zE2%~j)j50gI*14UiULrcQeB?_fEoP!P6O=uX=H<6wq4{gFd8ITV5b>=P3n$TJ`^>2 zHMF)d|4!JT&Ngo-Wl<-?&uO;Vg+u36E8I8d++9mo%d#t!d}FdKp#Z!f>N!$%1D1e#OlXtv}-^(-JH$`&Rnk)^V(?=b_W3 z=*UC^n3|Ox+5FsuH~IOS?*&IIUtoF-_hHvmm3v0~-zcc5P3EJw*v9gc8-xd7Ke926 z+-a@iz|C%t4wn~o!=B9%dbf~GH!i$3f865y)bvlaWm-)BdSPf{XnCL7dEY7MkKdpo z3};g0Ck$7Rx7LOyS1NQwf8f0LV~{d)=8kp({MRF?z20z64r<9XJ@3z0?4_i& z`TeKcB77vjLj7n9P}z7@aE@YAai?5OK7Dj_AiZC{gw%Km4(q8nfEq4^(tXt1gfu}S29S)BO{)VT~ zzWop-Sm+W&frA)|Q-psN8JcIZ+vQ)gI5gqD%qU+d2?CrRNV!WcmN&#Co+yeSEDa$-yMI69X}3LbZ~R(fBEIk0X3X( zpgO=Jk!)qJEqfwvv!D4Di8sG#OtBHKVAIL+C|KebSfVN8)LF4KGr!A zejj)h=)Z)E&!p8yLj2#gO?DTmJTz9mUmx*+HPsqJz`!}hFzYHoi?lgDlANA4ugt=HF(cu$9%~7s!7^Y@-B8#`ce0kE-`= zSoS+_E{?zRJG&=tF;-GSr_{}l$&gBti7Do~Vrn{O@QEhG!ZLqBC3*R{TU-$&6**Iz z`2U_Lxj{DFph=T3H2W(w?ESZ7deAsCTfhZ#6Mn>hLrXKemOhy|9Zvt# z*bLxcd6*WFdRb=z7I(4Pf5MLk=Y{M2iICV%NGXU=noVAnfgp2%ZB5fCv`4hJy>3b6 zy3hbW7ELXCU6T-)(*FLP|FI7ZD)SJO03P>+r-b ztkmjpdY%^7H5dllc6wf(mY_&*&sd&~{qQ(2RIwJ4KpEYQZQaY)^KjOsp zPK`XbYVPHRD(&s&p>fAq{%Iw*kddc;#N=3xy~*NX-!Z(%sp?(%G>~-rV5{uiGMF@z zUug58za;JcJJDP+PXLDFyurkt$I+0m^Tkdh{zT4dKRkG+5~^B4fkL4aR8(XQ4AR|V=XNCa+pp1zdGJ=gKLlg>zUbx@ ze?N>$w&yxs=<#=#FXBQzx78I~+9qVzmTUbZLhxP+o^s&YVMSJur8j^B^R9gmle)UT z5ku_$bK4j4bE=}#*nK`oHS4~4cQ{qk#cu0C#=@l>MSM*Szj7)s?vG3t5}wv={=XD! z*$o^lW48gYc+4qeq-S6d{`T#yXESv$Y!9PUqhKUoHsZP`BYKR+bM{f`yDa`(wbvm| z`0y&woD45Yj|j34Z9ilNnp3!Hg-Rgd4w`qlB z?)hhKgH=pJj_(y6cD^p#_sY{1v_$d{2Ybj|@-x8W{ej!>%z7f}`aXXiZ%ZhhD^yGn z6#4eSOSrP__fwT<3OM|-xWOi?tuI6D=AC>*r{tUh3pLPmi##fQ{BnabdF44Kaf|26 z2maD&0*^^rTsH&Uc4n6HLYO*k2+#TL&i_ga{rvX&Ji-e7P*o^qu;_LL|28Rmzo}MWBYL_3wH~AdUF?Xncc1payzL6gvKQ}^t zDGE!)wr%HjI>&^h%ywRiTRbw!lUKe;zfQe`y#z2?Z>KAEb+)qct(HSBk~VK`_orlv zklmE6dxx6jAHkZMnrT&}`W@W3s3+sa<^YLEpS~$f_uCWni0UOc$SLc?>bMLW%BS3K znDcOthxq7R6+RrGD-m>s{#AvngG89makk3p7n$Bi{g_k+vBHS{Cx2ddf(dxFrOTr) zy)ceUzrD5#65os2g*vpNTyR_AHjSxwp13EU^#CRJ<*U^`@||ei;Fqg>8V*QxX8-O8 z8oNJR!=ig)Ho|dabic_x`-g`s&o6`*ybEMCuJ%JDp~UXvca61-c#O4L+z9W%K&KN7 z5EDvsy0ujOR-kj!(aP&v!qoS^-tK}Td%E-F-R{4%Dq`bimDsA%^V^`9es4^Zz}WhN zPecIY9(w2FCBH$#v#^JEK2RPO1`S?|4XgfZ)E>9r)ZKGISW5GZ<8Zm=aY^)L7y%R$diHA=n?^AhchS_@+@@-PIS-UoZA<)-x5A9cBi@PgLIy6)4L-I53x3tdcQRC}}svwWDGA3nN#+zb@Ut zQssGMqou2B=ks|D_awPl%C5Du8f*PNCg9TFRe{8@lQ~PrmG(~(*1-|oG7`_vv?;;tHe zH*y>$a6{!$eBE9{lCHVCH5JMIOg--^+S!3yag@v@VFMLehD!r?Rp?a0Tph#AUe)xx z4()He9TTpY`*l+){I=S9-}{6L!^Wqb_nt-(rnRFJtR{^TrN&mR}V?3SB^e}?Dv01 z*hh!=4Nmh^aB>!JDdlkvE?F2WQ*(*mV&DAzpwfI{0`cq`K1tW!t5eZRN_w~Dlfm4v z%};6<^Y@H44b>k=7s)4h)b%BrAGT;-c(n1{`awD=TU2Q*JJbAK4Q&wg1ggYh5rF8t zPg?mc{M3zUWWeK9gtyUrC0(#!zpUG%KkhKZ?F^;cd|s#0mo66)&$uc^^0`S}9YY=( zP}!2xIIMFx0pR9f%Vjm3q+IB$px6LbtVV`^jspNfX z>2EdG4=WyNiGa%D87uET(pZ`Bd4b-D=~r=2aNIg=E9-njh()dwsuE4q3i&ZRTsUGn^Z1My0!a!;HHL!^q28 zt5{`%ZP#2|W8{>7{~GHq^rUdnmSz_kFrxItCl!VhP~jHjKKo|szk^@4Sb8>_l#i~j zbAt+emJ(pTrmbnn5M-wVqwBD+mXMM?N075oaJI#70aZh(M;{6Q?s+m=1krre571n<8Ia1a$TCdns?GKgYc|V z6Ho9m-gY-4qT!j~c}Dbc^hc_~nO;{HtsIHwiE=Wyg$poXR1y!vtuncKF|W&?$!Y0+ zmyt*$s_V&ULiy^wt_$+6+io6pVU7HQ?g0ZL} zn`qUFiT4S@3-kH1%IQM5!}P?iOGJJJ<1B-dlu$_8YlPa;nP><4vmECTEGQSP_fU5u zf2=})cXKzo>11YDeKx`zH2G#EE2r_c&Xo^Vw8JjLn-n(apMMj z<9h*Vu<;?y@s>|Z!(rL!g;ay%LgfeXro169lF-Z9vp5d>)rCXNKb2QJPh3b8WdhGn z!Mp^al65_OQ4&wns?gj=hc}7`v1p|S-VBFh%duJ8Ug8vc{4~0rb@kfFfHA&t|I5NH zgE$)BcVTK0=T<6X&tDD5^OR(`HFW+sYP8(_c<0kw?Xt`J?ri;&m7d*)zxV)u+tVvN ztdATRoU|;5b4~8O^UQ7t{P1okiM#b+{lsV5#3U@jfO0XLr()zTw|)Y}dEbTF#A9D) z*zQadzA2?{p5=20lVeiQ?whdmE~f|{Tu-Y5HQ$@B8E4zxHL_g0PV86Sv$e<0k^lY+ zQb?#iIkr#f9jGld0Zc=s6#g-=*%V1Yi?pZRI2Blf3-^G~IB#QdZMd}-#w(lI6?QVYHE6v?))PCbbsw?U&Cw&}l=3U_ABqq936NjVVwp%W&B zCe5z(w25EDrp1Suh`(G4AmV8cqA@8If3osNqb475J26p8!DYb-$Z(+HT2gEb=F!9y zzc5`^eTfHrgjLr!yf???O=-vLER=)ReSddTAL84|-Vk|fS-rRL=p#`syn2oN=RR{E zA4~FU3XIkos_pDxGrj7ff6)~3)uHoYhI`)NW`~tngxtSp0ZK|vdp1>`Z*B84??{CH zxVznzzRZ7_XRmqr#z#OYI}64!R$i{tsVy!CvM}8+!fiFLiV`|8zx|nV1vK z@lsf}v3&7I!*r>nVZ&RmlkHEW3xE9@O}vO&8+OM`%zdZyAG3;xG_Mx~cGGI)73wwg zTfSZNACy*93zty}@I6w;C?oCTLXthZ`xMI_cpI6GCZs~_#|Qd;tCS^Ibj-f{7-di2 z@Z@W+d1tWx;cr?u>GPk(#vad&SqX2y-Cy_Hr5$Zi%u<_86v;YUH{&DxTs9&qfVY!C z!RLG_u2=t(s<@4pN}SlSaYlWseVWRv`nLjA@ZE>Kt1B6~583g$9e%9ldqz0Trq0$C zZ8|ouQQM!%ODO4Jv?50-hvlmcN%>5Du8}A9BxeVV={>K0F*k*xyhVG2;^(9xmXZI`f{9=I5a|rht z*Nep-)#j#V7aoJc-`U>uhQ`tL2kcI^d#pw---Ke_H^40(F{<;@1YSjxmXn`iR4c3c z@t`S126W@<`JYjc+S~7z z`y?Ot-?`t2_ibwgB=?Oxnth2fXA#%>uZSnoYe}oMq~Z5!P6>v$-PxHu7I8CuPQJ|? z9zRFCwGD64R98EPrZJLo_{&j%lLjM%qqUk@Kbd+OUPQx5U*1)e(uv0x4S%cdpx0iJ zN9-a19~I-E;|x1sSbjo~JalDZq7`jkLNX3rdw(=MUKz9Hf2}!A;3wAaAR^w1e|Uv& zGE+y7QZ4yXw3!4hTPdt!)@fb$zB5MXa>OP~bnfI)|8f9JNMw6t_m()ed*U!EV3Sx2{ zc<5Ksa?|vkXyi52cZJU%_{vqPW<@&jhi$cL z{`bM++fvVs_$$T!D%qni#~$9P@A}2}uN!n99cH3{<+oQV;qyF=i@7~3*e%OV6q}N$ zE^vwgH?y1;>&8_(Ki8Vb{h$#2`qU~e;iJ6-=q4uT_APbbaSQBA#jtOr##yxtw?kw@ z+UIwva*a_;5S2F4!Wg~F+Lg;GQi%poL-W%$h^|KTDoN`BX(%(%uA1l zqJ3HIwf$r7RkW_@D=Kh3*<hu@7z5o18 zrWd^Rhi1EwXw4D9Fq3P;$;-3MOokn{I7*oH&0Yf${kvv$Vk{VJcZ$O5c4j>@-mqGN zd;}+&wPVPN7<%hO*Uapr{|s+Ti^T76{*1NXw0zR!a*{MDD?uuv2YZYc8mmtE@;di} zg+6zC4m}@bN0C>+SE`pYic;@6BfcA6a-L`TDH9Db^$qlFL<9siR5 zas<&xssF~PbV$vt;TyNO1f#Km>!)!w$*5>X(J8>do7ZFRriK!Q-`q|6_?OozDpBo( z`pGC|eNp?hklAZ$-rhs*{J0JBIyEQg1N|ZX5l(@y&ikXgBJ4w^umJ$kMBKHXvE|71 z2LDF_=1dX}&&ICTNmpAHeU(XKvQ;CyFxt@e6?yx4EqHvb>-Vpp2TR-EXoU|{?}=ZD zPbOp=MHOOF)c#cCTIf`hfPsnCpjdD}$K0vjEz#Nhv+e6ha9Op;dU?BejL^GzkGJ9K zuP}upXGQyWC44sq&Yn-5@=it@a^0UX7<3UyFujN)?IMRFqIV0Y)dVX6vO~U6T zx3tEQdSn^Lb8Y41CCm5Zhqe3kQ zS!-VA?-7H&P}sD^vu(J+zZ76EMSsPIo~{@jSsY|m87d$6$!QPYZ)kH6Du20i=-8T+J9Ns*m6E{}3>no!mKWQdhIO?lzm3e%J zOD@`R)Ux>#{&R!P@lHF)pI`Tv?!Khnpa)>Ou<^dx8y*7^Qo{ z27?6v56S90x>LEPZ;A_U2fw{<@;f8@bR{%SC;QwKBY{X!c4Aitc7OP;T`N`Sjvz^# zqF+YRlo;)3guL^Z6vGPjbHzVqsX}WN$}1^M2-*VtqD^yS(yq~P$ zeM3ewA5RG0Fp2Y_MfMCyJ{rVS8%W{r#3bTtMqIyrQP^XC{Jm3O)Rp1()8u2OWA;h* zCQU+0yNT$%9Cwpr3p!<`&LlI3L)!bi;=|_q#Vz}VGIpNF?k&Ug*Cy?o&E7PN(@QTY zD|=T`=r&e2vw1~=J){nn8+^*`-zxe=cpttJNnQ~t>WlViEKpC_eGjNUzZfutS{~T1 zkhuhwj_ zVpMu`7i7JE6Y9h+WQCh!KI!s%=Po8XDq5`pP_kk9=a91w!<&)Mg_w z^Vnj#*y@;6K`v+wOGx+qWW7d^F8%M$-iOj5^dpClNw+z&XAHvU^M685g%l_kcI*{F z;)y@Qgc$|Le1p#?;q(@Vo6_vZrB<}wJ0+b-!mOJ!$KbwIvxjC@2+>XQmudxBYpvn4 z;D9#U%z-=f5nq!JIn6MvSmV3t7U-+j!E_avKC^`gROp;qXhEqBu58ftC;a_D-F|YD zlSIUq+C8eVa&6c`y{plF4DE$$FcUzts`O^F@Qp30B1}ihmON@xnQiP|#=h0Y_ z#UNh5PI285g-FmzjbwzZ%<2%P@A7K*fBJM?!^+}O^X1{t6;&~B<|W}NOcB;KX9Cj7 z4kbe3=LF7ygY%|7-LR~%0@eabZ51!OwSV9wU}Hs{av_ZCHV5_P8iV|OIx+4~>y(ZI5k)JZQE4i`7g0^_E!&@&1 zabtE?0=Gx%T)HSFFce3UbnvCW`1x=+IF-?DBd+J?|IH=rBLtCt-n}6?f|-cst?Q(H zeW~)|FKR{mq5o61vp_7SM!T6PtEFhtIUgR{r;3P(2LulN$JdNL1rg!6=l%OeRo&8Cr zqtx`3!e@8L>NPkCm<+3-RJu>=Sh6LRY*_yZfiEzLe-mhjhX^z$6Mc_Ggx5}La9N^? z_7EdEaN?ez!f5_FfPg|eu^=c8P>O=nl?pdPf`E$KHL~iVoGca+sn10mQ2XK4So&E6 z6hm2^Gs)RWfzKkc2!V;#9{ zhyRJ&txCnJ6sstUg))%-vtN0|>}x z%^YE%Kql|v!UI&002XuN)YMC6R#wI*a{g0MmGGDa5=YA2WtAiq`6F(-V9>;-c)gm7 zlnFSfZ(l^=(IozmF8+^mrrIpr2MB*Y*}D|`4bSa*7F1Ugo&6c<2H@f26|$qwHFt%y zXJ_^FAx)?(0410hECzV$kUHt-fai^#Y(b6z0@Dka)8xZih3&i0)RYvR{aY2;6JL6^ zqQyfcFRwaQ2!Q?p4lI(L%@J-_Q{*Ha9zFpHZXrs>3#|@3%gfJz>>r zQ3*1LB@^0mZ|gQvmft+?8$B*;>y^R(z6sY_QLn42t6QP=792W!u)HHm2WkcDOK-<| zBTcAae|TzeuxA8tQHeN+$Hm))9xf__r;X_pVN(Q+&$|E{696?niGFf)+9*oX>LQD4 zhkAcI;1dK`AU2@Yu{+wdzn{XRX#ICGiN}p#1yXI4Lx&wrLWyw9SSOwjIDL-m0DuxZ z|7ld|mzE~g2fidmWTbCxh7rxK?Nl#{H70;Gmk9_ek^m!{RcDjOuqJmdIQr3MZu@2+JKS(`^IQnWH!3wdtFf zeXA)n#SvM6*L(b)%OI4>wS~~JzEajJ(97N^=4&rk$TF4pMr~Wk+UF0Za=_ZCt9tcA zKKbNT77~zo2~2JMg^uVZ8IYG{+F+4a#_)@1quKy)KDm$sSkKuIt;n$6fy)<+b+B4b z_pj;dS7f_Uox>|8$lfhPTXgW*$E=E^VnXl_BN(yG(BNRLs)c5@P-jmGYu7U$a88DS zQOJLJtLPQBrUqc^^HnuwAm-}2ln5*kUuhV^IYjOU#P9L53Nc(V_s88TYFb_C6fb_C zHZq#={joOysk*C@d+kCFl{5?3Jl>@{7B)$jviS~szY~l=d`T{*e48N=Sx~@e?A}Y# zxHd!OHm&*Epx)~H?=?08I|YgZ>O*zGW(P(YXsWYi;-feS{<{6 zeIA-z0DErpZqKo@Pbhf(*yp$Pp`U`}`pISwTa|q$;}TFFTL{g@op@h|S?rhr!BtD0XU9-xJ0 z5`()Z683wWokd^G^quN5)Z4SBPtSu+eGjuC|MIA?AfQQQ=}-T}ils$K-f8WGJ-6z! z$9ZLVcxz87dqV5;s%93*FPU%}TOS|p^y@t+v}Eo)Jw+=}CIx{RqnP zBrS%ecC+YT{StRFY{qK!zwAn8kRSi7PUegizyk3gDoqNkeD5m!YqN64llqSX38?P^ zHf0R<(o9#0#l0FJy7th#_nvPM^*a8#v(zfU&o6+~*4fE1LOtn0S(zjgc!#1z;TG%t z?qH$r+t_|#lb?Vo-B#a-MkUho2!sl!UsCg+NtieTOEx3h=X)-8_RhWOZ&d+TE{8`R zr=?c%3k$4TPK#QtZihxWjmZ`q*&j8y4Qrv>qq%kSe~8|v=Tosj02HU^MGEoJI7=a$ zg#$G!l`g2yv4Ha7y<;A3$j}AMgji8;N=WB{HO1bmn`{zfz+6Ss9J1$tu#$)ai-z~6 z?-xo!=tZ1YW|e;^4c6(H&?NxofcZ26CUlxCkV!2MkFP>V%w=Ey6b;0%(TT}!F|7_2 z8P2~RvCt_X?z$AV(OoT{jPvrKdqK+U6rroV0vY;{rY6k@@vt1kDv>^Q71|wYtZmKG zYWp5y+4Wq$gWNz^NjLoqd1ai(3pP3lQ{seY4?{}k+orz{WS{?fc3-N303OAK(sgCH z@jUbmYA?CsbLr{A8D#+14jPQH2h7X>%b=8r%J+41T5%tC(P%wWd$Csr)+s;B{fzmj z;SoiDnqL4>dl}D`ca@8b_Bkb?qZ=T4nasw=HLw%vh&Z%W#HcyN&vxp!u~Jgmoq3yY zQJQa}>Ab0qwxb-l(5Xn+D|9)IcjXaYyqI_yx~{G}l{&`Aq^34y5*k=iz~)W)$KW_2 z2oG0GXnkAmrNB$JB=P*I)L}KoWI2w(Nsljqh}JqnuWXI>=)Lu^|mI2Xi6EuEL5$gSOpD^}%dO7Xgu)Y?KubCa~? zeTI?Q@TOvl$|x@rszYy0!D??&xat^4dxdO|l+Vt;D)60PIRc`3!ou0t9CO>1S;fIl z)RunOmH$W5Le7B0%)_GP1>az7<*K{^X|W<`f)#KDGMkm%@M#;Q{5Gp_)U69rHS6D>k*Uyv>=|EO|G2o5)wM%_wD+%&_q^ITu-%qH=bITFHw&a{Ipe-^IqK~E9WTY7 z$LC9FPwv47a=&{GI)1+hSy?{R-Iyz5L+cGaRFkbTFRU5>_>+K-+`b9Ik0hp7@~h!(@G5`a_Q3e1UNPfqCQBFCC?JgZ>cJCHoSUgQvx^?**t|hf}~jheccjO z`VJeyj;3TvUd5HA^W;m?g(S433Iyx_(~awAb);@}+>Uf)a+Vq6yw44_?34zGiU02b zzTc9Wcj}rS)DaG)QbYj4b{1S%cP=v;%TjojG{D)+z;fb7UAaYSd=%!K4gK%-_%ImP zoIMvmK$Pvlq!vY$yu;@6lIy9qRO=wT5H0{{7|4Ag)rE-gC%ZsElx+hdEma`$x)El^FF&P-Ul2yu+M;}wDJ&)O(6r}Y5W8eFO#n}or*Ss65`YcV~ zsQfF4Pa`2622jH;&ecm5*UKy$B=$bz3>CJy*O1VUf7+jMJ^2X*UHHL`mhMZ3+ zcsge#%9>QWD=;sbG|Drg)Te&{J^>i$b8LSoxNX~j6zI5=CTJ&Y2 zp211u{U)pE{&nD{9cxyxsV(ooRajr*q_Cb6i!!7u=GIHwlU5Z@)V%2RSW!=@X~xX$n-?{z7(Id=>>mI$)IX+cmPdfOcXP~;^h;~1(5uRoDrM#hM(Tg18 zgr8$M_?G=EMCUs%;ld*|wMRkv4P?z%AM#&+U|sO({fx);=!c(O?C;ip6M;2sX!_ow{? zGYS^g352J-YbDI)`rlVg_h0kn6O6A{KP>8ij2c{efoT_#6?6Vg5Fd=|Yk|!NFtNCd z8^5zQ$=S{TpL&&6yBu%#vRF)l{J%N$Op4$80l3#0~qYAL(a^AIVk(JU0r-XFX) z(GOa-PIXevLecd2m7JRucz#!aovt@NZjN*Ba@U+_dsTl~hdJ716VcdW zhF3u~NtyK(tA1_IRgoo@QC{lFd-Jx{%1vzyjojz1Zs8bD#1Y7U^}n^&PU`-*|5ZC< zwp=YsOFo`>*E*QMAEb=v#Z*5;yS_f^>g*=jS!@+EeBj`2LL79@m?+nl_yYAC?K3A1 zaQ>T8sY9lm#lz0~qxwSm_f!qJvwB9H5sOu*Q?M~jAJ@*<%8Fh^G7pb3k~^%Yu`2!F zSdW*MoUa!@G`pR~IJ;Xm*a}^ko_1?dvzN=Y(~eBE&=>x>YeKa-OYF{W8Q7fvOM~NZ zX?AmFDjJ*gyGiy&^hXVC?wU7Oh>>gSD`N?3*i@j<4*$SHHXtGdNiXm2+En+&l zqq7qCcKYgHXQ#fBw{i5127t3wFTZAQ=t6P_)8le{dvG1qJO5hfhk8FD)LP{T6BkX< zYJo&8x8=rv1l~uyiXXiF>KHlsKi2qf1l2mGB#cISGB0>s|F$spF%*vUl;98-RxokR zz`?o*HE%u@PKQeCYsd8P!CI__uK$=0y2ETks+wAWuT^7R4k{C;a{k! zcWM1#*+MC`mZotv{|i`hn%-Hfsi z!#4p_?~=e4MV3qz0Qcl~rkXT{Kp1*|_NdSoq2~Dp0FH z-_tqf;W4RIAjGv)|M7u$`6@#Z0ygv}NPd^{3e`suRvC?Ls(Ac>MtBh$%Eg1ZPSWz5 z#2p#6=Nnn?Gao1zOh7o;rebs{hvTWa$aQq5k$HZeT(6qLy3IUx@>WCj&#>Pgk+jX6 zZ9m)MWs*x0vp2+0L;J(hnTsAd=U2$s<)Z3aO2W&<^fdz*fD1+>kz2iYq7 z@4@A z4qs-4x6x4;`937qr(wJ&du6Yy9Hu!Gl$0150q?lj^I`(TxIr!qA0^i3uHMkc4*K=I zQy?MdZ$dQ4nDw7MCjC}!D()QC0$G#nH&)QTuW_PjCef_VEPHH2&Z%i?)1FIdJLXQQ zC)aqCi6-YUrP{q2%ey8wa#6dCkh9Khh2NnoS*mP9OjT!?qy|O4YJ@=L=~-nYDU=Ec z0e%&8K|ulP7Znu-?byk<^;otDWW^|}B;ZeOAM0HP$kFFx_ct@!-)`@9nA?=X(L0^0 zVy*SNQX6;p?lfq#GhWyW#@PI2l5QxqUwR`)+rf>k{lO< z`gCz12Hw+^cH`fJxC})!q1L{9mk$}-9fdY&z5xYX<)i_(#%=oh;lk)eVWe*g=cUe# zbz33GY#0Kg-TIkH7!?Vfh(sMsylOx5Yjd=ga%eIGCh^}KI8b-p_}hG>q@fX?8L6>G zJE)p+1M%3as=4Gxh<;0t9DI(j{~|C4)P!rN~{JQMT6q4o_pEFxXk;A#b>fm2GXTelxg)Tm~lv zU$1S@9j`1NJ<;i-6B0<0<<@8^_H;(~+-FSD!FCywFfnxSGcWX-h-i%HZ$8qJF=bAB4|cug8KP!WtVzk=ZBX80{_^v$=-g z1)piXCrQ!4Y!U00WpH#by^6v82G)W2`=m{DcT8Nt-wJxthQg`@Fpu+VH0!)klHe$G z49ktn4G51=zOw@jnB)T^+csm95PsKTt0je&;P@w}P%AX-F>rxdQjmU&Zxs?){AZlp zli9$=Ub+=Jm?lve_~T8Pb1;hyYux@OGrBe#Mwa}-TJh^Vqla#`V6$Ij@QgHeM(3Z46NraR3VPy3Lg6XmCDJNRNC;#h5)mcn?E_;PzGKAx*7+$;6fIT z`YDYD;JQ{=KR|jN8`!Y*gIS4Di;ah~>wOId{xOP_G*`Kpd2Ez2Oe{PFCu_L=Vz`IK zf(VxUCvQTPuXJ5lRkTOkZTa7@RiFlqZuv;*KogIE%&1csCJX?`YF;GFhpjvC+9M=U zV$sDzG|kaU^O4F?)qf@U*!=-UvhBX($)NSAIhro`nwIH^CXsWGe7r>#(~voWoEIctI7O#an%3Hj;5p1bJM1=E)Q;S8%|M4L1#+FA^z_QS^0>FWajxrd3QBN#;uf z?!MNOOyt6r`kymk^IofE-I-WcrCiEhf0yeTjDHC2&mxSDT&4x4dcPUJ`4IOiptg|- zs-rEWR{`0NcgKZ{ekrQr$AwVt69`9+KDg^PdN=rFE_>Yk;gcHe}gmTZ++d>w)i{z1JQ5vw^7kovdBjclz^Jh{I?m0s%;Ve zY}J)ui$!B#cFT(hJOyWz4X-E(+atfaZuH2@yX#wuqIhdZ@2s2+=MYb)rBfbfYE^vs zzTz1Uepoo^#l`u3PGxJ1j+OG-?qh)Al+1R5*xbKumo;bIm7$c@DcibdXLchPyJF@8 zNE7etX%;Le1{LjRs))Ib3m~Ga}sH~{3u)K&A zmPM9>(%_Y`2N_#MWKn~Jn>sXm_4YTdo$!LKl@o+BE`%1G0`@iu2PO24EX619yYJ9UF}M)K%JWmC`ZW5Sq+zlLZ!to1SM)|ZmQmRLWxaauwr zd>*SV9=^fbkz(%|N5#`vB$*@{j%tHb)S)S~C|hLGeny+^TaXk)!MXRBR+5+Ro9@AVjAQSy!k6TV>6;{GtEO9R!3%o|Yp-1_t{30+KGLw!NrrEPL$|^nhMYOV?3@`zQvO3->uf!l} zW|{HxVa*3L__(}(_>|reMyt>WS|r<&$%~F{G3S9iVK@^&i*DCy%SutLdlT! zYYaRJh#bvijxGhzg+$Jv@-)tPMwOPV&ZnSQ43g2AA--8K{OK!KkGyIv|59Q72jmFk z-V$kQ3RqyN#E<7eMZjcWdwu1v_1MpCSU*dW;r$?Ks1vO$6{kFUtP>!SF5q};wn%4J zGrBOVl5+LF#vYFjP^Kp((2%vT#bi!GA!K85|ISS#i{V56i`N7Mg?KC{p>nDp9+mZXmz{R;f^f_kvprAEb zzc<0GJGJ`A0_7A?M~vu4D)UBWO$4$^3}*kprhn!F>-gUsOl=pzFA^s)bQ2*5-*9V2YQAs z7t>6f2n3>C*@SpT#-?P}8i8*zP*6SL@&m~7X=y`7Fhsf)O0Q^tu))`7*x z7g!E2e26)hD?H94_@d$XtEZ%ueKqK={F+>|N&^YvdSIRtgtsec8upP;^ z!9P)fV&UUAMEQb1pz}4^{N#~3nIj@MIg5`C;v)S*7wd!v;dfDpaF3TWb|xL&!PG=6 z;LvoR=K7v@KQG?#@G4?4sNu&_n*Q&u3$LI&OU}YMvb13A6EG<$HvXWI`ik7%tFH?} zdECI=b$+M$NOx{KO7}OqZww-1Zy^W}0|ZGfNS`kn+BcwWhh*Ii?<#r_{wIva8-ucm zAH3|wtOmy3bfry7@>63}>_;Namb!1fH)a2ZO2~rve$~Ud+$my%R$2~U;(~$HbaV)d zwQ^&_dr&2X&#KhZK&2*9W&_y1#vugqn187~*cKXGdCetwc(gul%ErXU*P>uY_;?~i zz}Z>#A|}H#KSX}ezV~+C;{P~ciV!b8(j;4>6{mIbMdgO+Dzq3D$Tknlf5d$v(Uz3lWg>RtwXmd*cf{;kRk;F+f^vJWn zo|;>fZ5Jy(`q>e8C!i2qaWvb>M)tNaS*zWVZK9Ud>AsE2U2i`u^Uw-SA2|n@C?b6BiNlLXkf`0ve_wkCPv=v}BNiK}m$IuooeRg%E| z0UV~T_rV;4^bVV}6d@BW?bCOM8rS=v zQlWc$H6h0&{;yhFRQaw?c`Yqb6BXf`A5&Lq8lN*4J3rc#1?`|BgGxSZECdCE@7=BElzM4Yf1V%ip+tk-a|2{e_TyhZ zGHW+K#|ka}Mf&~@!B8OLLdMEPg`7j)YER+R{y3dKAc0bxzone9%O!(bQqD9?Zq6~Z z!{%|mcf>mG^;tPr3V%1`0;z1iY+Y{lv6`(g5q)e{>@--aM2xX*XApCPNS(Ff)yLmEy+(7 zLF&xJi=BIOb8~&%jeoLR@`+d6ibhAvJt<|4Kp2oLpD!?Fq~!TN@O+ zgw@eYG5;z-MzhVOPCq3;nk>NQZ|{{^P!dB}q&d(*WoPnp9QpMrvwlhkqZCJlb(~}M ziBq~ZC*r(dJlzWWg5arNN_Ym~#}rFvK0iMX;U|r`7w{_w56rgo)J>oKxPkw~W$u}o zp$YtEx_kINle<=qgHpsLzTSC}k)2&N@RA6w0?pq#uo=aYVp~)AllOA_Y>tyQ9V18v zZbM0tdIiml=@<(Rk)l6)|cmV9kW42s6FRI^r&co=h12|!p9A->|-vn{x;#>a_Gq$GC zhXugcutqYLs&6K-6xSWj*EiG0TEqFV! zcekdaNwY)h;dw)cm`*9=b6zHpJ>7ICOZ#NVkY>n$9f>@yun}c40mxy(e~IXy7itn~ zI6A7^zM@SGG6@7!)K3=6C%ZnM3g$CLc+xI5HvD|=i4cKvH4L{i32y2b?ko#0;QRxh za*nAJ?Wp^Qc-y(Whl+j?w!ZGK`_f8Uqu5por_{A}p+Sy0ed({w{PBytR9k6E^FqdJ zq?S7dz7tuW=^eTYh!kXy8YnK>d@=FYOc!Gly1Bo=Mga5nXVr=1+kkK!Zoe#s`Y+Cn z8js%I(Oe0u(R;BSp`s7nIukx7=notal1iJUC5?lT?x-UU0!o5dqub@sws&`y0JDct zHjZBL?;R{{lWX-=f>E&|+SCy1xLuy4jY<@)ji`!2UMpM0#ZGN7@-H?}NJxdr_SokP zQv!Wtc495BTEq*_H2AACw|8-JM(FkIdLKAdaRq={SGtm{-pnM*I7+l%}bBhI>7+h z6@rMwqv%T+f*;<8}c9-WHfAw3< z5rPB9W;B0q!pRV;X8U7Av#y+V#UeG9v3Kqao*4wqsd zeU^`=4&TQ>;=Z@aK;KsQib(el4JnM^pI#yI>BP#~6oL|d8vv#x^AJOkM=kD)+tLSP zx)+Pgzs5k#oN1QdpLFd^Ns^%>Z*p|3**Vx)I)6s5Y87M}vpu%wWk^vXf?HKC^QP?e z_x9H-Uk4@N>jlCA?}k@RJsz5t`M0{^<xAnlJ_Q&VrrDEfSX=k(7 zj;hK6^chIH6RUqGhaBN@&-fmLlQ2ehQkn_U*lY}QSTiS^s`TSEU6k9be-b&Zw$W6! zoM8{^)wCWyN_*0t;r&5u5`Bc(Z~xSb!Q7l8_DR4unM(5##gTWVjs?6M78|bhcxr|% zXiYqssCJ>qEWR(#MR2yWL7(1XgrlN};Cdd4^EkhN(p;uAP4#);nWBLm$RliQO+&$_ zAuvnML#2C-Atie-Wwc95ekRcOfxu=*rhnbnf<0(Rcs-5SPlXp!7v+Vi#agEZg{Hr1qBP)Q&WG6qaTmpse}Gd4w4t%fQSxNa@c|-H!NV?8`=TcD$e|$#MZ_ zEw#KaHj9!`!l4oRVGoI11M)8RsGv}gqG)uG>bRxT`IC%kco#zAdu8x+rJ2@{nrs`7IK1b|4X{QR0CNP z2|G)EEsqIJspXS9dd;OB_Vt$odOnI72sW|NLJR9h;{En+LlE|%2_v%N-!gV&#UD%6 zj~u<+c4+z`#3dmbn%U!&@~Eo7GE5 z0n^6k#aQfQk@I+H`j!)y<5w*-XoChZ=mOm+fc=2ha4i}6^W|O0Q3v*pY)BX5?|HF~ zdkX*WGwse(U<9U0{&B+G*Ex`t>hsumrQtj&WeqwSf%*D-Go(4I_0{hBzfoVh=)S1*f9AF_0T;q^*;+LaO`$!~aoX@9j`N7>EuHOfZpioJ@7Rv1v#^lT zK|R~ilrZJ*e{;OZ1uWuQ=julm`8>_%M_)Tj)bue zmpwVD_E^zkM>_s;37o1gyyv0C#9FtB`R+fr&X>GPxuOW_@wjKiTAp<;> zKV#WRmD2wPE9n(MgQr_VLw>My2HHzRqv-gL#xV%Yy4rG<0_Rk%G}|BckJZe87wLi# zlKHm6UMYEeoh(bG+5l9CLlS5$=?hu{P0JE*9n#Hu^; z84z66?(Ej>!&7z5cf9HowN+I+0n8o9NH3+$q3%`k%m_&PoDIn-j`6NZKJPJr6XA3a znDhIfla3fMx9v=CVfuba{Kcjn=kZ2jGCV4B&wi!UPfXu!Q%Xk!n5Ika#Y0+>IyR-q zXzF>Or#17(pTaciGOP=PpLSYv8-TN(y2p5_66}Tsv$wT&Lv(&MPPMFg0Xy*hv@klo1#b*dkA!#h!W$OLHy3F5g# z0yo{3M9-BZ5E_BDjCtgD;ZiRPxkTIspgI^Pg?JQSJLR51_Kd-&v5+Iqw`S>3IcU-O zUyUFOep?xlMLb;+KNxfJmwgW%wFVM9sC!PjaSA>Fy`~G0sVBdHVb?edSiAQqqvxAy zL?fj&5u*1*Q4s9(bm?wma}PY9EK@&3!LCb_gy2gaBRv7YD9Ui&V4%Q9zW(Fk-`!#> zr?e=l=OQzDx`TJ_WSX2sCV*(7Z73ynub2c3O@G0i7{}ok-1zdbtXpTUn13vae@Y>y z)*54a4HGtH-VN6sLGJia1rpZ*poDh1k?xA&KyXGnq1s}Ril=&l(o22%iZUvAQwp-y zp`CZ}cxd-LDLCsK88T%81WLnxURV$Rc#hX)oCAgkYTX`UF3|;1)Slfc$f0amf01Gu zbjTop8Hg#ze6Oaxa8x7E@i!_3fdMQ?93n)18u%5D1O^)X(W3iN(kz~6fpc?GhfSRP z*@he;ku|h%2dO7QOoWQ9c_6k7grnxQE}Q>H_e&H#(7JY4ztsh)sX;#$=!&Qs9&|mP z_q6cOV~A8B*186m3ZutgwE#7M_RpWARRQwW*8mP?cfWIT8E#^8{k4EV`&AyfvY+54 zT0xflq+?N8&Rdu5riXq zrEIiNXS7GBK50P-i7{WLYY5JOqM((aH)Fg;4JN~QPIkqKmJZjotS*?d4pB@+gC}<& zg`+PPV=70G6Oe8$g*t*4*tzOh28EM&WR1V8iu{Uq1-dMwMqYJlua5Nr$Lu=?N!Wmz z-{gY!x$DiBAd{g40KN1$vL6=y?9-c5<2_XkVBt=P?_$}yz^lg4CRy*;Wh7_kdAqCf zl`7I(H3btN3mT_jIM(y~CEnmJh?Ad3ABxi{gf}9uVa|@Lr+8Uj{1W0iTxHci-WuS8 z`{Th?zuvknlG|%UP$-iieVo1F7Upu3&$Yi`BKbNSx%aK%{(}}Sr0Gb`1y1+0;AJMy zlD*3i)QDOaf)Ji`W-7{Py%=N_HxI?Rw-I_pX0?bp)G}i}wB`n9=o{547ckG~K;y#y z;{rgql+2;@T?00oC>YL!#OBYSt>OMVGv!nj?GOG{Z8+Szs^)S@r=F-BhUsu*#kkfk z;U7gv0Wjm#IGnqzr`I|T-Z(bjmXq{jfd<8J_YjjL$C%6W;EqRO^uCTlIyCWFpToMp z{N;M>_A_c{xkiLlBNGnv6Q>sy)jv>IN^*dutbogRyWj8of{?`9tm!Gn2*pi>Ap`-7@1AqBGOHDE1e{@KYB#dHG&d1fz&f#tN8Q z4jU!5J<*iTK?Efh--}hG_Yf%2M0g7oZ|eO3aV?i=H9E7cXH(-sgmfysE0^nR$dvGC zVoLJ-u^X1Xsk*wm2}wz9F-T6o3>cG?%VMLb9VR}jSVjS0SYN1hTZGHgm-XQpQbnA_|}t;3-bKUXFm21ndJq&DfuDM37ACRM)?u;0lo*TZFFIGxP7rCoKK9a zah@ZO5+9079l2ONL!cm(k!LOeU|&SA^^J|*#6Hhcm%i!u>AdF*Xj5>@5Hy;7${vuT z3|+(eU{eT$`?YX4r;Z+5R97RG4jp!BV;jK6$mCD(P~K4LpXn;X0d(bLx^(c%wk7kgcsU1 z=aGxJPy?qC#%*AFvYa2gM}1N_xRPQJUVyeckM6?`0|Fx|7;D&bM5DTUg|apP@%Gx+ z({qj2V>~OjnXC$;Uzf`@lBzH87C`J+DU|tJkqEoYK~8lBy15u4PIY(Q>N;Z8WM3f0 zKmJWkB_dByT1y=q8R^}8%^J3p7Wf^ch89~BH*r>)r~lnt_A@Q`M>gZPe(dWskQ!7h z%T-pE-TYMR+AGOC|A4fdo`@LUaiPGIhBdBFEO3z6p<-%{;bYM1^b_6 zj@YKZe~%5l0esb-m<46`9xQ5QEDwB%jR`!E?{;Uj8u#rnmch>`*7HU3a8H2b@Vsv$ zjO3UN%{RMB=E8f+IRP(T$;pjtrpzEr+-naLnqmshiYquT@HGEijv_>1GMps-&2Rs$J)o2Gx$a3GthSpuU9+5NZ}Ot-Hl>R}a3K$T9E}NElJU0Y zvlKP@FUw2A)W(zKU%X+L>+V8&`R>{DJRbwuL_P~2a0t9oJ(!+lLSdRH3lbR45yAiY z^XKJH)J?_wF*UF1veyY{2r(#wETl!A%?}nE7pJ4I52+t$`!~AizW=Ym-$giKWAX`p1$=Q0l#KJJi8Baql;W4k< ziNd*7JA4;vf0SXZh^g}EBtAywxy?=Kfw~pzHd!>FHjpLZQ-K7&l`X+NvmaS310YNh z9As?n)n=Dv@u#l2bJcb@!=0mc*=H&j&S>vP%p!Sb0vX=FEf%4S@a6C@a$u?0Ta@Z5 z|CI)^anrpFb30t9)33J1(knOVW$=>nDkiR1g91m2mKangs+)bd5Y4rQ6}eaGj8yiF zU#A{{KmyF8qZm5i^R6S2^MlFjJ-+9=jLi)PeVVgN;qx_iOhEr;>(Aea+tcF+o+GZ$ z-G2AIk`IYRib#dX+~3Lr5rKW_mO3+{<^FWY8=6n&WoVKrTLTAb#2KdP_xFJ*cH^x+ zJ{ozw0{*r4N?)88C+mwXddivH#-y(1w$F(Xkdo1#$9UVHro3I<{`tRxf?@|Gex#qV zNda%!|8P3?kQJ(0{sCJVE~m~vZ~?2WW)3Sxj%b0L7pK(t4aCX)N}vnAcMn$xHykR3n+{>difPpi#$`4BohamBn8@^q%Er$ZqewqvyK&Ag)gLuxwwJEDV-faSF+Cf z;p@#zMf}i|7YP}kvR3ru(%^Ch00M~04&KW*28V*hp8{Zf>1(9fCC_Irv_S%fb&gL2 zt*UWcy0*_q7gtroR&%#!dR#`exL)h~=0GzOOC0w>Nj4}0B&B2tSN+?N$erGio8x&I zd2j+;O@Y}eh?V7QT37sU%?kg&VciNi4 z*u#VmChqeh^=Vf@h_!>ZRD{qcGmpVL26(>6RRoJo?8nw^~;FrFsM7IAf16*hM9 zS4@^G2`9eTt1?u%F7=K&iztI~vm;(XDgIwE{@M^Z{if#6#`(`*na_RDXDSRh5%wdu zLOV0fM%?V>2@Vvnr8)dTkt9mpfgDEdP|{Gc)9U1gh(TRn71K&%p^1b)e&wYy-it2F zH)@qxzf-8xza(>Z=o+V=szx7UK_UI&T7c`duD&vB-=K!4R^o+<&xxkz7q}j>;_fso z05-LP4~he#d8@t`0t)y9o*zZMK|mBL|AE$I@ZVjEYSL5PIktMS!O3SQ<2fls@BYxL zX;7Ar;yc&f-IUo)(_xa?z{?3c`^Eh7)*!E3HT)E|sAnj#RMYRx8DS`@cjD3c5}kher$y$*m!ra~kH&(%{VbYz)t3)18-UtB{Hm z&q!lVH%Svxg(k$S=Xj4Jip89Q3-jx57(Uyp?}-;0~q?!OL27{plS@fet; z{geiX<-|CY@n{Jj^Db_=n5R^~KfdGI$i!S6mvyUp)6E*7!p0>z9JCB10g71wV}T7? z@a4M-y!SYz`%sLpx;q0ZXU@>dcz(M{#%gu>w&swQx+yBW{Pl{jVy$9m!g-fyld>~D z4|=*GO#d0X!kvd9HFAvP)|ndgL`XFMvTW6f*w6gPkiba(6^9fg5y)U;C^a^{*KpY= z_cVkR)3EJHU`5;E^cyo0t|X=y{#yP@Q2_xRq&3CEq2UY$B_c#`DPRt}&R@d8Tex&T5IMsV zCtjiqe(jI*tf#-*>X_^MN;AZm9aIdg;Ur$VWz|mH*_#=q?NuZ3-4`e=9sxkUSe$C`wQ&6;AN*BVKejyuY~YNc zghn0ul?x+cP(3<%Yx)O7kW&SVIbEIck-J+7RgB+^nN6Y}PhnF2g#jM+RvqN*l_}IW||84SH3$^Ujb;G&=RUpVr z>iO<~7=X6dUc&SH=voz(_x#^a(c@9D{B?Qw zAnClE*$NWKzrnXU8F+TS5aYnEjz8M-TOvm7Cd-zKPaa6N z?RHxy1}ParKMKi@jIf#62uLTj=c0n0IpQ#8mms=(E4zBo z|INg-lE%vja${|r&kZ}t+BN(6^%+#%A|zNEIM%d-R=jN6yKO~%ju8v*(x?AH5Zv9} zt!65@qc-V-IR;ifeLuI(Cb5$Z2>$JZo8Zsd$aPFZNy+ga76A)h`S&Z8?&bzPAn+9b zOW+OQTj@aRFr@?CaFO@~1VYYhsu3QJuy2k2p9&|eYU*qgAvgnR($v8uOkG=}*&s*- zGRp1kdnozaSlK6z4FXlrX^eM@FnE{lVXs9UkR!vw!b&|(todGihuMe~E0yI=y{K97 zXvjz9w)hbbN}Bd1a9aVb*}8ue(1g-bK?rBT-Otz*ath z-)5Y_QOI@COYC>u4I`nCW35YsrP|kA1d0V?j7z;6sHQmWH=czRbRH$(0VibPPQ4)4 zDSvJLg1@YwU6}uE7yT2FJi%e0@foG=AC?md;Y}mqb2z$)yZCSlOUtC-yu0z#mf%1~BkL`l z=+!{zZ%>;;HBe_*sMk0d^&>Ko_ekifx(L2X2)ZT;r-5aqkNX ztF)3JN_VeXbW5R4St!W?g|SG>{MW$aElI?N%7bJpGMLfx_SEs`#`s?Pk_DeJbw%6w1PD!rfI#BXXPa+ijO0)< zC=8GDSWJfNQ_XYE?(#dGvfa^!27{;-D%!f+iGqZKY$Y;ZMIPT>n>~MI^>lBx?Da6C zQG**9M=nR{4UUu4+zRURcia&&dk6 zTeeMF&r>|EzADX1C>H=1Gxw`>z=T$7Y^?^JlZpBfE^m_!;EkV_y(#i&`RI4rxT;MW z6+UYQJmeb37~CdTxbLhmh3)fiuH%t%(ay;pe#9K;7-}UCZCt&aO~tm*IrjX zAwQs#zW)30R=4FfB~l*WH~2UQ0HYw`*VD`Z!N<$KBhDhVsExB`v zK$|W0b7qn->5r!J2U(}7R(Kjy{#j#Ay{N3QsFxM`5C)KWf^p=l!ef`@OCFJgHE58; znBRw#G-0b>%QCzRq2QD}LdU2CU?_qHsjd|qf9_G5uEgOYgloKOpb7_JnX>0ooVqQp zFl4YNJU{`->Z|xytdX;SmxFr!9o50;^Ok@+$BVBYm&O>wXg5GIZTpGVwILp-K>!8d zprW3D7Z>`JLHsRM2**2BT&;~1_#cfe2N^ewoPSbh5TD-=<@wBPVy8A8%OsWLXx7(T zs*YNp-ey^sz?R=58(2LD?fX#L53bIw!J~E5fLQ)0{85=z;ylO)Fhpto?>gnC4~eJL^X!W_c|D+7Z`GyGMrw+&6HGfIbPr>4oTTIZb1aYP z$HQ~pKmN1~JVLxnc>TNEwcs`~_;YNq@VOA$?U{Fz1TUHw`!Rour;6HPml;LWnxSbm zM#7KB;mz9kP)iold@NejgphC22rKTH2+@yccMI<)x*X=lM>Tvfy|8Jq8TAJ3^rrlxq&J#THa-R>~=T{$sP@QfVQf9$@3ume;*#BPKyP_Z_sM3bTNxKL*T?>S1L801QPhbF~X;{)e?(V!_5& zM@;UAJHm&nzZZg;NF3<-S&>e#)Sh|6mAF&ZTcGQRFlAEFi?q~;k~*Z=zg^nGYj0ke zvzKn=)lzHo=)EqSWr@rN*#ExyZJoqb8)pS{K^N7)WTTNJwDLS#h9yy&Z7`e2t?DIQ zG*x8v#6Q>kv5>nmoeIrCTe|k)zmm-X;=yR#`%9|}ncp+~_}Zn#7T&@QxQ99}$oqDSSOgD$+m`Pe@b&K!>85*cP&S+m zfecgy4lwqrvcFgu?JIQ_Gp~c7FSPLB9)@zdE`*q2_CZ$3nS^l3U&5lvlm{qif{*jh z8YOW9Bn~{m^~iRXl+Xqi5VZ&k!=C=_K*vu0im8D8rsJ9e!n;G2*1ky6`0^}$i%8wV zu-blDQDX?(NVeAhjz{}d4Kr?NXs8?zo4Jitk2JseV(yNEjUC#&{>NG6<+henvr?5I z8;F?h81hyoPVo$KExRrZMhgCp*9D(zyo80aN+y8NAGa{2mlU!~&J;4OHk z;Ro|b7-5y+^$7USf~NO>3mO7~e@JLx5@07GiiovI`!Fg-xR`eTWm}ZF1*PHP=6kYy z3jA@Cr*Pd!5q*?{MoKCAExgN4fa=D($P(9E;&s=A?E{YqA+w)9u^Fu(i*5SYL+LW% z0@s(=c`_12n$m|@jNa#F0YO2m?Cc%hJTg33JRbg_4X;)F|KCa%gaZBu)Q-X>VX3jX zFU}%G>F&rE4Q5@-&q!OGEI&eVFGH+X`vRS6o@y~3Z<0NsvD|hFf_AQWaEEn=NdFEI z;h*Q%3FPVyCOMgj<=oo7W8E67p+cHyGykAl-&Q~$c5s_1Z9f?`T;anEBkq;}FH(_D zUSUh4F`higduG0WQ_OextPaEQAopMVq~u4AfxbcL8!D3Z!UUr*Vy$oZKUD}C8b^ys z{Yy&aNSJ1xGEb34csevupX^R{Kh=~8JUDPvR8+)8vP6dkz>@U}KjrA-!1f}mc=*i` z1=_6lTJX<{p>?^s?=FTyBGf|vb4X08T{SABEG!{zFPWxlsQrTV@pZe=jUPGX_saIcQx0)>FH60aAWaearZfbf-RRzt+PZS^i~r=9i#|R%#Bc+ z7ZBG8^ZCt3cE(JCyPo*&32w{I%U8$hge`k15oqUU43$j75yVO~)8o3-Of$Ns^Pk_l zy`L!5tF$5mVepQE;~dhQt=@2e8`(vR1y6wYE*+b)&~5R@UrR2c`D=qWkzT$Il*dHT zuI9|d)OuwcvxI%m3U<(>!$gmA-5SH~tnV|;JZF|>rk9yL=?K81=n%H}9H$;5Zw$jf z+ZqgCd5`FY3!A$uQ{4wnWAMt(C;!2#J>z#XP13~oqVY*U&CH5f>tB~5)DR3kGT6(? z8|1*#wJ-7NQW@lpk&kyv0SYqsQvwEUQoYCa8ydwNjMajVj&(--7^^+dU(P# zBYbgkN?{<0lROL+4WJyUgdXD=nwGB=x96S@lU2w#O~j7E@U7`ATm1_<&kf_rg|dT5 zuDBgP>^ns?yk)#6ZGzhexFZpK@m z*6vo<3j(Fgj_&T+#{am*Iva)Ojn`U7L-1RB2fS!qN_rC}dfmP~DL;t9YGEd?TVrXH z(Z&C(=akbDa`s>d7n#Y{V~T2)>$|x=lWjPiv6*UcuTVg2&)3%^8Mt&axQ@Fa9I~LLZHUt z_IEp_y9wY*fH4l`0>x2Qk6`oyxupyg{$J*~+A^+rcZ|`0r}NXFB=NCa80Ce~u5{49 zIL?GO9a?v2|Q-UBl-D`q%mxxW@axoBiP8X9GB2pLg<{Zy-TU(*#zZYrQ+>}lk>pPe@my#GOk zp!KZxvW$DZnws?ZaTuK|$xjhGO-bX1HKpm1W`7g@4Q1m5?@5iUZH=jOFZ~tU$iQ{{ zTS(|NeR%^D{vm+7q(Fs^Gi!BE;jk7PUZgRKgK#9kJ4_G36i z>?-bCvEcVdUSDJ}wuqF1)qlr12znU#oU+rU(} z+OfQ-Zjj78S;(QA7T7#`exfQidQlQchu2D70sRO^iy&A8X(b)u6GbNe_Kggi^d*tjt2j?$ae zi~Wh!!N~%d@9%`u$V6C3Hag%eK>-H*Z#?ZvpTem#(sWH}=hS(+=;Oi>!s?SuK{; zpE6HVf8j0iDc|c)NPyk?74fa|Eh~N(uw+dl*F7%v$Z|NP(!vz$`(GBIrY{BGiUB!Z z2gjlX#cKEdII9wIM2s{8*XOq;UKbxxAvs--)?4J-A_gR!I6K((Gl#-i3^|H~ZKetT zQ-2m-Iu3&Tg~x}|9`OWzbBq69{~2P2C(mMb~|Ow^v=N;T#2!V`j3jJc%6qg&G&~I&#(LUg)Bx$ zBj`l%UwnT@rY6xJZ>rSj&!rGHOiW;}hmCJVgd8_H`eAFi)lG(0jbVY)in!=V2!#Gv zC1WHreu;=Bt#F+*HcQ9)Xz9RT5uB7We?K+h?Y&?~XXJjHL0ad7i!)5UL?>l8jUIpP zX(z#E(wEgt^2)ws;gWf12P1YXyt6ME-gI6id*PSe^U;ZReR(jkibYq+-5)85 zjM)|Cy;`0~I8sk9#9`utKQ(7FYB$Iz7$~oW6}+nyN|XkX4F~+>p=HL%cg!hTySHuT z>60rUL|TyZhbk>6WVK~kV}=a~&^~l_`&i+&=Jlz$(a6mv?rGdD(3ZBTZvVv2Rn!xi zs^fOCKq%cTppbA~5H~HlGWfCz&@Mr}wn447T}Nl1%w{Uz=vA7Nd6k@C=MLmrzY=-adi0%Fr?3JopGu+@zI4RB2ee?|9D8BklKxAI|H~iAVE* zS)JL%t8gF2qvgTJgMXO+N8T!|99Vw8#(uUg=Op}6b^B)lpW=9#S~t&IB#+v4@m>@F zv$V|&(!EE9>lL???NUq)?i$`NJc_A!pHRnX;&Ua^6~z!PvREQ#T|eIc?eCTzBje2& z4*X{CC#lztqWBv!>Ob$Xp+vrJ_HA#)W8LL##Wd=;-;w9{6nA|rgqKryPO4zlM8m+M z7xQ9gj>1D@D6xP~GobArOt-+W)flJ=e;jUFiO#d;S%9?@?Y7@0pCC;knBad9I~s%ULv>N zh-nsE^|@>rLW-ebP0xPjoq%v$xd~ilEiL=Y;Q`YfUZc;(S6!Lw?qg$PhdZ7nZMGsN zE?<0p547D$u4BDfE2F|Yf4z&vRlIC|ozs%Z5G?3?uKEE;OPl+$&h$Rrex!9zr^6WL zLq~f(tqVf!+pYk)ySONUvRQo>;(x+qC20Dh`SkRoN$y!dn^a{xr=9uFf~Q;`4tnpX z+NXS&e&OAJukA&1I%>K)=kb)j%@+V5Giw>sW(;H6 zwz3a;3hvb69PyekbA(go-B6B&C$f=3fITlXPz+qXUb_GVf^|kl2^f~ZpYXg}_S*M9 zly%vjHy?>#e7%oUsP>EyY0Dj%yIDRjhGd*FdH;RenxV8gT)xA!a$EQ?8`<5_5#ku_ z(eLy)X&t~7mS7M6Q0LlT6A9_;Y!WprM$^hTQ=1>018}6Kq&L_)G@25Ig*)16Hi|-X0RStgqUdP9a=ECNICY&ouj`_cN{kJ9jCH9rhcq3_12dGdaPx2gm{SXNyYpaAjK+5E8I<5xo2 zj01+@RwXppTQ&gbb+!`-G%OtiCm*A?%<4%>pkYAz{%;V=%-uf&G+(6r3Cf|A+{_S5 zV8Xe+kPlKO^Ll@kEfLF3YyJ4}=fCo3<6$eAXPv-+uhel}KB6z8B=C;XkTE-AboL0J z5dMr%XJ)|@oDbJs>JmQXH}c-<1<0?jYkUTS89x4gWMX-hk?Hw2X?Hu$hY!d!BfJ3X zmH9nkHoBXu>(ea5_~^Zqw+l)BV0*{h!+Cs` z?YOPSt`SdABSV_MFLzIsf|1Un*u8M$R(HXLS<6!=XL@bf{ZEw`w$U$uQCz!fujV+5 z_I&5CRXt$UqZ7A4*FIm(i`+Z?LABAYOjv=bsk9e&kXK#vd0(i;xC^zSD^YhpjhC6i z5)Wyyz~rvQsgWAOS@7gw;MZ$YU!~3BW0OCVUe(0I>K{$(PCJ*&IfrR7m|aksvMLgNno4wnv#Ui zwKUN74b220;#!|5|7U!Wy}{|Qsq;bQIjLX9>gm$73{oyI0`0!1+cKG<5RYD2mMdCh zDt+LORYYemfm1(2&8;v7t4@}50t=nT^>y%m_e+w88>Oj5s{n@?rvaD8Rmz5oe}(Jv zh@X&zUIF#4Uz@L9{+;a)~z2%^Z z?{{E;PYuZ7eB`!~`+7vME;A!PYyVYZVuJZ$L#Nxm?7kT|OxNywE$oog#Ns$g=q+=e z=YqlvZWMQI(11@77tMX{E6+l?9)SGVXB64j_Y78@DVcf#3^o#c8czfUeB8YwW#Hub z?84kEV4`$F+B@|jk=$q_l0bPGfa!^7^~A?zWJD{4Q!N8XvE7SgF?cuFIGU>1kXcBG z%meq1mHLjs11>SK=WEITj@kv>T$k%>%lAIgJp53bRHx8;gT;=;{qD!2vpmXUUkE4R z@%Nt5z955?S4CLlePrA`d_2?>TAcY4>~{j0QAbam%ijh(4_ZP5`S7H4DvZTgx+e>; z{?P*G(bzfx%0RaSM6UWoF;7j947}>py@Rp>YX20mtt6B($Vv?g3)h}Vxc;VZI$t5M zo&Qex`t1;F37kYOQ||kD=bmV$ut99WctA)DZor+u>}Q3#Tl4i|aq;n;S@8)NYP+c* zzn4xS@m58%w@llc_)tfPlmn{=8Rg87F!LF-C2Tv!jHA!f-RU|!Nz#c2lul%(cJ6R@ zVKJ_%L{nQPRP)HNJX=Q>y{MQlR=KgcT(zA5m9~9zbnlPA-lr@(I>o1p$VL5gQYEnL z3()riF}oNsrSxM5k96jsKC+P!k#|4jPOMJOSMH!~?x5vliVe2Dzxc5#7rizb*Z(vA zwIUS171v!IS7*z?!?^A&>NsG#)l(iHz^o57&hgXWEfR3aZMf)IHomGr*pz*TEftp> zE`QP^1glvfGbS`hn@(FVjgB_`^s&AL zOQEDtGC$aQ_JD-e&-dlsz5T6b%e0m!2F$N5ooacdzA5F8whVd}N9HL&>Q)1#r zgSZ3-cESjYf_R^zfk=myM1w+g@dcsk8?57BD{+M1xqtP6#)oyhCIJ}? zj=MWwq2QGKOz7VJFup2jEXE41dL=QJ#p0Y&3xgPxySHgJ#adNM9mecaEqw34=i?t?IQh+Lm9v2)CsD)6)AEtGLR? zbU(DtXfVU}qs*EelIdXBG)QKkAV8Zhl}km=Riy%oTTXjgJXhxQ76@K zT?pI7VJ5Ph$&3EM>mgXWgkQqcl%8jZ%C_9$$E4!!j`h1`P&%EZc@ke2e&6&o5i9zX zwQ}fZ2+TnDFHpkU8ZV$2TFa1gLX`DKE)(cM3Q!Q72GMm9dTBSLt%3$ho(qD%cl5~f znIQVW%?$g4nlH6+4gW}D>YCx+(c}b(O{+TAok!1U#kWaiD@V4avHk8CJX`ox;?=h2 z;twT*kXd;vy_G)fpa4>dX$(knb8{^8h_V3|yw4In?`ZhV5AaV7`7Lb2P=fS3etr#B zSc@}u_*PJ)mA+-4Lgou$pY!EAw_*u~XLfcjhDhiw9G#iNx+^#GD0yx9&3VSoqSW;Cy7K z2YCTMxV&cy{{3qFF8C?(ojjxjJVdR;BV0) z!V$Iav2M3SPz@Xwpa+FXeq5j!l3gBc!#@v#>hd1^(M7#Fc-M?yd*!icMP1VtzKf1I zcjmV2Q;Ie88nb0Q%DUx4;yItlt19B=HAz!)^FOU^*7JQ#saNO5k?!?RKY~Gu%Io5o zER!CvrhRLA2I$CY*5~&5oj=M!;I|3ZQ)h}9A8Cl9;zl(8M$9H&SYsL*)_rL+$>H}~lFrOWsz12w)wx6PD z4<=D@b}moKRY1ujS!KA6QwL-+_j)86Ru@-;4NEk!qbx9F9U$abesg;JdGLa-{#~i?jA$a)VCE=}TYHv||5C4D?QZ>d)f&I6I9WUaZo+Kg8+4LLH zWB}Gg9ke*+%1^$zA4n$tE{6 zu!;X+|C%BKrMzh+Sf52*8czX&&K$@bU_g7xwuSiU@VTkl)l=WbU|Un?11o(RE|wwLswG`dcdF>` zmM5e^mx2SvFY*4474j|;-j06dGjh_c9>agz6&pWH=Y#Q2ZPI}vJY%0HU{uF zM4YKG!>a0AHNqh1F)hN3zG8ZVKa-xqb)(2V`^ksl&%9__k}%saa_xlPipQqlXb=?t znFOPF{NPe!=?g!CzBAbqgFh9EvJSs!Kq=Ok{3P4CN{@KYDtB_4*hhECd?8nGhzk9P zZT2$#Xbfl+=0HDV!g9G3>ome{X;VI#;RT9C+L7ifNYM?YYQ!C!)AC{m0&+pKTe=&~^qthNwCtu%9x5r$J2CG;f487)tznUsxNYxb@VHyZ#rgwlr zE`fYIPeCKQb^QAgETY0fyRofL6C}+Tk4}7TE{)TBO9&^${m6(nt?GTIB^Pzk<2qDb zEHs&d8qpd}^RMjFE@2~;cRIZW*FGPAyDf#@7lZabYFTRfHh3}WIXmsGi*UfVNULyH zvr^Uw7Ol>iOf2xQ!Jgf<15uQQdCU(!0I93NJHLL-oGT<)o3R&50`epyLC`xM~`&w%CEpbP2*+ZrZ-BQlDwCr|xUo=H8Oj z#W%qGG|kp{kKGUdi31YBdj>PoJkoZf4&O8G?wDamrB%ACc`x7}Z@=mnFeAwemTJ|s z2L%jV40|MlInUs^D!E>F@8+|=SSI1$6fK8Vm9%{G5*1_trT>km80J~lH%%Yz+&lv) ztk31bYeS8vcfoHwl``D=A}5n!cTX&WGG7FnFR^@DytTDjkl5}~>mA-DJkUwfnfDjl zdGQkxjE?gEfns{oKl$S&yOdAQ^NLX4U_B2_sJhX0`wEpmZH7< zIzCN!zr1XvD$HGH=WtwwQM9PV5}#h9#F?VF<(;d`^dVSQ~f2Ip06`#(gEtg6WjSupEOV9+xzZ1E9U=;uBlvf|Z4@V&7 zQ%*EVqOLy%6`xNQDraPVm-E_7^m;XIeL;oPbB`NH@>-@6_6^?JKSrO=DRTL(uLBj0U zogdEQ>{NU!#&%nIC|ropt>!;gXx6aY;^Nb(*eEx9_zj~tq2W;58*lxwmOb8J-!ce8 zQr?CkbGhmm7@sZ;=%=WxpS`fm%pf%$?|XT1c^RpZQRS`%Pk8%G>TXh{>Y?ki+N-8~ z08a^=^3?RQ;ivYMyX#o#JH}>%h7lk26#wP)&TnaI7ZsfLspX4MASgO)#XtXgJ11r; z=I%vvJFZj?X2(^R@EudoY?aOaiTq&XJ2-1+s;zDPClTymSXk$7*>&zk7#QG`j#Gq6 zfr)$f;qZ78C%WrE3GKh879R3~2io5z9!WPP&B-u({t;_V4^&y+BHv5)*!MMO?JyxB(6@PbPT>dt_O!1-Qh)Rw^)>|d|?Q5JF9;y?oo{!2&sd^`IWQ^loHqx zq0xlOS4pPqlXwdC%352~tWMd2LhF3&}qW|Jcqqc>VDM9?F8VL|V+V@U5tJ&?c-i6m4~*TE&u*<@}pMPz>` zQw_sYtQohOb9~17`R69(^4uK%=fWY2djzW^@7^CJ9`6)MJeX$IZLzr>XHPtu$^>{~ zoF+nYWz#yuq$;$mM41bWg*DRpRgg%Gi}&_~{;eq4(=<7MNiwTxVY23Z34UXTWO|bD zpJ8vO-D`Qc3E3`%5nu8e$YKPdVk;y*wOA00ROj+6~&6Tb(P<>g^Bxtv+G9TAIXX>y-LPez-RUZhGsM-{*Mf`xu(H;J)1L~XX& z%GZK%Tw4x_%IIx3NtUomrvW0!BIc@xnTPKW1Pp0jPd0&NyHWDtIKm#Ecj*-vsB?Vq z=bIV$NWIs8hrg8m+8oPIp$SZ9h$m&F3)u72WVvcBr}s+$H?`(3}Q7qHB~0| zUi75H{LYzeERS_xbJP50xx&g&mWJY+LqtaNHSYHIc9PJ`AfK?pWnBTlq61a;Z{zX? z?ny1|&0vw(o@Br!o^Z^b64phqfsVDxVVfen;xXl`TDq*XZ8+Z6f+aym>fU=9X^D~R zO9Y<3^`Y9~QbxZl^vLp^rVcCJ?2#A`B~Y1tRh=;m^4;&@1Wu!7TT|ut_^5DICERzU zK~;5!om~-)*v39UJtc7nY0xH_9|n$q>Q)$4u}SlFc_Jlj1|9HfE#^}|n|Ru{V_6GIp$(MvnQ zm%=Q&whwVCBU;AI3f#Q&Rt1#2;OkPl_EV*DEh_*P-HUuY>+mNrhe?27wWI4?Bc%=? zwPIjG9R}@u(9Fv zJ+6b=&c3C4J|3!AqqZK|$@xnx?VajF{wA8sv;E<}aAP_-EH2m#i>B_) zHRi8{xE74NNypn89PQ`T088cpsviDneNT>3p;8Zy1g}=v#Glin4DVDUtV-=D(qDdg zTlW5pds*g>xAO=7a>_V0&Nc@C)!ylZ*<_f`5?0K>_ z^H1G3<1C~5Wj`@1rzm+13D0HXV_A1Cb*|szc@GWPKiNqbk^zYkkuX|WEDnFqkLyXP zk}1(Lmzw6te!+KzhSa-0*u)Iy*o(z~@0{*0uD`bStf`wMZlXP*JC)N8@7?-IS^K>Z zLbOBMF(V3rKu%TG7mw)}jz;VGm+C8^7q=X;$yMiswYo3U59foP`b#ouYF~|Fy9e*L zZq>-!yN9x$JZ2>~Z~rxH(!<*o`;wZJnj!2}B+$l==zO)zpQ$)KWVbWhze$x~y5ICJ z$Ke9ky}42U+sU5fLX^Z?W97F)$;CglVx8z|9&C79FwTcbzK@HE`+?iq>T5MOReiw7 z0IGta+Ii~9tc;kLn4Q@Hl!%+Vd;iM<@N~y$7tVKly!=1G(P8d``ERz;|4tt&DhGto ziXWkArC$$IhkdkYm-qiQ{B&ivjv&ySN;B=eeEruOPLd~boQO9b+>a9PWd$w_rS~g8 z+E7-czjUYz((=3KkoYUPsXERkyrUYLr%f@GE*XB_<3@J0{Uev)v6>oo&Yb6dBQ8EZ zIjB2iLmozSexTMx+<@g|tC^$@+gN8QcwXYXyZ$mZi8S>0bJ0>m=N((f>6h2x|0oPT zJYkfejx@hvIQm*?ZJlzcpprQnppd+YjXt(D(Is&=y02l8{W=_>URz}=8bh5jP=jMC zOy_hyVrKi#o^8SV%5Ki_ipXsxl#7&t!apX4)CuR#omn%by(ea5w>X(KSXjSKgs7E5 zDR~aYn*Pu$wHp$L5w2aKj%Op@1{^mGTuM?L!WO zc$CdI!nTlWOBR;jb=?%fzZ<|UwX4+9x08-69P~1O$*(J)xRYI^N7ryKC+4h<}uBlu5inS2e$#0 zMwV7cZS@!af`B&sgc9c^AV?$3PUSVDw1XhK5jpH9Y3>+!{c7dbecYhNJ`&)b0fB*d z0QbZX^h!vF-8>639Ksj>0%puxNhfaImQ3g-fx6z|pGSNKJ~&tPqSe86^u;#jf6(GM zFqPdrWK&-zoGy_!X33k&vZCeKX>Oj=5$zqgC&~2sb%8sfon)E5 zR!Fh734>k{2{(2EJf}?S!VePca-vdFcf1TP&5mQlXJyobdJ4bZU7|o4D$n^*@f+Mq z5CWfr=UG`CN_n2|R`|ZSH&|Phmi+{tE(JKk#_~{Q=;hea;Y{1rxug46gJib));{a# z_#?jb2&0qz(x<~Ky@LXNwtZA|^r-Wvy%nsiDr0ZQ6`*%R2hK0hNZoylwJa?L)3y-t zN}G2c1^2h>#e84vx-56u*mra@`9uJr-4pUhqhm52UxT$^XTMb@hE9OB&$oTdiIz32 z$9%bZ3~sxnFaiqKKrTmjAt_V;1F61iA$>DkF8VB=(FnkvUTs(WYzskq5pc z#-ESKqnKo)ZmZ6;w6u7_SmRiq%ESp4o~bSiN7qE)S64`a5C1c>%SIJV4-I~Rf6!Xq zetsOCjf+PlZ{r^3#H|Cog!Xzxq_7S(_uYIxHpDwKkYM{YEZ^-+aKG;H-=1*a`*p*plm1Ldc^ z8={XABO`s3eCEmX@I`Fc961wvS73n=EHwRiN5_QY`?pyaMg9l&qi`zT>xUuZtJ7Aa za2%>|Z2f78t%W&~PbVQcsYz~2|4s)T+`J}sZ*lLe?Cg)|9-Zj5ESfLwNx|kT8n1o= z+iL9G39YLB(dA>`)r3Hdp%H`t_wk$cIknlh(kDwd6~}%+a3~6m zGmLYVX6moWXjx#Z)2rKMkBeScIDNv+U&SmwLLx-wZS|QZMEN~*3J!z3D zGU77R4UQukj%BR~o*3JQh9s;Zbp*jPdpFoN!j2E?j)zL5qW# zqHhPhfvvMw1KAy2pr?LuDJkKgy04bcuiT^4I-=GQtLgg0=H34MRS}Wf?#~**r8o%C z+4`$L{JsOP-t||Pz|AH0P1F8jOo>V~ePlh?TqLhU?GLgV*BO~U3RvT~-hQCGoRfiT zDRVqI8l6)KN^X0KZB=_Aj|Z!#|vjfs|F4T(4?>OOn>h1o22uH=}1?cU(5L zk#pbF^jIivf3I{*&+^ah?+Ga*&38M#;&xVvy$I)!*qLHM_ zUPwWF-b#DTLmj4J4~N7s+bva<=I{%%?P0aiy$1WFixr&#cS~a9)YB}#|L|v&3Qhra!Odd@ipnS>dctUOLcTMtkmDG#$(k zxZMn%m07k^8D1F)8Guy@J#=3t60FT*9tnF+ywF#qFn$<8lQELh+?+{{tbmk^babl9 z>yzDA)$ph$O-I#I$^G!?W@MJL8XFD-wM^ul^$L^1?c|oKhz)bXCH=C#ykaNMB2iI9g4K>bzaau^E(UZf zkyPNbBYJ2$E4+N*+*ShKwcgV8*5_*b`NyfRe-wB=OO{7})8V=k=(i$q<2pqS28|@8#H~m&0dpb1J-YFiDF1ZMvCL8wm`sEK#b}!j6o=2 z(a0SRm1!Ac0qrBY<>h5uJUls5Q|5nHSIfJ*1WdrFE1*L+zC|B+K8h=i z1iS_kP{>0_t^4^PC>zISH^}?q#>&R_6Q=3tCp+V1+L9)S>KK9vib?7KLRMdTnE4xOGW+U4RAkd1$w~|A~q9CV@$GvJ|RB*lYTWNc2Jd5hSqgV zfo|ZE9R{Kf@;M#naa*D4`#p^C0oj7Rg{3PQ;QHA~;Sp=+Xant%hBeOVWx;{yv>V9P zmU*{(G+Zz5T21678`k)LEKF+oyl&$-TUE0hr*^LuaP`mb7pZTDpnK|#jR&?FqFBlE zr6Kr_*Yyw8$@8fotHQwIUWi(WeLXw+VH^06j*DxTjz1%xXF82_{p1OzmdI!UN*qG_ z#qN6Nd-6tJCqIGe&8NNxWGvvk5?UtdVczT!j8{Ii{~*zd5lojq$CNhK=Fn3uSg%rS z0b^)R&%0X%^MmDJCUfBK9a2agd{5>(^F0>grt1MM#~S+@n7$)ehl~Dt5rw@CAFX(; zY2-3(X?>w=%*w{fabcM{W9D2`f5N%DIs^vK?>VWWlx|W%Wv%15m;Bu2Vqqa+4gEHk zr+ZTsuSxDdc)+r`V-xxJ*QPPa4(FLUMW@c(8xYGC6Yi zYn11=mU_hAY3o=1=5CBPdF_()TVkwib*t7GO7Wxn_+g1Kh9|K;;Yp6x-KkeY2KBe= zP}M*E@6==?+AMyo0%Rm<@mWer3z5#Oi<6tXyMvruKROLvpq^)#3U`v~+pF@ofQ7F$ zz55%ySW3wwa-mq)zebw7TQ)QjLT5Cldub|QIg_5?3&qlbDG~ECbXkQ(CDE{Pu?n5~ zu}-Eu0Rs1s>lrK~*|`S)7V*xP5m_PVkbtdEiIn`Dr)pu`@C^pcqPn+uNMve%N^UIb z$-Q?gMNxSn5mU|5EFP>cnqJG6o{KFlvJJ{&L`bk7RZ)>LJP~TzeZ!nRmz05Fh=2}( z#n_4Xb)r1f5|`$S4RFGUDB2o+A6L}mJDtU)z3*Sp@?{Z9GWX`UuVbDOjGxVer&~O? zJwLSWGOfy$2%N5LYAbZekysH&W=7jDo1MD{c-?Z+-T;>348_%zQop)~tz_^r^>c*Xh~j0Czdh;Q_GpKH{X1giO`q1T4#P_Qzs_v<+%naT zqK(G%g&0TrMsh&_PzB}*huonsIkWF)GPeWT|A)1=45;dhzD0?HfGBw=={Ry|K}4kM zNOyNj3#fE=cMH-2(jiEL(x8O2bR!+o_15{_`@iqK&+mOhVehq9%{kYaV~n{Jf9+Qs z_HjN`D-i|T4HNXk_1|+n88i;2!;42tSsDIaZmC+q#GowhGgRYHl1v{=|2F%OQP?#n72cKU@ zW~?8zf!}+6zNI%U7@*c~FL=_;i?r6CafuqTa8GG91KIMf@Ei}V1C2U5fOUJmPcs<< z5e(_L_r~n%MnS*!kWZY(2R+bb1SS~K(DDK_VvV-Qf#&7yKlmWwAvS0!6U6@OyHRcr zKojU#Y`PCJe?ls#xBW7XNI(r_YUEHJ8T@>Z;OB|2-S%+0nWo_{%Xu-Ltr!~P(gJc* z&WnH$qv3@=V21n$AOWXyd;$XhNRB2fhSyP|`ucMs+pR9>RW3x1o9%N=GG&yYr3`Q= zXpoVrdctV@6zy2Kv$E~#;jqZPU`5k5OQz?3W0f`=Qi`qZdS3uY8&i<#JBp=0wO>GG zGsK;9%}CcBXi7lAZioQuLSs#b13N8E^xZpdqyrVa{WoR>1Y6Qmkm@FYXVzU>*%kq) zp|j^_1t{6xc=Bz%U5_m%Wc(nRuR-5<#@WIkf}tJX7JVWOnq81^kHe!Q=CP_DKg8uT zcpn22AQiy0nqMz0GjwFopsV$I;$qeZL8NoefM>UfWj~Ndqn0yXXmKyGXON1K1pdAL z?R*J6($jCBAk`qzA3PGx7WTG##I19_gk)=|Kq4*6AA>>ItRs!4eS>>H9Zq;5rY4+q!(` zTyJ=m(lPx<;#f%gae%XHi2}1Q$e;NOhAKq>4oYfc0(5kAho`3+*Etv0*V#vBYFU_1 zqaT>&Q)%EVgo47)YG9oU)>+PQ5EfgY)g1KKSPX(H5h6>|)n;Ve=3yQ)N;_nwM{Dv+ zXFL8^_m3*Z-`Tr+64Ij95`ajgyjRZ*(3$Rf>xCxF*VZFOcJDImVMr352{V9 zBx@Od2V=x#@&m%i$hb5rMS}oj09Ly_QXIdqXG<$S)L20Z^q^HZXjQ`L_zhTOmh@Fi zq&dZ84L7Fmz^`cip93@E7zBnzJV%Gr{y@pr4AA$sQ_6Mg0@#G^fWDG?&F-tsOtrTvzBd?l zvlw$8+fEk$rA!$R3h#V+S zPRQqT!^dm?CkT`zk!VX{&H`na9;X_5Fayme;fth`z7=mw|JXJNHM#AdH?=EZL=-{j z=tO8mB7v6mS~P{+7l=@m=p+OZf*V?ZZ2Pb^A|@nQ)v{{!1XO=t`XZC{I&hB;j42Q3 zN`CmU593lWq^7o3V@Sr`o#{2D&P>PG^bWaL4?0F(Q1U%T7MMhhAKi(-zVP_}{;hfg zVp6xQ+)$+65{NsCKUr8X&0Jhuyc6rEhOZW)RSGG@fRAEye1qJFNMmh70Jy!+vplw$ zPjwsL!H|VRe*Tm%)2y? z=CBs4a|j+y1vTY#feg`yy+6c2r&4QnvA4TBS#PbY$e*bPm0&rhg5W?3*l-!}!CB)O zb~xC4@f~@H$SNQcRA*a;6|qY@+xXt{XBwA;kn}SamXf(Yf@k#4&Uk5ay?mWaakQbJ zWdX358r~mNy=7eLfy7V=gkVy;p#(m7tU8)FW#nsM?=E694%dJG>jm-TO}b7;v=&Az+#-7$*=BvEP93g!JJRT$4DQ^=8-$IVZ!)YM)8i}GH1wZ%Ztypy;*%+o}NrtVO*K=&WLB z8w_!YiTNqy-)yIFOEt@Xlz&@@7#UIinfZ!HN#vGCx86?YZN85l_O1vds^y25{hMf{ zk6?tTuI|S_*XAo-;c-k9oZ3|=iA+j8;5(xJ{rjNrI`6z*?|SNCd`q$vLm~JO zlR^S?(HJ?F=<9pZ9eP-6>+2>!n)c$n{k}YfwEcL1b^E(N;AsWQ-$qfss?mpL)T6go zp!6(kvlmP&f*ITfYgIk;NhR1)%8q7zuT^;`DgP*^$ zl3#55b`*>TNuz-+LX0$AACQJCqXW=qa)JuLIoN8fFuEz0jdOpoUF7C=&{zNHyZX{6 zCI8-Djb?2_@Z1sxm=ME}emi>XaT3(@KSw7gtnWP|y8}Q!f#O`@oavYn3h)?Np2hVx z-Pd4J+|ZCl>mU8BC@@;c`p!g5ipHQmQk;g+yS}sY8q$be4pudhGm8544b)h9Ohfk{ zh~zib;0p`E4Luj)Wpx7MQWk`S(=ZAtpbBJ1kp+eR>>DOnp6|{C0v3o0LS^m5&kscp zT~^M&ndZTU;AWP+X*uwvb4Zgfbmb31IyJ(Jvss7aII>izrKM%5Ij-iK-fKV)ktS*Q72DE>FIL5K!434XC)NV%LD&z2~|Bc{{G(nXXQ4vE-f#CwMhpL|D5wI6Togr>)7~}anwWMP;AwY zq(OO}zlE`Z`xRsnpZjX5h>Cq*kq1rAC{51qoY1ue!NapipJ6{$Wy-j82QjBf0_xUJ z1YCAS0mX9S#C5-MlX}kkeBP$t3DFyBgrY!!=Izy+Na}!6zi00x7rG}_V(1Dq!4{z$UB(j;q#_y{7 z`?jZ`bVoc`6)^?<~bSNmo}E6pn6x&-10kN1pxKriGm{*3{q}E>-n3{Jmj>U_8rP392~$ zNDubb*n}PM*?9i#yr`vj4_+^B2|FKee4M+vddfDF>E9vht1ndiBIVW@rB`unC1sh4 z0HmevZ`(+N5#0@69iFdk5HHtef6GS%TK(JBr`f5e`cAWhx6&gV?zT2ii1nE5`h%^* z#z6fP2s1ywxp8}e?e+*2`>$M>NPAzvN`mSH2lg!HgA00|5mFN|A1tR4&g}ALzhF5( zCs(&e!ehLWYip?rGH;?s0oO0h_J)`QGNRQe)f7U z+Wlw``HJ|Iro1cL-+|Y@*Awl%t*R<7KsZ;q0?t=EM3Z6Q*dTh0{qCV`oJS4HEZ(~5 zLQUuNyJw(WY3ww2XZ;AY&BdJR7@|VnRhgxLa9KLkhjz-Q#?jgXpyS z_xBIVosaNzBPaUeeLY32;V9(g`=-#7)#>Zf&!?R zzt6UYx}8`~JI&3lcYL}5$_0u7kvP{)CZGPFSGWp<;_B+3`K7kGmQL~fm}rWJCR%z3 zAiOkvJsO-2qJ{*HV&5K=41Z4a)vYEyCHgU1Xq_n=lWf*Gln>{q&v{=8nYFxDdtPll z#r1Drl}5!xEG{iWQWcl_RrtNoIPtGc#AxFGU;(y6xSb{msMfpBLB!&;S^IZEj<#|n zK*Tkx!&Zc^!Ak=Dhf zNB5t-g01}KaKFsA*O4suL8>_y~lC>j^_Oi7eyWLJvO46~Geb0brbym`s_*KkDds4?#@Um(-d8zsn8s zbVsY-?hx=ekdE)e?N$mSdO<`&@ zYYvIKJrMC=;l-_;_K^Dmjn zVnP|y!i!%|_S0A+y85Pzm$(Do8TNW?bMBOT{;o3V<$5I4PL76tTjkWt#aL8eVtxRb``x~v zQ{?%!^;8oGB@8^JI~TMghKh(RAqi!_Kg)5s?(3gr6Jgz)Z=$=M?X)%=ukc!FzxBIJjJKL{uAkz!m7aK$G-7%c6(j`x_ju9_-r{=BBizWw_6h%1-nsIDw$ zSB0K_Fsd%B?*;25O;=kWlhZn)d{9!qP5&#E5Cw+u?~$uH`}$1bi81qI!}Qd|kl?hikGC%goYS;GC#k$GUYy)Ht2|P8^}S-4k5$1NMy;_JRlr z8%TnF5gz1Z`+nD%-Z#K5dA;F0&RH;bV_HBd9IknU>ULSEX(KiIoQj^F5YY%qc^>wC zFutMcD10nOJ4(#XQ8(tXFd?0DpJ-csZbiM{wof@LOLciCU}P_vI*Bc-f2#!R8`va9 zDDxih$E^F(bQGIV;ZuI#C;gkMalK>|7oA$^;CD!Cl$`Mcz5a&EB)7Y3YKnBdb?y4N zQRPibG#y6wtVibFsV*9;OJ>Ifo=b5{;7DLv$Y^BqjBZ-np)FAIO=djG}BiR zT~8uPrY0dU4^QWNt&Lhq#MggY#;u`}dXsNu5N_7O8*`)es*Uh>2BBH+xpqx+oS)O& z1@EoVeHcngmIkNxy}^eADf7K5?QbFUooItMb-ssIDTGN^*aQ}ZNAHdw#(Nzy>b{I- zC31R|k`=jf^Fe>?*a31$EYRq@Z=i22!~8q8$ZYjbw04`@tJjZca`PhW|9lk_74`E7 z2iN^6q*NwHyfV2!i$ePi2-N8yE|f#vCyTq?h2!-4J|;LY#&?u_3Bkz;TEBU4_w>eJ zmF7??40o3(gn|M;5Fr7b?rv4x65hXmT6dmNx7RRVeT@+|`{WE=pX6#^sa!0gd-_m5 z##x$E>+UJ3yk4{fQ-sqj@u%?(yDPWzooJhgBDK;B?jI)e+ij4*Yo5CDi+J1mU75~f zXH3U2i@m`)%l?nh3#f(ZmAx|o_0P={_3`KA!2XIiZ#a)s=wyD% zp%gd$^o)!F{+H>b`pt>S>7Z@LmmuB7t&veXy9F2gPJ!UnkgOs^5xw!r#;?xnlN1K` zbMBiKE7T`1Y}DE7*8y+P-Sf6$^Qv{Pa`-ta74NM>*-T>i_3Nz25w+&-fy-?6xsZ$L z0jBK}Nz`LbA@Y}K;G#kic$tB)C#U!lp>n;ZX|)l*^OKui5+ZG)dAUsu%MxJNje^EPPj zy}Rz7kzOo49WTUScD&A;;}s^r*hne*&~flrhVPwxO?01bI>Bn1I`5wLwp44#((v(MSGXn0(6cH|{Cnk7ZAm zW%FD~*$8%vl*e+3zWRoDEYt+h8HP=kP8RAJQj4>qooAONWRLz*hoksPa7Tt7mPWsU zTtJr2N*#cs#iDj!BLHHCEGqG-F@;-Pd+f+5i;nN{1m{}%xzP61k}&D`Od(!UPpA82J^wL2jn1h-h)}Ro-Jf{8 zfBWNl3a7|Yv?eAdvS7Lpv6idbSvJXL36XI4)4y=dL~wi(g{&{$&qo{{(gII!)|@Pu zta+^baWb-|d?4OoV~u2aq?#=#7?NZ7<8NQYjWZke*H@Pa76$~4`z3gwd zsj`pib+S_%8*8TL_4C>{odBcjs1Boup?vk5*VRFupN%t5_45zG-L;+jTGYY%Y*8!e z9DA6Om>9OCBEt_w-@+aV!}x@uDtwu&x&U~cX!+Jd++zvHoOXLXubFKh$0>aIhCE#H zfHYs#36qoS*mkq+PPHR&v}B;CM+13lUYU652*c&o$12c=vKmr&!%V0|gctU<5BA+% zL6tp86SsSkdJ;w&{x4aEtgP?MX`tTfUn8V^=*nj@OMJo&T*ThbUM2`O`|P0pv%;O@ z;+up8@s`g9X=V9f=#cBUfub6tIb!H9LMw@I*D;&#aK;-xjKPwf1I5*ppgD_)w#us8 zky)R17?#G{m=gZ6$VEpB{2Y)#jg*re%|%e@9q;a=GbPOpyzTN(`zC~`WW1P5bg|@r zWtBqK6^fympB?BO=p>ek<9NOIE#G0W4XFr^P&H@UnGjmQN95+Ho1q*L5HA^{w+Vw2Li(Q9srjt^ zwUfpH{-Zs^R%Qw*E^miPPoMw_dNchn4fyqPF93ds)`^or(h&osU6 zr<`C#64x)Zn!E14(v$yXI(F;7vC`1pbozK``u^x8{H)ZYL@%bcdSYvns;`1)Q3y*sm>OA#Gx9fi7$ z1GStYb7A@ysz&7`yKwpm_JZ%V_h}T(ZJ>cq!;V$NjbCcJWa}-Qg}FPrwtRLWGRJVd zmJ63=_`9WueQ&hHEFB%M`d+AMd!pSN7rKQz8=oz-NU`!Ijk2@P!w;ipW z9%D`}%H8+mC(?9-JFw&&E16L@;csVOl#yZc#rW;=v{|V=>G?VD z52j<{y&I$T(nYx7so+_iWuvlEN%}Ebpr7wi3r?atnI-OQu z?aV(7^bat1ObYd?aB|a(y)D}zG4b{VSjJ`x%A4C8uD5f1FlJr#4{7=f?kKvdK8rr8 z>vRS$s)&6IJ_SUTq3OS>B3>~QKWtwtS9+ded9+5FWV}B`floyqwZmbZ-!trBdv2zE z?l>oshf6P>=Bhg87;BJzH0=2cqP>jzUSzro6v|4yMCE)(?;CwwMTjp$ z{@j&5pZ@bxcqfdz1b9axy93YkoD%z%}K=rzyDEP|BiE^r*SnT zjJ6$$6^AF9QgIi=90W|^+ncMQm~XvBVdM({_PK3v_i$p6cRf@nb_^n^y5^tY z+R})zbKm}xgfvx`#%j|xx)cL)kz3rCr+L)()lfQzCd37=w+|&N0J`y?%SBceTu$uE4ByHGqcIDb9^S@MW97N&dKTMPdy-hgPdi_Vi0-TJ z;{KeNFS$og)N1a&S2mB3&eCo1P-Ee*i;;>9;gVInTX2DV4hB^WES$D}|GcFq^u4*j zEEEx-;%qq#AcU?Ou36NOsN>k?@6RZD8eLlCuN*!3O41gbvZ5ne#_ZpJ~>hTkXPok zbFEt%7U>`_=H!G~e$?tj~-0?B|p{S}lVcXSqsqfGA-tJEeRzt+z zOBEJ2V$2*IAuRwpbqEqFps*HkZ0j)@TUCSYgixU&Jv{Ys)1&8aek!kOG9r|Y`k5GSjw|}0&{*={c39Zz(SGvhEj7k8leYg0>6P8=X6~cySmwA^)!(&|ae7uN%^|W_i^IcG>=Y?$ zQ*oj+JaUh^;@&fieDhAzgLP?k$>R)wwDCPxs?oRozoE4JiH*&v8d*7gg|6J)t5H}H zSOeR{rCisyGqRAi9RkvrjLpde7TnB8#F*fWWh;B zeFm9RP-c9`<@{S+<5y^w2iCC2nIN~)n-brHxq71a8^6Tt^x1l%o&>@oQ;LV{ewr6p z6c5k3*hTJ^*?C<|hHi-zi@a^yc{As7YHu+#-)i>qHGsAHke+t_&Q3KQ3}GLM&%iL^ z?3mW;DLI*SwkaC0TiE`WPfaNl0fz$!U@Y@OEJR)@2NWVXPG|`PP+H^tmPV_Q3V-Wa zSU>_0{a}al&nRo2C@T*fXg*jFpO6D9@I2TjJ3r*p>ssG2YJVL$$)1$cM@Nuu zFzfooDvAUzz2Jef zs*zR5`f9AmU9Y~6s%paQSs*Lx#@hhX%oTEO(=hgrdGA&Kog<_rRig+}oz!}k{hO(k zvm;x!;QjMN`}o&9(&e~PZ^K@g#rFrEPetXxwyEUx7GV1LzDdk0NOKQw}9y> z^LMyI6d6pS&;X?So+prt9c8we%Sq?-Ky37s|8e5=V^n1iRw{_4zjQDJ=vSyq`!(&>u)3@%d$5&*wEj;2aNR*IF|x*PoxZuBa`FoF3%msX~eM zva8jVm4oJ5yu41}y+K7DGF%r*;vWFY-SsAb@+QFooo-F|p~G`L8MCW{+o zYJ8LRNqss}(p^>MHMipY;3D4PdFtmCzdPN9iT2y_Z1VQW`?C|);Pz}g52Hsk(C?}V zvDqXoAzO~;Q0QMtc4iOa*deLv)YO5s9DUERI_={z!a90sC3YEdepLpeoog*mluzs8 z8#&sjD#|vtK}T(j#^Pvo%h2trScD}Y>Iyi`JBh`<2JAa+8b5buY zFV9b9P~64oo1f%nzL{+U#prJO(VL8k0Z_aHN4+&N9qicSg*i#zf*VESqHE1#BjQHl zeA(#AnHgInq!P^4R8?sO1_ok^L1wHgjDSIq_rBoiT#JUX&5xg>Q>q|fh@n<%p}|he z61B&U7{aicE-*>AEZKtfau+RD+xF@bLvQ61fjZX`fR}U(B(rjXEO9d1&X@3-3Gz5- z(zf#Z-4~!w5oS`*gV$)(qB-@D&v~0)wyd*qwH|eE9p!%lsBo5=pKbv9=XQU4UJdHr z_YF|XMmVFWDeK?Uqz3@-`z_r3v2@2TtnrkbhLZFiX6jWnlW2-M7!#A4;v*_aF{cSD zAp;I%pRZK*2_V(cSooBY=B% z#l-FJ=hOkgJUT%^%G}&sz)B0q&d&C@yl^b_+&sgTV*oe)N!$OusQ1?CyNy#9>q>c{Jy2{wfN=|?k#Y6#k z3&ukwkWY$v=qbhwQr4`WvV5+rk#!O;Q@q4WEYNU748j^6hPxY_R+DnJQYDqe#l_+9 zx}VwK0Qk)jKqFY-$kLGM?UK=@ZgW)>`ns_E94P4^Iyw$WI0u51o9Xr49##bQJL_A) zR!3y0-Ri^!GS<($E*xhYlDTZ5(DVfpNcWf&`YeDM7&GKxAdYbX!`83yWFt?k`9UG9 zAeEc~19A5xS=k-fOY2#US>kWnY;mdonYbt#5o&{>zX2J&^ZK*ho~O4bV<)3|hBz%C z=~ryj-p1}hA3*<`kdiVABvO-o#l?=cbAR+C`neLswWqAZ0=ONQL|d*$n+r*jI`Tvr zU&F-fn_|Pmt8c4{ax&fZ<)8>0Sre1oCwRv^Rx|Fd6Db;4F}P&Um!j;#pV-j>Ho$b7YvzjfoyLDjP_lgFP(w=da~PxKlxi9e3+&*OCEgQ zr2d6ie1B~U(&82y#|UKrEU|U89Bxy`i7@PEh<}m3;lBN)$Z_|AtL4*3*i{&Z*?!V#0kkSuH&}& zp~|p8S^ZkK$JCx%ToWX%iDib5RldD7z)W6o|HjOThxiXE+_0JDIZ|xRAb9}VuXaHjC__Oeesyt)KtGUzsR-41S2-*lsP%R40) zo~ZRcoJmRvqySz44P?S%Vbqy4IYa(}#Udpdubb{(tI0;4Q-|$5*2vn3QJ!38q{Mq2 z8iI3Tyg$Twd)!Io*H4wQtPKL0c&=Q)pz~ORh4<2U|05XMaitD15}>r_|0?F?)pCU~ zu=*2HQ&SVy@{)Ye*D%J_$di<6*0oDR%K(Eskvp0}98keHFaHRiOEUGUD)aqDV%j0eW5_F-~l4q4}Vb#=AjSmlIuu{RVU z7a@Nt&4@6hXIb<0(EzqwvK1!3EL|We7ao&IR^-wG^Z0=!8~yqT=Tp>S2HJP@oVQaoK_?dLJsscC zoi+nqKNfz!zuxstUJRxC~cF7lwz}#l`qD^0UYKL>Sed7 zej}YPjE2t<1)M|$D#+a*?|=M|I!kozb9e4${)2(+`I|?7zByF>SfhV>obbxK6|_IJ zx*I@mNp_AHMFSN;BGb0kY~o2T+gfw_gy77?I1y|VB-jMxqw!Gor^iB{TvyoD1U%Ha zWl}_P!N}V|{&CV@X9fmh;+0Hbs5q&l@i-Iex?1hIjN|T!1kG^%?5XJ(7X_|^kUH450U|5(}=REqm$s%`%I za4@#rxIb3T@$PbSb-T1uGuO$iCO0hN)~oF%cp(2BWFQe5o?t~cdccon355>yTlWA@ zbZt!?kI&9>Wy}6_fdsUvz7N`@N3EncmX8|ug;Br|Oi}}#tD5Dy!QIR`R?_?TYT|S$ z#Pjs^_Ms2L9n%u+n@j#_^E|&MUgaHKrEeTX=UR`s1p8BZ_MS_x%bg^t2`noau81;f z&K_6Az07o5cQAPjXR0fIXJ@j*q3@MT&h8T}69IJjS;$GWOf5YFKbLCzjt0d9L6XRQ zP2R4%;%S^FBb=TN1n2E?L*Xez>^#Rq`5us6M7K{J_~r@L? zD$wg7@Yx=ojt-xOE2-C?8(DDDpRqbOyel&G>0!<|Ht(V+`mk%w6`)FSZ|kl^c!+{# zDI3M}RC*g8$<@XAOJtU_$VgM0?(vp^vv#r!@3`FaXjAc5U-)ee#n38{fI?#T6gjk~ zw8lx$)rT}@0R^`SzXw9jeXo8!Tw1{?!Od$qY;fA{X}I$557F2hWR>oq0(i%{TvBaJ zLPs;S^>qp|Et_dMd5b)zcSEsqWzlV4eNUe_(2z{A(hqoUdik7^ov;u(!a#7q`nT4O z@EL)B1R+DT_`7;*Dzo>#7u{Etx#%{y-y42^PqUNe`tnK-5SsK60N~7W%$5p~m(6Km z&MXNFe|vTwS#D&&JHkafAjh91@O);3%gddV(2*Csxi-935a3S`OU>Ekv>^tPv`Ap$ z|BfTT|07|B4G;kw80r}KDXp+nTZQnD4MZ8k+e-Bz5K0BmnpGZ%`{G1DgU+!8hcm_d zA)%UX_EWXXj7z#`P?78(DgT27fKDA-{$*U+2NBc$fGD3eavPG63hK;0Oq9EkWQ<<@i7TVnlTX#44w6)F$529j(ZTC>7DBAUu2m z-dg$BhBpaP0)|eN-3|$V%_&5_3)Tnj^JGE z^#Hu}s7=^1QYME5`PI4I@4*L9B5~%=l3EC`-2kf~Ldt~|Koa+n!1_Dyt|tk8tl+Ks zGT9c1exv~6_8%;QQ5hTXLuEx*n86gpfNnVnsx8Dr1j9j7i5`jebf`o~EOc?Lwg#ai zl5c>MQ!5Ro2%xf5kYLjP0d@cXF=ziD<|&mB&W8wR-dCSJrBhZm|9(GNv^-OJ zzM|}b8o~a#Dy$sk@Z>Z&yArQU3P?O8r+uxU3DLWTnOIHnhhZJPlwmE^RCp*m;dW$4 zc*qMT%3;T;e(EoTcW<~yZgHd$bg`z1@8zPl~eyxy8;`SbU*Vh@cOUZ;?D&V>3N%v4(Qy|(8|rYbwV2h^7z zUM9qD=7XF*&ll2QjSM`bv0muO8V-Ic^^j5nMJAJU#Bjt+!u3deH z@AdH5=|1jtL!M_q#<#QG3B3kKx(9gFWr|-(p{wUZK1^9ip2c6Vn6ef+?Xm~4!ZHPK z{&G+bS1+|Fo{rR8Q}XT$hEOq+la1G66PijmElH;+C^yx~Ndj!eq=QJr?U!^U$_h%7 zYJ6I#Zf;?2n%NIqKN%M3MI!x)Sv8Yb;jNzMJ)jzuAy{=?b^^{st zw9vWGHzP{K)iU2RR5Ejx4%?dP_;52s0_)LXXLswzl1w5`F#^c!`De4!!cLGX$1eZa zwPLR6f8}azh)dm=_vK5GXB44nRL=BZB<5ob-e9n&K7t-iKzawIbLi2S-bEbUIfNdr zxLzx_zh&hAT8wT)LqjPDfE-NaPr7q_#Dkgyg`VT}V*&WU`@$-`<^7&@Yx z3nQuq5gWcnoNt zMZ>!To;ry&oUc469FiL4CWP958eryAaoO(uKL33d;Ox?nwy1!r*QS{XRp-@BcL{^r z)|gOSW&$-;qBhqu;qWb84;CGsgvN!nz%$H3l0N%MY99J018voVQ(QLu_ zPGHhdW`uKjYfGFI$W;AymH@^?&wN$&P?qJ%c(gJBsW-q9Xk<%;VB{%HJ*XdE7xp}- z>~Wqqdv=qlJ*El{(3MAPW3}qHG`=6$UPqCc{HdSTn%f+|`P4Go?&a-mpWW|#r5|f8 zNFo0JAj$aLT=PBkY9M;NgD~5|_+>BZvMbjMu9EXCdp!VL#+nH}>8%_UkXQJ=o>Hax zm*HG#_})!tZ%ws(uSw?OG|e|7WhrltOZGQ{{LcGdN?J{Bv)`26iEQh~r-daYo&P=- zS2+sXw`8yZh|bR>Imamra!a!>dL8dE1@H-|g9`YUdGX29FQo<2i!={{AfFbRgqbR_ zdX?7b*%%~jz%*-j!xMOrnD~W^`0jyr3S1zI_)tDV-B_#L%{K! zOHe2V-6$=bspdG|hnwbfrIWx8KWVOo9>!7ghiQlwUehGi^|`7~_3282k#ZCf)ALb2 zMhx$59pCR6rz8F}N*+&5WmK?ZCi2ny1DcefLio}ZO zd&t22hN{2J)gJhmaT1+{DOPMYZC6U7%{|H02V7+1J0HxAH`_jxEjm5gbe0$I>>5)O z#Edo9Ni^9BSjO@=Cc}fGMX-*lC2`SFfA5y6Q>(DX+zGjdPeq(5WTi28CAI%lW%`~ zdN~))TG4<8*u+c$fq@fpgMc@h^^kkxb6VAxGHz@>!9>r4?>$^yu~OZ~y=u_wxYa?2%&hbCV4u0n6hDa<++rD*^%% zl0r#vtW+$pfObc<4)RYu09-J8<#nOfj~xl@zYGs@YU=;9 zJa$$I$4Iz%vUE^dUzaN35Xs5vCLVB0uykM7`0#m-iYZk0W%b)) z7e;o>Yqi>uGBK!Wewkdv^P1!81E9!2A2`C--;~M6T7=(>m#O^wcUz-#Wn$T!`0hfs z|Jh?dsY)eL^I{EMx3ox6vDc`&r2LiNa zFLzf?*x_{yk=xC^i<$51c-_YLip`SAp*1$ECgagKbwaUHnnz{xrt`%LL-A(Wvc*CX zyb5Ncg*uspDH9pE3{20_&v7FqDtU7aWhZWa;r_$!dMxo)w9>HEu^*ONyxvRC-1CLn z>_^$9-cOP^(Nhqrl?=ydC5Q$?%-s(;Gq?}8ZVdX^(5^mwi3M<#iO#zi%Qe%j%U=`! zqHk;6A|lwd+gIV{6T@*Q8DF}lH8OBlw?D!IB%(hBsFF;WFg}@SvTM;XqzQnAD$QtdSx=O9)=h0E9G6dhM@mjokhL;f z=ZqGBc3W*R>~vZsI?GiZ$+G`gFP9O;3M(+*OkL`A?me1&*)J`m zgEF%*e?C6;*4x{Ae5xBp(r0$>r5v##Bi7L5z{s&p7*qUAL~+M$M43?Ra_cts8A$JE zJ-T$wW++sN`q-m_7rRPrM=hW(sVwYu zAd$obubI;(v|xr)&)(W;6N6(%2})#9f~W#^SWZ$>QcgnyS#WT0->+W?Ko>pS`{9tB zb9m?lgdqT7QSE5}y*r#9eih!ExpH(<-9eI-4u}T~L6A)84g(Ar13S9e>u97ZiyhCK z)|WV13yz3#PLFXX%+bI8Nwo&`M8pzB1^zr32UHJ)f0qG(LP$!5_7WC-k zT~##`PVBW0pM&XE}aTkX}o@55tk_FkoCCRBG#@ z;B5DQb+Q2$<2uR3SO)}>I)t*MIvoCHUt_YB7j)1jkmW!IjTosQ(?2}eJ1(Q9VPEuL zUUXfAPAB_(S&ydVeO&`tC0;C+7U8I`vag=`s@;@D)=%~G*+%=KgxFKtDYIR6vkA*R z{yMen&ooL}H3hMizPC@>IWJq~A>G1g>N8i3ra7w0`eL6fKE{K&iE8cP&q(oW#+G#- zO*~$DQlt**{(cS;lgu@nijj4ktk5qt7soZ@DXf{2QJ382Uj0Ju24ugsg}K+qt7If# zivP*S1emr|3V-|G`9T;*a(OoE144{$;&Giqa2`=yRpULR- z6c0%#2?cG^c(%=5h5u|=0daQ#{~!+oaR20<(ayZ=sIEj%b_!j39_>}m%Z!5-^7BO> zk$Ssn)sSnD*E9KdF=|m5cKq(dPL+Fi+l1w#YWj}3jf|AAr0i3rj40A9H?d?_Ua`y5 zBBMb`Eg%l$O=ETohZo*DbVYa~lMSgKcryM{BNMowN(YzETN*L0gs<%jaFjEGq~``q zAc0wrjs2LJLD=%+$`^SE$d^#BX4ldBmw+RJdN9c_%>M}?nBVw~Ex{y^p3!(k`7VsD zg>MhB#hmi0@@F;db4qHUYCK9NJ0`*iyiWg1K9L#g^KORoXNs`o)Ib0cT<%z3XI%P! zEjxrqev7wqNzIcYdQ`qy7O=I+c4%4MR)|(6Dw+~z6S7j?W^g1B^D}#@4K+ka5xVW2 zsF;_8sR=Gz`^K`rqyZhfyo!3k%Z2Jn3?*WCVK9--XxqeL7Hj}ynpWr!*(L?REVk4x zMwb`vdwwx{--FAr7kK|IbZ~;731@J6MUwinz)1IQjLm+J2Vz zXPN*y>@$pd-p9c~Kg-`TWe3M`78-9Z2OJKd=K1^f&nZxdHGEA zaAZmj7grOzh7ct5_-ZY+Qv{HtF|*1lMQS-w2!d%KB4k z?|dT!gBQifl04@WmUn{q`cUA3y6DUaH(1RonzltUVQRp5+ zEfitW8L}LF-{OZ8qQBJjq#ACC4+Lu#-1Z;eT-?TziTDUIn&z!brjSPFNdJ@6Jai1N ze(n)u@qcKe9#B-XJdo=^>dPd+9I~nyDvS{Gwr@2Z+?9Yp0L$gt@m`0$oBUhX^=5HC4Gr^{*+eD6@b5| z8@-uGyuV=`{Pd7gm^T2VVVj3i=8|A6&8@4wI2xJs4R;s32midv20QFO1VFK*&b9qP zbUc)RSjVHqaar7Mx(am$W2TS2FBl|NWaY|H8gZIVFn^QJq@p2$5m`8WY;JUkpLqD4~v!YUfVC(7RPZ- z8FM)9Zh9(P9k?}F`yQsEBh~k zN~qjy?mS2?(qOidZQdIgvbiEoZ6Z!aV@_tB8JKo`308Y0i@3HlU6V7L_$*1VtiGi2 zSC9mlv#i=(z%0|nTU)=*ks_t}@Ya@?7yy;12woA80|A)FGjOK;vDC6~PY_o%X!%z0 z8cK^Y!q$zMee|rqAC$6hO;$rTo!MV^7MQ|dy7FrVU0^^N;QKGMUG`4C)7bj`w4?d= zcR!NaplnQ#o|c~B_%{I&JClcOXmd}KmQfAwz8J7*)VCeFZp^6Z^gwEa&#?jO?U|IP z^i5SVNDn5N2jd5lZm&k;NjbYW>VJ`pPB)Tj*AHNlGkJ}+r*e9@ihzs?ogcpxA`-jE zd9Geghl>=sees1O&lJ%vF*KQV>YrfYVGJFh{uAu|xNCFI{aT*vmDBxE9zr5qwgxZd zZaI*_T9|CQm-N=->JOn+Gy%~-`1Luf?H2N4c*@c8i=p(AamkH^eRASkD*rYizZ8YR zfM<%c)4ujmA05|Yb{@pBVWxh05+0D`N){~9wvfCVXykMLJ(oeap|}$7>O2Lu;-y-> z;}HkT2nMT|O{m-BV@k&rd&luaM;p2(b9|VL{CIkX88q(rodSR#kmJ%b;R*f2ciElx zmq~oO9Du_C*HYhwA#9pGv+;ZkaSJF>IGRNBSSqa10X?-Ac`yIDNLxvb0M5q$BD(e= z7H*BK%)xtw35aGrB^r_;4*bqDrxi&+cE^;Kk@*hDP~$`qte${BFYc>5uV&4fbIv|{@3Z%Fp7QwuHOOSS60a+CrIXLil`>v@JOnE9jGX6HszdQVn@1X`#XWwl_94~Ia^sLzTyu0IX7usd3>FJ^Sl}w$2 z_yBCzn!kdoI-mp$;&1%v%7UPks0Nqc$gEn;mt=|fqFT8Ulr^1abjiud&gkJ=;pDfv z-N8W%ujkAkeu%F+GwoowaGK`Q5nsw0=zELPabJOVUm#U28v6B47KfiKWj6rmK;YGz z*=YCYp?nHyB4c2_?+T%?(=0I%LJi0?1#;IJ0l`sbi=b13zW)A|T%X0yKyHl3YTVP6 z`Vl@o5<-*$s{pHba#@kAq}eeEbEDQxl|_g|5jmY_Q{_bv`N2KA%ILfleWf_>$S7lV z71G#aaLXElZc{XV@3BV8MJE2iiYRt?DdT0CW|92 zyCDxCr^e&g>p5$Hi=wWM_kb=O(2lbPs-!cd{OTo)*6jX_W;)`+H8p3FQ{ox$gDvo` zFXy)G<_`p>mu;2Q3g+)UyUH5~BHmKS(5TX6m#slprgow%R@Q8U8yuEevyS_c)17Dc z+k3~#(Alq5(_%uoU%p5Z4kB{_KlFc$lNEH#Js{mW!vRuEQ90kL&8UHD zvBVJBi{-a10PW$?WZKh3Uu@}sv%WN5vxBu1?TRf%lN&ZNRE4tkFm`I1HDxM$h;do4 z-Hf(($%mwRprnWI{_6O6xaicA5ma@4oZj<5N4hfn<#B1Qh4&!~t*n=qmyQ)1fLf-m z4*8IYNt^eFc{clK(&*VIK#<>@Fecy?gvex{GtDY8P{HcG)A(e}R!Txx^^E{6{ z72qD&0DuO^3Y9cwjgvJXr4ch zVvtGlGu6L3uO9}TFaNGR!MUGlXRNqr_LJuQCXTM*C!Qzo9o5Rte|f6q8kb)ZKIY`C zG>`&3oV}Zq#gjnhh6sAP?X}Zm4i0WXTEMQkhw(M8YQU8>=+8n0 z{Jwz!TOdbA-Bi)eF4_}7MtK04WR)9NgWSwN)Vn!U-o(G2S5Yk85T6a7Z+q?NsbZml z_3<7B^uWjIg9s@KVR%Y<_e0V6Iw-Y(hP||d^H<#P|0H>4zr#XL)&=+YAYjHfK6}K=`vCtT18id~cjhFXM}U=3=70AHU(Ma*xTZjf02znsb9E+8e_1lqsQaV71M*Yz3t~mYr^%D}=(dN^ntWU#L z#jTXLuYNx=Q#GLlC}AWzY=pelWn7CvLlWdd>ePR1!wL-v zzFenn^g%uzQeQ;w^6N6RlE(05o|8! zEQ8{f(b{ir5gksA<=;el=H}=Rb>zyc-Q;a;DQwuVb>4JRQ5w7^AUad13CD=tVM0!J zewpOtA_zSaPgcXgU=&ePl+zDZhH8Gfi=2u%Sj&aw=k-_Tk45Jdh{_hX1EM-pc~ANg zHo8mni^fNP$#=fDDFhY~laNFjR#M`d=mQ)sXuYQ{m3Bq6Ji@c7XY-`(&Rs*daZPJi zyfDzsutya4UQhJi-s#1Uu;7ZjE!Qd5G;tzfl8W-vknL&mvbZ>VMSG2XT{v^GY-;jA zH@VkCCEquv)i^X6#HdWH+1Hp%#~@(iLA#v&j9XE=%W986?k zb;H@6W)@qClNMimG!k7E_eJTOYxDPu4Mzh+ljop%i^DVrgXA0H`y!Kzy!xp>7EV3w zKVv-B>Y3_vKGS@IQbl?a=@>1ApGZm)k^Tr+<3&|w8{Jfq^n9Hp`v_K;w>1auKu#I0=;_l7!V`)xw#elzm|?HhI07woH0&4VwuG+j{Il!>h3H@s_Q9q*%%js&1<3$xc#J)T6kGo zNqSYr`jVgzR5jv0FE4sbY|$O;E)vmvhvId%D}B~pod&@Pj0r46okvvC!{Nj`lte*6 zZ1o8i5te$=FJuxSJY1gb1J{JNtv_2%70BFhxPP@voYA&EHSD1Rn&_-EGPxmCV5~2E zXC?DqN>oWvc=URmp^rUIQGOWO5|BZ4{_t4A(Wn@k_o-n48#k;#*Vr)nyc;?YvJaK_ z)+cy(7Ok-PV0*CC$$(~77SltgU-&Z8GX`#2II!GctQbL`(y=S;PnkONnkI)TG9wCx zGMZ)m_ub$mYIfO&qOHKvGtoV#)8uE@z$*imd_Lq=A@3uNIM%;|4neoqmy90V7n$=W zz;kz&gQ4)mF@bt{ibBIwd6K8wSvlo1My^)mvK6<9<5j5G=k@>|tl7JONcUuse60E+ z&8~gH95Dk#eKJuLQcKa%@ny+-Z;^GiLQ;E2l*IKLmVsSyG%%A3ctOtMrbt}N+%M=U ze{T(tiaSF28h5ZA&QZmYYxDMZji5y5EnFAd+y$Gw=q*{fNLYZuGig4HO0XGB#~SnC z?2J57-b~IbI5|9jiIHDE*=_E&ah!nr5TJXjX}AR8ejWn!cLLb^tmY_TgkZVV68^fOz~o-3r^~$>gufaJ`-;ds8R+v|`(R;X1Rpq4XR zzEH8B0w6S1Wz%NWiz}KZy{;pCFxwPNpEC^sxshrN_Kh`> z=X_O;xWdogy>OoQz$3-x!^^DhLG$R5-V zR&ZfPR6!bkDIjc4Mt=8$yrpo1&(i~)#o)1r=V!3yK7ncM3>f@ z6|Cj)qbECTVi{0TB`s;YIp+BMg_{dpnzTDH`8RfAUDrn%I!~fNRNQ)h&5CzI*?QtT z5r#x1uUn&*ZY8jR;x@i}oRbsZhS!2Bru~hueW=m#%Eu!q6)8GwB%8iBoY_vgPyq{M z0+*tN3+;{fASs~$vXteK5*Em1f8q_ve+$ULLO|I;f~`G`_+#3`$$nKvM@bS3dDQ}0 z|JQMfJr776LVH_d6NPqe#|=(1)V+?+2F zi512+xwu4XVJz8Wmpu%L-^m>TaG$qLZ_sle;GsV$eGI7l4Dy`zivMmHj-sIS_TpL10yKGzqJ2WvIrJXu#VS`P8&r9;Ml9+<;7 z4XJjYqGo^W$`r)oUGcHv-RDsUOOWcruC@xTG!ybc=4;e&VK81{d^ePAMijHL5Z&r*be z>kAT@fll8{rH4+CQTo35s^%|041p|xuv{L955=IG8ZZG|t>Re#fH?6&7< zlutg5qLUP|<>~A`AEYGH(rolaS@#bd#drvJ8)K+@c1*sE@#MJ)niD^X`YKb+7R`Zbvghua%P1UZhZNOV!pA$TvbSGAS(2^@#5Y$Awg9lWfYS| zA}}JF0_Gi+tYJEn9hHP|&w8)gt4}lXxuaZ}gI6wT-){?d3%i4Enhj;?C7dDHNaQRT z3HpZeB5+)U=gtfhSwTleK}!%4S5yAgz_{Y=>^QzP%k4pHl74lSZo<_&4oo3$rbfCT z>EVxa$n!8Pk%O@G@;N;d^OzyFu*2gM_r7;tpP!vua_!#XU@l_PEc%E6Omsp2lUKhv zAuJI*Tz_sMO|co6XsX7Xz>iQ&^a6hAI6?+Xf;@#H!g8pTC_Q{8oX$jZkHL>KFYmBn zYa0mPVY(fP`N_GTGgTtGx(K~w#=gjEqu4~mb&a1v!ZYf>kjI{=#fh3|Xyx!K``I&I zy>D8R6ZdOU3}-&yCu3s`EjJuL{KS6XGHZL*r%J3g)4TD`EoJ~YO0p+_dwXvkOuAh=a<$EXYuZv?zNCs|#^##W(DEfh)?)_qn3m zvUg@XuBF%#3s{VMGd0%5a?HY$uq6vMY-l<P1PZA{&bYO~6A-Id4S_yfQS4 z)HmiIDjy(LaZxML#51gSHsXVYX^%L#Suy;mhdoYB3HRs=(8X*DWQ@aRl6;v`ByDO@ z+62AA*56w^*oumZG|}evyTV6GI;J{RsqZk+rlkNCcpfvN>GgMfG%iu7+h-62{7BWL z{RVXOacib`2{Wr3kHm$wVclQ{c(fk=YM)ZI-#S7#Dzn?ZrEZkRY1bBbOS!)bTbMP>9oy`y{~{bXCk@uw;3+st$+&xYVBwcaz6`td)xlqQYZ zOwxoPNI?OnQ#P*}uZ#HH{6EQmQiKqI>lro`Ca?CB2A)&h6?66S{&psHSAVvAz}mxu z=#Rt*>6e{pQX(lDGP=u}KESb%qqWag%hu9T`ZdYF*uxy8orochW@s%M671n>Or)x40L%9!Fo63_Pt9EH4g8^h~{5P-{1{?DL7kg^0MA^LL9{^NBEFDu%uDh zWC3*~%Ju056jLqjv;al;t;Aj>KDvRAkGp^0=++`O^=iI5pxc*!b&@y*H)1i}fgVMb zZboU?>A9s|N%vCS{EB36iF*b+E{@zLD?#sBOe&_*vroTE>L8d(HFLIrg_0rYh4)TY zctOoa->o^V$d?BGP0~_IXbu82(uR<YiKtQo6Gyv$oL9uy+k_Cj8Vf z{yr^d?)q^MhakhsZLRr=9&nOrGL|wh^?XI-G$g4}yCa*P3F}{|=`)389v?AC$*%h8 z$qswyzV>Sr#sfEwhEoi%V3u}uSzrw3h`WS4z|hlyV*>yyyRhAx~$UoTV!Y(Hxdx$obcuY9Z1Gd_sK^*w!B1G36E z_#STfQ+NymRhAb3`jnr`+te~T;1HAY@l%NQ{j{zHT>+MM1c|QsTY%Nw(R3t2ll6d` zrf~b+!RdTW-QjlJ;OM9`E~LH*8ymU(Cv3lj33q`KJ~*VWd^+et??r^vwf7o)Rf!t` z3%g?7R?&1Omhjo;;o<$mE`>TzGX!Cwe(;a?FVK3`*=|2f42izZyGnh;RxOZ*vHl{$ z;HRUU&bYd>G&#_9W3ku+N(dVP8Wo+_{SvjZWEFRT7UP{S4%&mV!1XK zJ0$^9wHzkI8(snAwO1QLEn4fa^4=pPv60sUmioqalbn6YBuMY9##tX=K14JHqQ)wQ zNne&?SF&UKON51m z31m@OS#+8?Vr2ZCSLAz4Az!VeIsbVGXkTRr`Mh{(f0JTsQ_|7l* z9vvT1CE$h{5pw(*0b5&pN=nuB5T z_(8lk+U4F)U5Y**&ORQjX9A`3?T`S9^$KY%%!3{ef~ zIGm+tq|%i!JtdpH_IQvNa_a|#K0uH{7e)!YlZTb

zSVs$Dm$uyZ zi$~cpmxw7n;NHPvalFn|oQkOTJ+yhu&fduVOrBY2Yv0#Q=DEMfG;-rTH|`n=@+F?@ zB!e~JF>27rKVdmMm~Xty$k8#!l#uEVLOv!PBf?72FVQ~Y;g$I3*l>D0umP_LQ)~=a z03UoMS?jf-#q+#{G~35bIk#|3iS75#S}a}=peSatVDSE(6>JLzRla2rI#)}YB`4${ z*Fqsyw5Y&dP-N_cAU?&rl!py1mpb!R2zJ_3yf;aFLC z4^|Xb>w<6mW61xcRev~W}x1czlRt0>SQjL>b{dqQa} z!M+je=-eb&Ac?jNABZ4JeGwe|zM)`{ zqzC|wzGMbRK1({5NDe`b@^X_KqxPZWuNR|swoSGoZ5}?FG6hzPiC@kp-_GLV0qyf| z)fhMN8nD7@3*_HyK*VE@-iMhf_qMzZf4q3x9pw9kJ|?)C01$A@0CEw~e~*PiQm@-x zs|f%?qj_$WH{+@H3MGC&kuvL=fb#a_!L`W+GIgyP0nQT z^#KX{r{%*Nd7|fzfs6eW$|ZfJRsg@Z2&;4IPSG%*6Q<)jXZDZbzcUvd^IT@MP-J9i zIP7KjQc+OyiZUVpg5eTlDa@c!rh>=us0hEEmO5Ymv*`-@CnV*z+{>%$Z~dNZ{0535 z?lsXN8m!x8YWOB5d5W}~R@HR(r$uknVO3#33$So`l#V7uwJj`|@&b?4s-Ax$FJ_`E z4NE#Am1x7Vth&LfOsnbLuIYBI$W}(kyR*i$b2HkNMl6_`)4;0?kmI(v#+ZgMc980T z?~xL)bj|-^QT@^6LJt(f*Z#dR@V$tRG!QanQdZGl{vsP3H3K!e50nDgA`S)%25FF_ zS>S!yc{@!STV3V3__Zd`rinsIf$@aLPH%M9j{%vJ-w9K0sgn|0x#Fz$rx|~FZ8TzKzIDC*zk9T5#u^TUtnom- ziU$47*HY?Te@OtE=!Al5f~p|`jOM!SJ+eJZdjVefd1Z($(}Zii%kO7jMZX!%u}Moa z+V;m@>UbCp(`iKdc^Dm+YdTTd-M`hyBmlzQ#+Z~`1*0(~JP|C-0R)DdVu2R|_X4nh zlj@7nDv@tv{I%XB+aX-P9QLV@R)1N9g$1+I|5P5}a6}j=nn*sQ@?jUy>5cY_CO2bF zz(gCOF9Hn_z=`z>5JGoJLi`|?^TFPtqtwNebwN8Fog-V1$PP8`#Ch9Ds}FDJlvY(? zNtBy_OVXd+J;@p^)L`s9=j->QiVYk2HTe)1=*%8axdP_8AxS7cW5cgv9v*c|Xbf_= z%{)y=yK?n|FW6BRmYJ`mA>PD=(y;m@pJ17sd0}(E=DwK8G0FDqR~qFo~J_b<6!&9)blT z!6s!ICUE`MM%#ywk|;^efF0i_^S9b|c`!XHUjun04yA*Mhqs3j;0dzCm%{q*x;uu; zFB;oi@i>ObY2Pg6NN!Gmj4LwV1J`jCtef*>Mccu)CPt9V@jz!usfC(RQibcyz`4p*f?v0FgNTbs0cx`+kV-|Huc# zl6I04`2RcXe|~%k0X792qx38_n{9i}X-p7d*4E9p~=S=sS{t!F*Yea|~hb;X-EZr?ybLAj}{B=-mf1p-AuLEFT} z1bt*rg%gGH??+mPq(T#s)8KC)LQIGH&*vMqCSsgW zDG>di4;?1>!_%x71G)b`lLfE5`Tu$i9$^-|Q<|wdgi#vu?`Ok;>OZff3!!`KtWY8#na&rQ~J*`AaRnl|9zY|1QikoqbPhv7X9z`0?}Ea_GtgE8p2432L8aO z*~>})uar=5fIu++|16MjZb)~S#JImgh0#9A0_h)h#kn@Bbd8 z1k_5$N}~XYevrkv@!>*Vg^Q0CDQ-eDhz>dtY{>7eTKzj ztO=t`J9-uw_hwPka#gJvmiY|F?#Z8A?7+H{OTBp;k>i|IfL#dT6Z29A^(ketKW(~c zZT$5W{>M3@x^pq=`)*3HE!K&WM4w;3M*mS}NPb7mLvE=nLU5sa!hVv5oP6!l@Qf^dx z8}-aJ-69{83TecuQSdmnkBz@yKXLi|fG6pAoOAh3@0TwGQl;`&jKmbQwBXIIUlA7PpK+^blJ(r?;zM8cz(o_3#9ohL=ZYpGM1_cD4T zNfLU0P-F>@k(t@H5j%@mYGZda@+i!bh7$x1X*ZHAxV-0Om7A6l&{%9|ilG%+k)2d) zLb*xnR%SE)_y7z$6wIw~7P8~eh%7?_iRZj-Iu)@qL zhf&iTvcfgUS?yNtupra-v9tcLkK^D=xfETqrOygU_@Mw-h1p=7=;H=2wtUs(mvM2o z9P}3p_BL0}V60AfoHRIcqQK?j^m)U`q3G)8w`*?;;W=7#dLK(Ti%{2ZSM`6p9=W36 zeI^Z;!FG8UQ>wf^{)u6?`P3v0dNQH(@S&LU1$^n(%QSHwMP$eb27!$7W%9cy>3!_= zJdI{oPwT0e&cx^Eq(m@5yPsJanUdobzG#Qj-fa)XL(Ac-)4~VG`lc2GNqkBg8mFO| z;Rmt3cWl|nqoo{?8#Pk^b|&!i_7U}WbUDPV;aUf|VOo85`kiK~Zkw&`cl)C0>S_qf zuPJZ7rV3jeru8~|8}WVR_}0F*`?XWlc(Bc`yg4{L98c}yk+ybpT3Ttu-gllA;&nl9 zYNT_?5rfS$j$$4?fS?kJm~6MzexT_Ymzem`-lu{H4Gndka;RIFJ{s!m95bSBCG`#= zRH|kEV7%lpNzDBf{~n@oN}i8NyGi1*xEEOaoPO0hP8lm z6Y1U=z{Al=3yhH*tucK3I0O|9bG{9SAZJI^fy2LzLP9pT+_P>rg*VfCHQ8h%);cq# zx5Q+E>_f<7d*A}Gz}S+TAjwc-&82h35q%>gJSHfCnqSC>e$Z-mZh64<)%s*j2{W`R z48GBQto$kR_t};djgmJMUehHW8~8rZpZKkksf-LNCO$Q`ifL!cyBL`NCBkMTF+P4J z{abdfM%jdZCC8C9(&Iw#fK~PsVy(VJXIBdx(YJBSQ`Z?ejSRS0Vno{dD4q$?|3|H= zkmquU!=s}brMddI-Icy|5H5LT(>WNl8Ms+vl^bqeIfTxe6?jeuG4LGwQC4q@vgCosoBL3t%4ZI%PKDZjL2wM=!=zMAiii>;IX3aZD~=`dDs+O(6K%p&Y`{7cFoK$ZG8?Rk{mV7jR zeRwsw_g!G5X0H56Wgpc>iC*(<$Iq)|M*cG^XS*ePpL!Mx4?Z;IP}*n2!OTcjj)A$+ zM}Q+`#P;?1-Jl!9A?O=ZpZsH)t)V;{CCbUL)LNUP{3o6jp^(8eev(YsHCqPs*q|)e z#iT$$Ed3GU$DZV`d4U0_%SR8BSW7i_rJ{>3Y|s^fMIs==Rc7f80nbamQ^u@jU;XRZ z8BL94>}RT(A?YERx0hJ1=Nf%^f+K0(M+-;FU8W&YmTjVCj9-5<%^k{A3Vzx|n-@vT zOiUMK%>we4liQZ(IT_ORxf)Xb8t!}CzicQo5U1K_L$23t{X9)Zq0OrBBym@M8tSVo z;mx%vu5As3B_e{i=kPpkVIKlkA zZ$Yw?FKlzL7@+a?=;9Gb|Al}&3m1i$;BJr-Ga>iJk#Rw}ZlhivvjMu@2{!{YdK!@= z3~XJ12)I^JZIV9mzHF=YMu{!cI*WHt4P3yt#Al~CZHN!5o89dSjWm8@y%Pl>nt^ax`~ji$|-4k%J{SrDnnWT40xySLs9K`7WsY6uAHqsRE!@HZG@ zBuuEpyivdo6(I3cwT~Qau!RDQpb&=x|!8n(#U{QvkK#*oa+I4ni;$SXB2Ppq1 z0A#^23T|p5UVe$zN1Cw_(oxH(R>RRD^kBc(+MlsD^2+VTKKAtWJ+QQ79vK;liivsI z(IMB-+1ch;m*~qy^E=gyMrI@LYTCu4r7=K&FR!nsI6pt95OJpKk`Tvt7_u=8;^;id zE{K7_;cjXOVq#)eXyuIDV;^E(2~?HLjglyg5O)Y{L|;=g@F7q0EsL%QnO`(J7I!pS zSM*0thXSrh(#1S~=J-`73?L;_phiN4{roY4``=Eby=HRRd3KHKbD^wBsPmYd614xg|WI{cl=YlGOBTs4_w zLwptn&WgIJn+4yClrsnBFF}gL>wn?p*Rtq4{)m^v6f$ z7d1Km%kZ`owiW7-t>(Ono(q+vMFz1eGxUTYTE~rqk87g%?rDw2-hC zlW;@KxtG88T4=$yKP|UH;l26>A2g)EtA=cAVi=I;Yf=ob+qls#)mUj82;v14VQuQ@ z$W7xlk18^aFMi%0tMpZs>HeJ{p4m%?u(2nJLO4Y>*LV6DmPTSpgG`MEkI_K11%%{iZkJ=;?|h4=ba}t zwt4dKXBQd7QbdvgT9RR%?X|yim3&4Z|K~M)-x;0xQRl2PpTOihG#Y#oxs5~hO}sJs z{SAX3mN(pT5UY{5JRV4rF)-2zcc7{>AJz}6fPV2va~%|2A1lwSy~>a~k~@4xexOYx zDVU&Pxvld0x7i4&1!FJ;6*7PT*uefg=xKbQ|AV*SfbP)vxl3{$3myAtoPy#w`3dKZ z{F{^xujR~cSK|8tQYGwjUldW5i&IcxMd)9bPUr^73giz`gd9Q>xD0KLYpcS>-@(}q zwCDPVM)|pl4HMh-M<>_LLBv}C8^UFQ=Bq(un6pe_@;v_hAM`skn7w-R&s(;uI>N$H z<1BP@HLGsjn9!CtKF5km#Y&qI?RmqqM`E9x7IQYBiUhbR%lbU>H$HIw*?VmTH#(WsyeE0@(ls6fC+H|P0IIJ&@ z?kuqoNkofZe$4SxA&$Qn%s*0R%T?hm_U-z?QpGxhJH0=`Ix~Ds8&dd8BVu7mL~>~} zgbiGvUT1(H0S`}x;83Wy3NIGq_!AFn=YTB@MT8#Wgp6(l&HY5tC*Z{l3q46!xscnJ zgN*8v-pt*n)Rt0x10sY7$TOE73osG$#sx~+7UZh)c(XSYkW0>Co3hgT+X+MFuJQ01 z+2JC7jh;;MP~mcu{U75J&D$>)71p;x*nq85D1t~&jg(d}$+xgfr@Hd1Yec1A_TX}t zL#x#sisuaBW}G?D^TxF7)YPXc#jX=~tc5Bd}JS%O07=Ed|hc>H48s_1>% z-k&&3VKki+InR}4%W5Z7oO_%WuV-GZW%pB-t0Gmh089&));C`jIV0|L5sbh+-(wHW z#P1G;u=o$Q^A=bOw<(kVLNAdvI78@AEx-X0zA&HzLZUjMh%<%Pp|@Gzr5uQD$V{6N z#OLTw$z;H9->*OjhR`#-qIi+fGY~x-=_xTn-|10_rOk<)uW!v4y?ZV5Kf|US=T9nI zrxkHtAqOe7Dgl`?*a&cesUuqN5I_W&QBFi4;QRr(B5x>&46GxnZ^3g9%{t`FMp)^X zk~ROC4;)GYq4&OnNB4=n=C$UprUFax9{gqGd^SsNyom}#rp*e`miNJy zOdzotkYGH>=Gfg^$SLViKOhA_|J4o5(u7Wvifi-}%X%d0Z<8jS(>rTvWIfmZ>!isT zt#b{K9Yf;3P0G`R?`DnRW~0H16st5u0i+6)@+li&d0sf2URc&CXl{F|fBUlO>aOz> zwJd$%zfL+c6!hcSd=Aa)fAn<==u0a%86Rvqv9;SY(Qj(c@2>;<<)s}Zoi{rFIi(c4a0dvQCur^p#sBe* zY00F&4z*y|U-4|+4C8F7j5lZ1QCxjPpzt76iQ4T=UtD zIDeZJiWN9<6r_CmSH--IghYNt&417QH)}XN40@Z7s_~xXZ(mZY&u8GYZukDL1f|&^ zb?-4VywNM3;QXl>wPGW!o>kx`2yU_1(-JgZ_IOcA(jxyD1M+?>lWZeL8nmQN;4ih= z7QE!R&9zTAhtXjWXp1BL9zL<}x#DCvfm9lbx-;gqOEm^z|oIDGQ}_Ec_3pS^ zqQ}!mebKBAGI2oGF~#ZZD}H9^PW91-;_Z>$1YJwmvBUbe?DgRfSiyLdIoV0PX!RSm zS?XoP3tOWlwrk3yTn%`XIegmreq zTt|qREEM_fc2)51)f;Aq(Q0PCFf5I7PqQ|?f}immQyWEkMmkf$<);l5C-qcpFQoS- zUz}Opp}MLbeRuyIS?(lPQsZzCI>)_(#`3&7P`igL&h}39o>icrK=3^i4PlIZ&kp@D zCz-|Qi&+Z%1N<-O0!f`>0ZwwKIptIcNOHoTpJfGGISk?5TeuzcOZ>4 z#&8thH{`2YW*Zv0gV7Q$+%~yyQx@k&pJ($pL z6#Kg#2tw6>md3zy3hWD?j)=xY@}+LHkB^G_>zjkw$n5*v8D<=1t{YxZOtRufUM{p6 zilzCxvXhAKip;zp=Grl5Rer`KYTk}+KUI6vDnppSSPUh7^2sOexwN#jo<3GrSrC_; zeT#2x)IR1S<`!nJQ|;~mCcykr+)}~~{h2|6aBU;+;n>r?+?&ba!}MQ61**%=c0#DO z-upT)*a%Gz-@_jz;q-zNV3A#Ij94Bc9Qg;!^|`24-Bd!(SB!K%?Hz8d-JNY96|3VO zY4H6VEnP~ye@iU7#fyu2>O`MHW+eG5;oK)7PN6}v65b{X@t_g%SMh`Ni5h0E8Ca2} zY+Wz8n4-mqVDFRl@SH5ielGf2en8vXb<5G%5fPu|rs*eWAE`4AL0BO z`p#jIuTZl4{!PeEzcch{S!Tk4{yJx_e+9aWTM zp;%sd`|{HxbQM$kpJES<@qzv_{;Ns4sulsH3mW$*o-l{pDfwVsxiayAE|0x2Lgs_*YTz*nciE2_M!#w%Mmn}X9qa6=Xl%$MnXrt{hR9f+`E+;u9GS6etH=ziNp5=Xpr=U0FXR`| zV5-5Fi>KP*hd#|Me6lwa*-qU*sF#7+#RHHDT? zYa<2>JuUl1^M>pNyDn}&m=C}*qBzthdS;(#Uqv=YdUKIC+r8<;^1XhYXtX7k$$Csy z#1d7*C+wTCTq2t&H;ic$5W>7FSpkMiD}Gp9yeW4TgbfjjvVv?F3Z^k<(FeD!WE{kml8ugUFag25 z*V}l);?9i^yKwvUC*V1X8)4xd3t}Gn%9;KYZ*LDSh=t2ay|1gv168U7>Y*@O$RYFl z?y>v(+g&lel>E`ME$dZs`_IJZ;%_c~Qod95`eDip#Nb}r3aa|UDzlx+m^$}o6I_!I zz7`aG=4)`jJ1AAQjYF$-GvQ6it)M0b@A}%g8tXZj#BReDcTc@kwA6&|vWEP{%Y(Ps zkCK;_VINGC^sZEm-L=Jr9B zObjW5;do_9>nk?9(7WA_qu$WF>7G&jJFRbkLqJ6su;9!N9u<)@kTxLdNeTg5^&2<9kla^ni@?>x=P9i{DL!^KGi8 ztG%%o{akg{!+w+v*|c4Eug3_M3j1E&$s3~HdG#3&EofA6#>?zEpX8kOQ@5MINtZPZ<0OtB^F@{%51r$WN@Sn(l>?bhTZ7- z2)n2fmM3m*G;vD5064K<-FlUsPA_K zG>n0pYU^hYZlvdT0G=`ZTSt*S_9rH$#$z(^|*&{36I#VS$P? z-sqH+lqqLJq5>=zr+t~T7RH=n<0{VfaCvFSiz z=ctTkyZH8S0bJf^MI3BsAcG+et*@2C4nYJ@KjxbQkL1_o>H{_C(->#AN)_f z&RS>fCSk*|K{|%)F1E|_6IPk>>G$2El9S(oYS>QX%TV-nt3w5i-Vb$*aj^BWslEjJ zwaN7L0Ih(g%af@m_e?z~TS_9=``4Os2t4CpeLt~>!bBnbT~4D!!U=a=77AW*mrCva zoE@*+`^J}BkVhvr@e5YxlZxjHJkx=im~Z4F6Di^O1%jQQY`%Xh)M8LW z=zP-PTF6Q8E*wb8{FWHVc1BFNF(tL3wtRIuM$*FWT?qF=ArKd-xJHSIjg5*+aU*Uz z`{ny(wo#D9Mb4l)=Abdr*qPGjcr%Y{;3IiUvG}wWBBwOFLL{4s?)&x;wWGc0ZpX~>Q$-zRj+GrKSgY+AoA7IpQs>~BVWp)=KfN=4y{cJ zejd~Ao94KDU61*`EWn3cCjld2#*sWtorT8Vi&$Y+3Ucz}ELP>2SP4<7nyt0d@;sR_ zx{3EDDd(@}$+fDn;^Rdj{<@NDK%lk^Yu_;N|HT4us)gVbj_$4~Y&(lYWoAa=@-z{; znxwr-^ANqOo}S2p3feQO%TY?EdU^?DJK8f+h&nfH9)({6qqaXJx>j6lPLqrqJ+ggI zcgO2J84iuSSK0Ag4VfVQaK zjJqLZgxv1t-SCysho2dy7nF+o)+m=lm;WMH8l0z`Q5Bsr^Dsm{dmdb z0U1!Iua5Q&mpgyP!_MBGB53D4s;jSs7%(o2?`w{Mb<_B&l1MT^`BU{9yf~`4SwOkF z_(sO95_I?oi}3Qxmk+6IX}90OZ@<5G$5NhMt5rOPS zkRW>)r3RlBEJlxBW+XM62~|~9?;leP5?s>kfy%iIyd-B*vs-NOwfoW+WGs|IaNz zEkww{qMYTFd=AJ0!3ypADVv*{pR3We$G)MBTlLE@Tq4R3l$EnPER^QaQLB|QV+sw9 ztjy<^Q{;D1e^$;=(_OeeHqY3d%*RYnZRcwHo39bH*tjg_H4AjE~xyC z>W>syZk9YZWN%<*0c|C_^z$%Qh-C05rX+|32b;-*mNA$~l z1i2!r4)+Wd-pv+?|12}r@4v3fOo;ERZpd)T)iCv7dPDyTiV0_PPcN1ue>D-p25rlw zG#EQ%ftKi(ch!uUP}M}kv?X$j-|}3drEJy|s+4WeKG~!6CBVP%&Kkg4F3!~*b=6>k zBF4CZTdE|l#Y$76=YS~4sLrFNvK`0B)9G6RY1uU?EO4e za!x6eM%jQkHzSLQo^@_)sHl9VL-72zASzGG{-LtlC@thNLNbaE3RcU`0ky5dWq>x_ zp-`iX$NVQ39pS04x9epHwM%vFCW|_VY4Ge3HT!VW6gNx;l+x6 zPB7xrs3xKN$J{c>YuI@XobuAf%!iQ>6@7pX`m(5Lq8wK3+28OELG`_$!T&e_h4DsK z&NEy3w~{VvPT_M!mL!RZ0j7Lh9M`1pKpz`^+)$Bt@^*6w8sI{&i0*gt^e%2RCzSNg zjl(5Rsf>FvwtKtH6p}t73bW!PV$-9aXN=TKf3&&NwlFIjgmY(FwuB%MuiknIlZh*hToO4!_LFGb(q^1 z^$bx;0{noAk&!hq$;a1G9Ns!3YdkGMN}0ERQ7J_#7fxX{ddjLLjj;r|U?(Xf9w(Es z%yWDR;uJAH&?)x7WO31nFlEei5ZXA3sNb5%*sT7LyQ4!?bJzvPxV=$Q3g;Uk@69A! zjX=jkc6KT1+j@(nSP|IrymL>8!xuqsP==4c+#C$QLsCF{T;VrA*m(tTV(U@&F)x`gAZ-`7cIUg>s>z=@_%BW%rACdh048d)4 zUgi%Sa&|V$<)QwO%nUkF06|9G4nPIuySK585pl3@l{c6BV6olst!oSy|BA?LI7TXK zxgvxVl&VYUcxh>+p5s%3~%ii(QV6%};Z zUyjwt@z|O4XMn~@lIU@wsAP(6ap`={hrbEsEPn_=CDt5SbNQS_5B;DJ@gVV|F|YG@ zD@u9$7p1I2beGfB#XaNe_XgFLHZu*j`ZJ9O2M14bhb*gY-tms;d;e6(+|WRP9_lN* zkDoF7g*g?28e7*n`I>o&0V>UwRq@fI5oN7Q=_=a;C5|Np&=e&^ii?x8qof=b>I6H- zgjsA&MnY&j8KZ5AOoop#j#eOWa%`RCV!Izl|+JoTXd(Y9i9Qo^9=fI>zM{Yf5U4k z{>^7mq&Tm`rC$o7LK{xolC3h{xeiH;aX=5>A~UoB~bG-*DFRhBn-C3JbBR zgdOEFC7~6LWA{O?_EiQm55;HntH&2uyRb_~)ijaHIC!s>F|&gfg1&Ayshag}R-&Z4 z_F#YimoEfT;ZGI$@+E~yxg$ALRQjLF-42qcayA4l8`X|B}>=NGS|=e9$e)^ z;L2l;@)=hQWoeZuv;iY5v7MV^<&hGKr>*8z8V@*YA~Z~|ZaFobU^=#3p2X&AS)3pBj<3f(tL&t$8zdps9Sgf#dq0Ei zd!ES%dg#j^ub^t=mgf+7ZO@iD>+ZjP%rYo1Xl$E+@U+=4Ya&mx&k8j!(`9y4fLt|rJ%6AG8pHl) z3s~atZ?g4{nv8L5Psgic-b{6j=?^DVTONRRzcjQ504PxEU;r<+UtI4P9b+D;_%cG9_j?Ox31Lvu%(ZXtx(M_|!|9db=@P zpTc50muKmXn}(#W#bH+nJHJos47Waq(YMeInCIbKTz%iGw{6v>kn(RLThSh236ND6 zd?@v;P!c5RAIUN(`qBM9KZ#$o7DlxbR|h_4Z+ zMcC&mEFT6vvrp^l*=WgZ$<~wgY?F0Pk@$D+TU&U_Z9nsi49SR*h?Z{N=j*e&VqO(X zmW`lF!0JOb@DJV{B#AmPH+p|H9rb@$;eBigmuivv*mS7E)xaSu`r{ebxrvl{34b*l z+`K29AD4b3*6cSdcBBwof0EG`fAJ2bkNY|?GmN6|#o=3H`5PAQ$pfZ(kQXnc-|A(T zu~ZuyGirTpAPtH℘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

7{ZxNlg;M8CX;3=XMm>Vzz!Xnte> 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 diff --git a/files/Model/Model-AIModuleCreate.svg b/files/Model/Model-AIModuleCreate.svg index 88103bb..726809c 100644 --- a/files/Model/Model-AIModuleCreate.svg +++ b/files/Model/Model-AIModuleCreate.svg @@ -1 +1 @@ -(0)(1)GenerateDelete Module(0)BeginEndSelectModuleSelectGroupSelectDomaininteractionPromptAIGenerationRemoveModuleCreateModuleChoiceGrantUserTranslateDomainNewScopeneedConfigCheckAIConfig \ No newline at end of file +(0)(1)GenerateDelete ModuleBeginEndSelectModuleSelectGroupSelectDomaininteractionPromptAIGenerationRemoveModuleCreateModuleChoiceGrantUserTranslateDomainNewScope \ No newline at end of file diff --git a/module-info.json b/module-info.json index c574834..8a34f31 100644 --- a/module-info.json +++ b/module-info.json @@ -1,5 +1,5 @@ { - "date": "2024-07-17 15:14:00", + "date": "2024-07-17 16:56:33", "name": "AIBySimplicite", "format": "json", "files": ["AIBySimplicite.json"], diff --git a/resources/ObjectExternal/AiMonitoring/FRA/HTML.html b/resources/ObjectExternal/AiMonitoring/FRA/HTML.html index 175d567..48518b9 100644 --- a/resources/ObjectExternal/AiMonitoring/FRA/HTML.html +++ b/resources/ObjectExternal/AiMonitoring/FRA/HTML.html @@ -18,7 +18,7 @@

Paramètres de l'IA

{{/right_column}} - + {{#providerFields.length}}

Paramètres spécifiques pour {{provider}}

@@ -30,7 +30,7 @@

Paramètres spécifiques pour {{provider}}

{{/providerFields}}
- + {{/providerFields.length}}
"; private static final String DOMAIN="Domain"; private boolean displayPrefixWarning = false; - - /** * This method is used to generate the HTML content for the chat bot. @@ -377,6 +377,7 @@ private String formatAnswerAI(String answer){ } @Override public Message preValidate(ActivityFile context) { + if(ACTIVITY_CREATE_MODULE.equals(context.getActivity().getStep()) && !displayPrefixWarning){ Object prefix = getContext(getActivity(ACTIVITY_CREATE_MODULE)).getDataValue(FIELD, MDL_PREFIX_FIELD); ObjectDB obj = getGrant().getTmpObject("Module"); From f3a0a46a3a1cd6df8c6447438a968d415e968e50 Mon Sep 17 00:00:00 2001 From: "designer (Designer)" <> Date: Wed, 17 Jul 2024 18:03:30 +0200 Subject: [PATCH 24/74] fix of ping error display --- module-info.json | 2 +- .../ObjectExternal/AiMonitoring/HTML.html | 4 +-- .../ObjectExternal/AiMonitoring/SCRIPT.js | 5 ++- .../commons/AIBySimplicite/AITools.java | 36 ++++++++++--------- .../AIBySimplicite/AIModuleCreate.java | 4 --- 5 files changed, 26 insertions(+), 25 deletions(-) diff --git a/module-info.json b/module-info.json index 8a34f31..604a839 100644 --- a/module-info.json +++ b/module-info.json @@ -1,5 +1,5 @@ { - "date": "2024-07-17 16:56:33", + "date": "2024-07-17 18:00:33", "name": "AIBySimplicite", "format": "json", "files": ["AIBySimplicite.json"], diff --git a/resources/ObjectExternal/AiMonitoring/HTML.html b/resources/ObjectExternal/AiMonitoring/HTML.html index 86bcf39..0c80aea 100644 --- a/resources/ObjectExternal/AiMonitoring/HTML.html +++ b/resources/ObjectExternal/AiMonitoring/HTML.html @@ -18,7 +18,7 @@

AI parameters

{{/right_column}} - {{#providerFields}} + {{#providerFields.length}}

Specific Parameters for {{provider}}

@@ -30,7 +30,7 @@

Specific Parameters for {{provider}}

{{/providerFields}}
- {{/providerFields}} + {{/providerFields.length}}
"; } + public String testFucntion(){ + return "test1"; + } } \ No newline at end of file diff --git a/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java b/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java index 4bec21b..431ce30 100644 --- a/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java +++ b/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java @@ -372,8 +372,20 @@ private String formatAnswerAI(String answer){ return answer.replaceAll("(\r\n|\n)", "
"); } @Override + public Message preAbandon() { + Activity act = getActivity("GGD-END"); + getContext(act).setDataFile("Forward", "Page", "ui/AiMonitoring"); + return super.preAbandon(); + } + public String noParam(Processus p, ActivityFile context, ObjectContextWeb ctx, Grant g){ + return getGrant().T("AI_SETTING_NEED"); + } + @Override public Message preValidate(ActivityFile context) { - + if("AIC_0050".equals(context.getActivity().getStep())){ + context.setDataFile("Return","Code", AITools.isAIParam()?"1":"0"); + AppLog.info(context.getDataValue("Return","Code"), getGrant()); + } if(ACTIVITY_CREATE_MODULE.equals(context.getActivity().getStep()) && !displayPrefixWarning){ Object prefix = getContext(getActivity(ACTIVITY_CREATE_MODULE)).getDataValue(FIELD, MDL_PREFIX_FIELD); ObjectDB obj = getGrant().getTmpObject("Module"); From e76e201d62e739f833dcf3b699013fcef5b07a88 Mon Sep 17 00:00:00 2001 From: "designer (Designer)" <> Date: Thu, 18 Jul 2024 18:30:14 +0200 Subject: [PATCH 27/74] fix mandatory gen module --- AIBySimplicite.json | 4 ++-- files/Model/Model-AIModuleCreate.png | Bin 91610 -> 91609 bytes files/Model/Model-AIModuleCreate.svg | 2 +- module-info.json | 2 +- .../commons/AIBySimplicite/AIModel.java | 3 +++ .../workflows/AIBySimplicite/AIGenData.java | 6 +++++- .../AIBySimplicite/AIModuleCreate.java | 11 +++++++---- 7 files changed, 19 insertions(+), 9 deletions(-) diff --git a/AIBySimplicite.json b/AIBySimplicite.json index 86649a9..1ab3b09 100644 --- a/AIBySimplicite.json +++ b/AIBySimplicite.json @@ -4636,7 +4636,7 @@ "dta_group": "Constraint", "dta_name": "Mandatory", "dta_order": 1, - "dta_value": "true", + "dta_value": "false", "dta_field_id__fld_name": null, "row_module_id__mdl_name": "AIBySimplicite" } @@ -4681,7 +4681,7 @@ "dta_group": "Constraint", "dta_name": "Mandatory", "dta_order": 1, - "dta_value": "true", + "dta_value": "false", "dta_field_id__fld_name": null, "row_module_id__mdl_name": "AIBySimplicite" } diff --git a/files/Model/Model-AIModuleCreate.png b/files/Model/Model-AIModuleCreate.png index e5ee1b752dbca9f8d4edde47e0ac3a60e6151915..a0a4998c7613469da6128b6846fd06fc1ad1b7e7 100644 GIT binary patch literal 91609 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

Helper table
Valeur du champ
Hu3BA#DgRC>=I054~M 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 Cj8a+v literal 28807 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 diff --git a/files/Model/Model-AiSettingsProcess.svg b/files/Model/Model-AiSettingsProcess.svg index 48f15c4..800bdd2 100644 --- a/files/Model/Model-AiSettingsProcess.svg +++ b/files/Model/Model-AiSettingsProcess.svg @@ -1 +1 @@ -(0)(1)SelectProviderAuthOtherParamBeginEndisGlobalParamGlobal \ No newline at end of file +(0)(1)SelectProviderAuthOtherParamBeginEndisGlobalParamGlobal \ No newline at end of file diff --git a/module-info.json b/module-info.json index 7f742e9..ec0506e 100644 --- a/module-info.json +++ b/module-info.json @@ -1,9 +1,9 @@ { - "date": "2024-07-24 11:00:38", + "date": "2024-07-25 15:23:52", "name": "AIBySimplicite", "format": "json", "files": ["AIBySimplicite.json"], "repository": {"origin": {"uri": "https://github.com/simplicitesoftware/module_ai.git"}}, - "version": "0.13", + "version": "0.14", "platform": "6.1.0" } \ No newline at end of file diff --git a/pom.xml b/pom.xml index 735315e..ee323fc 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 4.0.0 com.simplicite.modules - 0.13-SNAPSHOT + 0.14-SNAPSHOT AIBySimplicite AIBySimplicite Simplicite module: AIBySimplicite @@ -19,7 +19,7 @@ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 11 simplicite-modules-AIBySimplicite AIBySimplicite - 0.13 + 0.14 src,resources AIBySimplicite.xml,AIBySimplicite.json,AIBySimplicite-*.yml,configuration/**,**.min.js,**.min.css resources/**.js,src/**.java diff --git a/resources/ObjectExternal/AIMetricsChat/SCRIPT.js b/resources/ObjectExternal/AIMetricsChat/SCRIPT.js index dcb4c88..eb5daec 100644 --- a/resources/ObjectExternal/AIMetricsChat/SCRIPT.js +++ b/resources/ObjectExternal/AIMetricsChat/SCRIPT.js @@ -6,11 +6,12 @@ var AIMetricsChat = AIMetricsChat || (function() { let userName = "user"; let moduleName = ""; let lastScript = ""; - + let lastText =""; + let url = Simplicite.ROOT+"/ext/AIRestAPI"; // authenticated webservice + let useAsync = true; function render(params,module,s) { // set button text moduleName = module; - console.log("AIMetricsChat render: "+moduleName); $('#metrics_user_text').click(function() { showWarn();}); app.getTexts(function(textes){ let actLabel = textes?.AiSaveAsCrosstableAction||""; @@ -39,7 +40,6 @@ var AIMetricsChat = AIMetricsChat || (function() { } function sendMetricsMessage(){ - console.log("sendMetricsMessage: "+swagger); let isCancelled = false; $('#metrics_cancel_button').show(); $('#metrics_cancel_button').click(function() { @@ -65,91 +65,9 @@ var AIMetricsChat = AIMetricsChat || (function() { let params = {prompt:input, reqType:"metrics",swagger:swagger,lang:app.grant.lang}; $('#metrics_messages').append(userTemplateMetrics.replace('{{msg}}',input)); $('#metrics_messages').append(botTemplateMetrics); - let url = Simplicite.ROOT+"/ext/AIRestAPI"; - let useAsync = true; + lastText = ""; app._call(useAsync, url, params, function callback(botResponse){ - if(isCancelled){ - - return; - } - - if(botResponse.html == null && botResponse.js == null && botResponse.text != null){ - $('#metrics_messages .bot-messages:last .msg').text(botResponse.text.replace(/\\n/g, "
")); - return; - } - if(botResponse.error !=null || ((botResponse.js == null && !botResponse?.html?.includes("script")))){ - $('#metrics_messages .bot-messages:last .msg').text("Sorry, I can't understand your request. Please try again."); - - return; - } - if(botResponse.text == null){ - botResponse.text = ""; - } - $('#metrics_messages .bot-messages:last .msg').text(botResponse.text.replace(/\\n/g, "
")); - $('#ia_html').html(botResponse.html); - - if(botResponse.js != ""){ - try { - eval(botResponse.js); - //check if function is auto call - if(botResponse.js.indexOf(botResponse.function) == -1) { - eval(botResponse.function); - } - lastScript = botResponse.js; - - }catch(e){ - console.log("AI Generated scritp error: "+e); - console.log("On script: \n"+botResponse.js); - /* String error = params.getParameter("error"); - lang = params.getParameter("lang"); - String script = params.getParameter("script"); - String html = params.getParameter("html"); */ - params = {prompt:input, reqType:"errorMetricsSolver",swagger:swagger,lang:app.grant.lang,error:e,script:botResponse.js,html:botResponse.html}; - app._call(useAsync, url, params, function callback(botResponse){ - console.log("retry: "); - //reOpenChat(); - if(botResponse.html == null && botResponse.js == null && botResponse.text != null){ - $('#metrics_messages .bot-messages:last .msg').text(botResponse.text.replace(/\\n/g, "
")); - return; - } - if(botResponse.error !=null || ((botResponse.js == null && !botResponse?.html?.includes("script")))){ - $('#metrics_messages .bot-messages:last .msg').text("Sorry, I can't understand your request. Please try again."); - - return; - } - if(botResponse.text == null){ - botResponse.text = ""; - } - $('#metrics_messages .bot-messages:last .msg').text(botResponse.text.replace(/\\n/g, "
")); - $('#ia_html').html(botResponse.html); - if(botResponse.js != ""){ - try { - eval(botResponse.js); - //check if function is auto call - if(botResponse.js.indexOf(botResponse.function) == -1) { - eval(botResponse.function); - } - lastScript = botResponse.js; - - }catch(e){ - console.log("AI Generated scritp error: "+e); - console.log("On script: \n"+botResponse.js); - $('#metrics_messages .bot-messages:last .msg').text("Sorry, I can't understand your request. Please try again."); - } - }else{ - lastScript = $("#ia_html script").text(); - reOpenChat(); - } - }); - - - }finally{ - reOpenChat(); - } - }else{ - lastScript = $("#ia_html script").text(); - reOpenChat(); - } + processResponse(botResponse,true,isCancelled,params); // Définir les options globales pour Chart.js Chart.defaults.responsive = true; Chart.defaults.maintainAspectRatio = false; @@ -159,6 +77,7 @@ var AIMetricsChat = AIMetricsChat || (function() { } function reOpenChat(){ + console.log("Reopen chat"); $('#metrics_user_text').prop('disabled', false); $('#metrics_send_button').show(); $('#metrics_send_button').prop('disabled', false); @@ -179,27 +98,84 @@ var AIMetricsChat = AIMetricsChat || (function() { function saveAsCrosstable(){ let func = lastScript; - console.log("callProcess: "+func); let params = {reqType:"saveMetrics",swagger:swagger,moduleName:moduleName,function:func,ctx:"$('#ia_html')"}; - let url = Simplicite.ROOT+"/ext/AIRestAPI"; - - let useAsync = true; app._call(useAsync, url, params, function callback(botResponse){ - console.log(botResponse); eval(botResponse.script); }); } function setBotName(){ - let url = Simplicite.ROOT+"/ext/AIRestAPI"; // authenticated webservice let postParams = {"reqType":"BOT_NAME"}; app._call(false, url, postParams, function callback(botResponse){ - console.log(botResponse); let param = botResponse.botName; botTemplateMetrics = botTemplateMetrics.replace("{{botName}}",param); return true; }); return false; } + function processResponse(botResponse,recall,isCancelled,params){ + if(isCancelled){ + return; + } + if(!hasJS(botResponse)){ + return; + } + if(botResponse.text == null){ + botResponse.text = ""; + }else if(botResponse.text != "" && lastText == ""){ + lastText = botResponse.text; + } + $('#ia_html').html(botResponse.html); + + if(botResponse.js != ""){ + try { + eval(botResponse.js); + + //check if function is auto call + if(botResponse.js.indexOf(botResponse.function) == -1) { + eval(botResponse.function); + } + lastScript = botResponse.js; + + $('#metrics_messages .bot-messages:last .msg').text(lastText.replace(/\\n/g, "
")); + reOpenChat(); + }catch(e){ + console.log("Error on script: "+botResponse.js); + console.log("Error: "+e); + if(recall){ + + console.log("Recall process with errorMetricsSolver"); + params.reqType = "errorMetricsSolver"; + params.error = e.toString(); + params.script = botResponse.js; + params.html = botResponse.html; + console.log(params); + app._call(useAsync, url, params, function callback(botResponse){ + processResponse(botResponse,false,isCancelled); + }); + }else{ + $('#metrics_messages .bot-messages:last .msg').text("Sorry, I can't understand your request. Please try again."); + reOpenChat(); + } + } + }else{ + lastScript = $("#ia_html script").text(); + reOpenChat(); + } + + } + function hasJS(botResponse){ + if(botResponse.error !=null || ((botResponse.js == null && !botResponse?.html?.includes("script")))){ + $('#metrics_messages .bot-messages:last .msg').text("Sorry, I can't understand your request. Please try again."); + return false; + } + + if(botResponse.html == null && botResponse.js == null && botResponse.text != null){ + $('#metrics_messages .bot-messages:last .msg').text(botResponse.text.replace(/\\n/g, "
")); + return false; + } + + return true; + } return { render: render ,sendMetricsMessage:sendMetricsMessage,saveAsCrosstable:saveAsCrosstable}; })(); \ No newline at end of file diff --git a/resources/ObjectExternal/AIProcessResource/AI_GEN_MODEL.js b/resources/ObjectExternal/AIProcessResource/AI_GEN_MODEL.js index 82b1a7b..17a62c4 100644 --- a/resources/ObjectExternal/AIProcessResource/AI_GEN_MODEL.js +++ b/resources/ObjectExternal/AIProcessResource/AI_GEN_MODEL.js @@ -84,8 +84,7 @@ var aiGenModel = aiGenModel || (function() { } }); } - function choiceModel(list){ - console.log("choiceModel ",list); + function choiceModel(list){ $(".extern").append("
"); $("#modeler").append("
"); $("#choice").css("display","grid"); diff --git a/resources/ObjectExternal/AiMonitoring/FRA/HTML.html b/resources/ObjectExternal/AiMonitoring/FRA/HTML.html index 62bab77..b62910a 100644 --- a/resources/ObjectExternal/AiMonitoring/FRA/HTML.html +++ b/resources/ObjectExternal/AiMonitoring/FRA/HTML.html @@ -1,22 +1,16 @@ diff --git a/resources/ObjectExternal/AiMonitoring/HTML.html b/resources/ObjectExternal/AiMonitoring/HTML.html index 39f0d2a..27342a0 100644 --- a/resources/ObjectExternal/AiMonitoring/HTML.html +++ b/resources/ObjectExternal/AiMonitoring/HTML.html @@ -1,22 +1,16 @@ diff --git a/resources/ObjectExternal/AiMonitoring/HTML.html b/resources/ObjectExternal/AiMonitoring/HTML.html index 27342a0..87c055e 100644 --- a/resources/ObjectExternal/AiMonitoring/HTML.html +++ b/resources/ObjectExternal/AiMonitoring/HTML.html @@ -25,11 +25,11 @@

Specific Parameters for {{provider}}

{{/providerFields.length}} -
+
+ Ping ...
diff --git a/resources/ObjectExternal/AiMonitoring/SCRIPT.js b/resources/ObjectExternal/AiMonitoring/SCRIPT.js index 510dd40..f19e078 100644 --- a/resources/ObjectExternal/AiMonitoring/SCRIPT.js +++ b/resources/ObjectExternal/AiMonitoring/SCRIPT.js @@ -1,4 +1,6 @@ var AiMonitoring = (function() { + let url = Simplicite.ROOT+"/ext/AIRestAPI"; // authenticated webservice + let useAsync = true; // use async callback pattern function render(params,aiParams) { let templateContent = $('#AiMonitoringTemplate').html(); @@ -14,9 +16,15 @@ var AiMonitoring = (function() { } + } + function ping(){ + let postParams = {"reqType":"ping"}; + $ui.getApp()._call(useAsync, url, postParams, function callback(response){ + renderPingBannerAndChatBot(response.msg); + }); } function renderPingBannerAndChatBot(msg){ - + console.log(msg); msg = msg.replaceAll("/", "/"); msg = msg.replaceAll("'", "'"); msg = msg.replaceAll("<", "<"); @@ -24,7 +32,8 @@ var AiMonitoring = (function() { let jsonMsg = $ui.getApp().messageToJson(msg); let ctn = $("#ping_banner"); - if(jsonMsg?.level == "I"){ + ctn.removeClass("loading_ping_banner"); + if(jsonMsg?.level == "I"){ ctn.addClass("alert-success"); displayChatbot(true); }else if(jsonMsg?.level == "W"){ @@ -59,6 +68,6 @@ var AiMonitoring = (function() { $("#panel_AIMonitoring_3").hide(); } } - return { render: render,renderAINotParam:renderAINotParam,renderPingBannerAndChatBot:renderPingBannerAndChatBot}; + return { render: render,renderAINotParam:renderAINotParam,ping:ping}; })(); \ No newline at end of file diff --git a/resources/ObjectExternal/AiMonitoring/STYLES.less b/resources/ObjectExternal/AiMonitoring/STYLES.less index 046d0a1..600492c 100644 --- a/resources/ObjectExternal/AiMonitoring/STYLES.less +++ b/resources/ObjectExternal/AiMonitoring/STYLES.less @@ -46,7 +46,10 @@ max-width: 800px; text-align: center; font-weight: bold; - + } + .loading_ping_banner { + color: black; + background-color: #ccc; } .ping_banner_url { diff --git a/src/com/simplicite/commons/AIBySimplicite/AITools.java b/src/com/simplicite/commons/AIBySimplicite/AITools.java index 98ca767..2874d6b 100644 --- a/src/com/simplicite/commons/AIBySimplicite/AITools.java +++ b/src/com/simplicite/commons/AIBySimplicite/AITools.java @@ -1120,7 +1120,8 @@ public static boolean isAIParam(){ return isAIParam(true); } public static boolean isAIParam(boolean checkPing){ - String ping = pingAI(); + String ping = ""; + if(checkPing) ping = pingAI(); return !(Tool.isEmpty(aiApiParam)|| Tool.isEmpty(completionUrl) || (checkPing && (!"/".equals(aiApiParam.optString("ping_url","/")) && !PING_SUCCESS.equals(ping)))); } public static String getBotName(){ @@ -1158,12 +1159,6 @@ public static JSONObject getParameters(boolean forDisplay,String lang){ ); newParam.put(PROVIDER_KEY, aiProvider); newParam.put("providerFields", specificParam); - String ping = pingAI(); - boolean isSuccess = PING_SUCCESS.equals(ping); - if(isSuccess){ - ping = Message.formatInfo("AI_SUCCESS_PING",null,null); - } - newParam.put("ping",ping); newParam.put("isConfigurable",isConfigurable()); return newParam; } diff --git a/src/com/simplicite/commons/AIBySimplicite/AiMetrics.java b/src/com/simplicite/commons/AIBySimplicite/AiMetrics.java index daad924..335f513 100644 --- a/src/com/simplicite/commons/AIBySimplicite/AiMetrics.java +++ b/src/com/simplicite/commons/AIBySimplicite/AiMetrics.java @@ -131,6 +131,10 @@ private static String getFunctionCall(String regexJSResult) { } return Tool.isEmpty(functionName)?"":functionName+"();"; } + public static JSONObject getReformulatePrompt(String prompt){ + JSONObject res = AITools.aiCaller(null, "You help formulate a prompt for an graph-generating AI. Responce in language of prompt. With an introductory sentence ",prompt,true,false); + return new JSONObject().put("text",AITools.parseJsonResponse(res)); + } private static String getCanvasHTML(String js) { String regex = "getElementById\\(['\"]([a-zA-Z_$][a-zA-Z\\d_-]*)['\"]\\)\\.getContext\\(['\"].*['\"]\\)"; Pattern pattern = Pattern.compile(regex); diff --git a/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java b/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java index 406335d..6a55977 100644 --- a/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java +++ b/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java @@ -49,8 +49,17 @@ public Object post(Parameters params) throws HTTPException { String script = params.getParameter("script"); String html = params.getParameter("html"); return AiMetrics.recallWithError(prompt, lang, swagger,script,html, error); + case "reformulateMetrics": + return AiMetrics.getReformulatePrompt(prompt); case "BOT_NAME": return new JSONObject().put("botName",AITools.getBotName()); + case "ping": + String ping = AITools.pingAI(); + boolean isSuccess = AITools.PING_SUCCESS.equals(ping); + if(isSuccess){ + ping = Message.formatInfo("AI_SUCCESS_PING",null,null); + } + return new JSONObject().put("msg",ping); default: if(Tool.isEmpty(prompt) && !Tool.isEmpty(req) && req.has(PARAMS_PROMPT_KEY)){ return updateFieldByRequest(req); From 98c159c61faf3c623f6b36c3a1d460e78ac35a96 Mon Sep 17 00:00:00 2001 From: "cbi (Candice Bimont)" Date: Mon, 19 Aug 2024 18:27:47 +0200 Subject: [PATCH 43/74] take picture in Module gen --- AIBySimplicite-openapi-3.0.2.yml | 4 ++-- AIBySimplicite-swagger-2.0.yml | 4 ++-- AIBySimplicite.json | 2 +- module-info.json | 4 ++-- pom.xml | 4 ++-- .../AIProcessResource/CHAT_BOT_MODEL.html | 4 +++- .../AIProcessResource/CHAT_BOT_SCRIPT.js | 12 +++++++++++- 7 files changed, 23 insertions(+), 11 deletions(-) diff --git a/AIBySimplicite-openapi-3.0.2.yml b/AIBySimplicite-openapi-3.0.2.yml index 0d56909..69a912e 100644 --- a/AIBySimplicite-openapi-3.0.2.yml +++ b/AIBySimplicite-openapi-3.0.2.yml @@ -2,7 +2,7 @@ # / __(_)_ __ _ __| (_)__(_) |_ /_/ # \__ \ | ' \| '_ \ | / _| | _/ -_) # |___/_|_|_|_| .__/_|_\__|_|\__\___| -# |_| Module: AIBySimplicite 0.19 +# |_| Module: AIBySimplicite 0.20 components: schemas: Error404: @@ -526,7 +526,7 @@ info: email: contact@simplicitesoftware.com description: API for module AIBySimplicite title: AIBySimplicite - version: '0.19' + version: '0.20' tags: - name: AIProvider description: Provider diff --git a/AIBySimplicite-swagger-2.0.yml b/AIBySimplicite-swagger-2.0.yml index d77a910..ee3c71d 100644 --- a/AIBySimplicite-swagger-2.0.yml +++ b/AIBySimplicite-swagger-2.0.yml @@ -2,7 +2,7 @@ # / __(_)_ __ _ __| (_)__(_) |_ /_/ # \__ \ | ' \| '_ \ | / _| | _/ -_) # |___/_|_|_|_| .__/_|_\__|_|\__\___| -# |_| Module: AIBySimplicite 0.19 +# |_| Module: AIBySimplicite 0.20 basePath: /api paths: /login: @@ -468,7 +468,7 @@ info: email: contact@simplicitesoftware.com description: API for module AIBySimplicite title: AIBySimplicite - version: '0.19' + version: '0.20' tags: - name: AIProvider description: Provider diff --git a/AIBySimplicite.json b/AIBySimplicite.json index a4fa39a..cedaed9 100644 --- a/AIBySimplicite.json +++ b/AIBySimplicite.json @@ -4,7 +4,7 @@ "item": { "mdl_name": "AIBySimplicite", "mdl_prefix": "ai", - "mdl_version": "0.19", + "mdl_version": "0.20", "mdl_type": "T", "mdl_icon": null, "mdl_url": "{\n \"origin\": {\"uri\": \"https://github.com/simplicitesoftware/module_ai.git\"},\n \"type\": \"git\",\n \"branch\": \"6.1\"\n}", diff --git a/module-info.json b/module-info.json index f1667c2..a5ca5b7 100644 --- a/module-info.json +++ b/module-info.json @@ -1,9 +1,9 @@ { - "date": "2024-08-19 16:54:35", + "date": "2024-08-19 18:24:44", "name": "AIBySimplicite", "format": "json", "files": ["AIBySimplicite.json"], "repository": {"origin": {"uri": "https://github.com/simplicitesoftware/module_ai.git"}}, - "version": "0.19", + "version": "0.20", "platform": "6.1.2" } \ No newline at end of file diff --git a/pom.xml b/pom.xml index 86d1ea5..726d428 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 4.0.0 com.simplicite.modules - 0.19-SNAPSHOT + 0.20-SNAPSHOT AIBySimplicite AIBySimplicite Simplicite module: AIBySimplicite @@ -19,7 +19,7 @@ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 11 simplicite-modules-AIBySimplicite AIBySimplicite - 0.19 + 0.20 src,resources AIBySimplicite.xml,AIBySimplicite.json,AIBySimplicite-*.yml,configuration/**,**.min.js,**.min.css resources/**.js,src/**.java diff --git a/resources/ObjectExternal/AIProcessResource/CHAT_BOT_MODEL.html b/resources/ObjectExternal/AIProcessResource/CHAT_BOT_MODEL.html index e31cbf8..d655122 100644 --- a/resources/ObjectExternal/AIProcessResource/CHAT_BOT_MODEL.html +++ b/resources/ObjectExternal/AIProcessResource/CHAT_BOT_MODEL.html @@ -16,7 +16,9 @@
- + + +
diff --git a/resources/ObjectExternal/AIProcessResource/CHAT_BOT_SCRIPT.js b/resources/ObjectExternal/AIProcessResource/CHAT_BOT_SCRIPT.js index 669f66c..c0f6b19 100644 --- a/resources/ObjectExternal/AIProcessResource/CHAT_BOT_SCRIPT.js +++ b/resources/ObjectExternal/AIProcessResource/CHAT_BOT_SCRIPT.js @@ -32,7 +32,10 @@ var AIWfChatBot = AIWfChatBot || (function() { resizeUp(); }); // add url to img bootstrap $ui.getApp().getIconURL("icon/color/camera"); - $("#add-img-icon").attr("src", $ui.getApp().getIconURL("icon/color/camera")); + $("#add-img").addClass("fas fa-upload"); + $("#take-img").addClass("fas fa-camera"); + /* $("#add-img-icon").attr("src", $ui.getApp().getIconURL("fas/upload")); + $("#take-img-icon").attr("src", $ui.getApp().getIconURL("fas/camera")); */ botTemplate = $("#botTemplate").html(); userTemplate = $("#userTemplate").html(); setBotName(); @@ -154,6 +157,12 @@ var AIWfChatBot = AIWfChatBot || (function() { }; input.click(); } + async function takeImage(){ + let input =await $view.widget.takePicture({title: $T('TAKE_PICT'),facingMode: "environment"}); + $("#input-img img").attr("src", input); + $("#input-img").show(); + resizeUp(); + } function setBotName(){ let url = Simplicite.ROOT+"/ext/AIRestAPI"; // authenticated webservice let postParams = {"reqType":"BOT_NAME"}; @@ -168,6 +177,7 @@ var AIWfChatBot = AIWfChatBot || (function() { return { sendModuleMessage: sendModuleMessage, addImage: addImage, + takeImage: takeImage, render: render, resizeUp: resizeUp }; From f4eb81e096bbfcf655b26f08b2c3b778befb2007 Mon Sep 17 00:00:00 2001 From: "cbi (Candice Bimont)" Date: Wed, 4 Sep 2024 15:53:56 +0200 Subject: [PATCH 44/74] Chatbot contextualised by scope --- AIBySimplicite-openapi-3.0.2.yml | 1190 ++- AIBySimplicite-swagger-2.0.yml | 1009 ++- AIBySimplicite.json | 7744 ++++++++++++----- README.md | 66 + module-info.json | 6 +- pom.xml | 4 +- resources/ObjectExternal/AIChatBot/SCRIPT.js | 4 +- .../ObjectExternal/AIMetricsChat/HTML.html | 8 + .../ObjectExternal/AIMetricsChat/SCRIPT.js | 80 +- .../AIProcessResource/CHAT_BOT_SCRIPT.js | 3 - .../AI_DOMAIN_TEMPLATE_DESC_ENU.text | 42 + .../AI_DOMAIN_TEMPLATE_DESC_FRA.text | 47 + .../AiGroupGuiDesc/AI_FORM_ZONE_DESC_ENU.text | 17 + .../AiGroupGuiDesc/AI_FORM_ZONE_DESC_FRA.text | 17 + .../ObjectInternal/AiMetricsHist/SCRIPT.js | 22 + .../commons/AIBySimplicite/AIModel.java | 12 + .../commons/AIBySimplicite/AITools.java | 25 +- .../commons/AIBySimplicite/AiMetrics.java | 1 + .../extobjects/AIBySimplicite/AIChatBot.java | 48 +- .../AIBySimplicite/AIMetricsChat.java | 2 +- .../extobjects/AIBySimplicite/AIRestAPI.java | 4 + .../AIBySimplicite/AiGroupGuiDesc.java | 430 + .../AIBySimplicite/AIModuleCreate.java | 51 +- 23 files changed, 8464 insertions(+), 2368 deletions(-) create mode 100644 resources/ObjectInternal/AiGroupGuiDesc/AI_DOMAIN_TEMPLATE_DESC_ENU.text create mode 100644 resources/ObjectInternal/AiGroupGuiDesc/AI_DOMAIN_TEMPLATE_DESC_FRA.text create mode 100644 resources/ObjectInternal/AiGroupGuiDesc/AI_FORM_ZONE_DESC_ENU.text create mode 100644 resources/ObjectInternal/AiGroupGuiDesc/AI_FORM_ZONE_DESC_FRA.text create mode 100644 resources/ObjectInternal/AiMetricsHist/SCRIPT.js create mode 100644 src/com/simplicite/objects/AIBySimplicite/AiGroupGuiDesc.java diff --git a/AIBySimplicite-openapi-3.0.2.yml b/AIBySimplicite-openapi-3.0.2.yml index 69a912e..a8f9052 100644 --- a/AIBySimplicite-openapi-3.0.2.yml +++ b/AIBySimplicite-openapi-3.0.2.yml @@ -2,7 +2,7 @@ # / __(_)_ __ _ __| (_)__(_) |_ /_/ # \__ \ | ' \| '_ \ | / _| | _/ -_) # |___/_|_|_|_| .__/_|_\__|_|\__\___| -# |_| Module: AIBySimplicite 0.20 +# |_| Module: AIBySimplicite 0.22 components: schemas: Error404: @@ -16,22 +16,57 @@ components: type: integer enum: - 404 - ActionResult: + AiGroupGuiDesc: type: object properties: - result: - description: Action result + aiGgdDescription: + description: Description type: string - ArrayOfAIProvider: - type: array - items: - $ref: '#/components/schemas/AIProvider' - TreeviewData: + aiGgdLang: + description: Language + type: string + enum: + - ENU + - FRA + aiGgdViewhomeId__viw_name: + description: Scope + type: string + aiGgdViewhomeId: + description: Home page + type: string + row_id: + description: Unique technical row ID + type: string + AiGroupView: type: object properties: - item: - description: Object item with lists of linked objects' items - type: object + aiAigroupviewUsed: + description: GUIDescription + type: boolean + aiGroupGuiDescId__aiGgdViewhomeId__viw_name: + description: Group gui desc id Home page Name + type: string + aiGroupGuiDescId__aiGgdLang: + description: Group gui desc id Language + type: string + enum: + - ENU + - FRA + row_id: + description: Unique technical row ID + type: string + aiGroupGuiDescId__aiGgdViewhomeId: + description: Group gui desc id Home page + type: string + aiGroupId: + description: aiGroupId + type: string + aiGroupGuiDescId: + description: Group gui desc id + type: string + aiGroupId__grp_name: + description: Group name + type: string PublicationResult: type: object properties: @@ -62,6 +97,37 @@ components: label3: description: 'Label #3' type: string + PlaceMapData: + type: object + properties: + places: + description: Places + type: array + items: + $ref: '#/components/schemas/PlaceData' + name: + description: Name + type: string + ActionResult: + type: object + properties: + result: + description: Action result + type: string + ArrayOfAIProvider: + type: array + items: + $ref: '#/components/schemas/AIProvider' + TreeviewData: + type: object + properties: + item: + description: Object item with lists of linked objects' items + type: object + ArrayOfAiGroupGuiDesc: + type: array + items: + $ref: '#/components/schemas/AiGroupGuiDesc' Error400: type: object properties: @@ -95,17 +161,10 @@ components: type: integer enum: - 500 - PlaceMapData: - type: object - properties: - places: - description: Places - type: array - items: - $ref: '#/components/schemas/PlaceData' - name: - description: Name - type: string + ArrayOfAiGroupView: + type: array + items: + $ref: '#/components/schemas/AiGroupView' AIProvider: type: object properties: @@ -144,6 +203,41 @@ components: type: integer enum: - 403 + AiMetricsHist: + type: object + properties: + aiMhPrompt: + description: Title + type: string + aiMhCreateOn: + description: Mh create on + type: string + example: yyyy-MM-dd HH:mm:ss + aiMhSimpleuserId: + description: Mh simpleuser id + type: string + aiMhSimpleuserId__usr_login: + description: Login + type: string + aiMhModuleId__mdl_name: + description: Module name + type: string + aiMhMetrics: + description: Mh metrics + type: string + row_id: + description: Unique technical row ID + type: string + aiMhModuleId: + description: Mh module id + type: string + aiMhPreview: + description: Preview + type: string + ArrayOfAiMetricsHist: + type: array + items: + $ref: '#/components/schemas/AiMetricsHist' securitySchemes: basicAuth: scheme: basic @@ -156,6 +250,194 @@ servers: - url: /api openapi: 3.0.2 paths: + /rest/AiMetricsHist: + get: + summary: Search AiMetricsHist business object records or get contextualized + metadata + security: + - bearerAuth: [] + operationId: obj-aimetricshist-search + responses: + '200': + description: Success in searching business object records (or in getting + contextualized business object metadata, documentation, ...) + content: + application/json: + schema: + $ref: '#/components/schemas/ArrayOfAiMetricsHist' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error401' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error500' + parameters: + - schema: + type: boolean + in: query + name: _metadata + description: Metadata? + required: false + - schema: + type: boolean + in: query + name: _count + description: Count? + required: false + - schema: + type: boolean + in: query + name: _doc + description: Documentation? + required: false + - schema: + type: string + in: query + name: aiMhSimpleuserId + description: Search filter for Mh simpleuser id + required: false + - schema: + type: string + in: query + name: aiMhSimpleuserId__usr_login + description: Search filter for Login + required: false + - schema: + type: string + in: query + name: aiMhCreateOn + description: Search filter for Mh create on + required: false + - schema: + type: string + in: query + name: aiMhModuleId + description: Search filter for Mh module id + required: false + - schema: + type: string + in: query + name: aiMhModuleId__mdl_name + description: Search filter for Module name + required: false + - schema: + type: string + in: query + name: aiMhMetrics + description: Search filter for Mh metrics + required: false + - schema: + type: string + in: query + name: aiMhPreview + description: Search filter for Preview + required: false + - schema: + type: string + in: query + name: aiMhPrompt + description: Search filter for Title + required: false + tags: + - AiMetricsHist + /rest/AiGroupView: + get: + summary: Search AiGroupView business object records or get contextualized metadata + security: + - bearerAuth: [] + operationId: obj-aigroupview-search + responses: + '200': + description: Success in searching business object records (or in getting + contextualized business object metadata, documentation, ...) + content: + application/json: + schema: + $ref: '#/components/schemas/ArrayOfAiGroupView' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error401' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error500' + parameters: + - schema: + type: boolean + in: query + name: _metadata + description: Metadata? + required: false + - schema: + type: boolean + in: query + name: _count + description: Count? + required: false + - schema: + type: boolean + in: query + name: _doc + description: Documentation? + required: false + - schema: + type: string + in: query + name: aiGroupGuiDescId + description: Search filter for Group gui desc id + required: false + - schema: + type: string + in: query + name: aiGroupGuiDescId__aiGgdViewhomeId + description: Search filter for Group gui desc id Home page + required: false + - schema: + type: string + in: query + name: aiGroupGuiDescId__aiGgdViewhomeId__viw_name + description: Search filter for Group gui desc id Home page Name + required: false + - schema: + type: string + enum: + - ENU + - FRA + in: query + name: aiGroupGuiDescId__aiGgdLang + description: Search filter for Group gui desc id Language + required: false + - schema: + type: string + in: query + name: aiGroupId + description: Search filter for aiGroupId + required: false + - schema: + type: string + in: query + name: aiGroupId__grp_name + description: Search filter for Group name + required: false + - schema: + type: boolean + in: query + name: aiAigroupviewUsed + description: Search filter for GUIDescription + required: false + tags: + - AiGroupView /login: get: summary: Login (obtain bearer token) @@ -206,24 +488,24 @@ paths: $ref: '#/components/schemas/Error401' tags: - session - /rest/AIProvider/{row_id}: + /rest/AiMetricsHist/{row_id}: post: - summary: Create a new AIProvider business object record + summary: Create a new AiMetricsHist business object record security: - bearerAuth: [] requestBody: content: application/json: schema: - $ref: '#/components/schemas/AIProvider' - operationId: obj-aiprovider-create + $ref: '#/components/schemas/AiMetricsHist' + operationId: obj-aimetricshist-create responses: '200': description: Success in creating a new business object record content: application/json: schema: - $ref: '#/components/schemas/AIProvider' + $ref: '#/components/schemas/AiMetricsHist' '400': description: Bad request content: @@ -250,19 +532,19 @@ paths: description: Row ID (or empty or _ for all row IDs) required: true tags: - - AIProvider + - AiMetricsHist get: - summary: Get a AIProvider business object record + summary: Get a AiMetricsHist business object record security: - bearerAuth: [] - operationId: obj-aiprovider-get + operationId: obj-aimetricshist-get responses: '200': description: Success in getting a single business object record content: application/json: schema: - $ref: '#/components/schemas/AIProvider' + $ref: '#/components/schemas/AiMetricsHist' '401': description: Unauthorized content: @@ -307,12 +589,12 @@ paths: description: Inline objects? required: false tags: - - AIProvider + - AiMetricsHist delete: - summary: Delete a AIProvider business object record + summary: Delete a AiMetricsHist business object record security: - bearerAuth: [] - operationId: obj-aiprovider-delete + operationId: obj-aimetricshist-delete responses: '200': description: Success in deleting a business object record @@ -350,24 +632,24 @@ paths: description: Row ID (or empty or _ for all row IDs) required: true tags: - - AIProvider + - AiMetricsHist put: - summary: Update a AIProvider business object record + summary: Update a AiMetricsHist business object record security: - bearerAuth: [] requestBody: content: application/json: schema: - $ref: '#/components/schemas/AIProvider' - operationId: obj-aiprovider-update + $ref: '#/components/schemas/AiMetricsHist' + operationId: obj-aimetricshist-update responses: '200': description: Success in updating a business object record content: application/json: schema: - $ref: '#/components/schemas/AIProvider' + $ref: '#/components/schemas/AiMetricsHist' '400': description: Bad request content: @@ -400,15 +682,795 @@ paths: description: Row ID (or empty or _ for all row IDs) required: true tags: - - AIProvider - /rest/AIProvider: - get: - summary: Search AIProvider business object records or get contextualized metadata + - AiMetricsHist + /rest/AiGroupView/{row_id}: + post: + summary: Create a new AiGroupView business object record security: - bearerAuth: [] - operationId: obj-aiprovider-search - responses: - '200': + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AiGroupView' + operationId: obj-aigroupview-create + responses: + '200': + description: Success in creating a new business object record + content: + application/json: + schema: + $ref: '#/components/schemas/AiGroupView' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error400' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error401' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error500' + parameters: + - schema: + type: string + in: path + name: row_id + description: Row ID (or empty or _ for all row IDs) + required: true + tags: + - AiGroupView + get: + summary: Get a AiGroupView business object record + security: + - bearerAuth: [] + operationId: obj-aigroupview-get + responses: + '200': + description: Success in getting a single business object record + content: + application/json: + schema: + $ref: '#/components/schemas/AiGroupView' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error401' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error500' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error404' + parameters: + - schema: + type: string + in: path + name: row_id + description: Row ID (or empty or _ for all row IDs) + required: true + - schema: + type: boolean + in: query + name: _inline_documents + description: Inline documents? + required: false + - schema: + type: boolean + in: query + name: _inline_thumbnails + description: Inline documents' thumbnails? + required: false + - schema: + type: boolean + in: query + name: _inline_objects + description: Inline objects? + required: false + tags: + - AiGroupView + delete: + summary: Delete a AiGroupView business object record + security: + - bearerAuth: [] + operationId: obj-aigroupview-delete + responses: + '200': + description: Success in deleting a business object record + content: + application/json: {} + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error400' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error401' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error500' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error404' + parameters: + - schema: + type: string + in: path + name: row_id + description: Row ID (or empty or _ for all row IDs) + required: true + tags: + - AiGroupView + put: + summary: Update a AiGroupView business object record + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AiGroupView' + operationId: obj-aigroupview-update + responses: + '200': + description: Success in updating a business object record + content: + application/json: + schema: + $ref: '#/components/schemas/AiGroupView' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error400' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error401' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error500' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error404' + parameters: + - schema: + type: string + in: path + name: row_id + description: Row ID (or empty or _ for all row IDs) + required: true + tags: + - AiGroupView + /rest/AiGroupGuiDesc/{row_id}: + post: + summary: Create a new AiGroupGuiDesc business object record + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AiGroupGuiDesc' + operationId: obj-aigroupguidesc-create + responses: + '200': + description: Success in creating a new business object record + content: + application/json: + schema: + $ref: '#/components/schemas/AiGroupGuiDesc' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error400' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error401' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error500' + parameters: + - schema: + type: string + in: path + name: row_id + description: Row ID (or empty or _ for all row IDs) + required: true + tags: + - AiGroupGuiDesc + get: + summary: Get a AiGroupGuiDesc business object record + security: + - bearerAuth: [] + operationId: obj-aigroupguidesc-get + responses: + '200': + description: Success in getting a single business object record + content: + application/json: + schema: + $ref: '#/components/schemas/AiGroupGuiDesc' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error401' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error500' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error404' + parameters: + - schema: + type: string + in: path + name: row_id + description: Row ID (or empty or _ for all row IDs) + required: true + - schema: + type: boolean + in: query + name: _inline_documents + description: Inline documents? + required: false + - schema: + type: boolean + in: query + name: _inline_thumbnails + description: Inline documents' thumbnails? + required: false + - schema: + type: boolean + in: query + name: _inline_objects + description: Inline objects? + required: false + tags: + - AiGroupGuiDesc + delete: + summary: Delete a AiGroupGuiDesc business object record + security: + - bearerAuth: [] + operationId: obj-aigroupguidesc-delete + responses: + '200': + description: Success in deleting a business object record + content: + application/json: {} + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error400' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error401' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error500' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error404' + parameters: + - schema: + type: string + in: path + name: row_id + description: Row ID (or empty or _ for all row IDs) + required: true + tags: + - AiGroupGuiDesc + put: + summary: Update a AiGroupGuiDesc business object record + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AiGroupGuiDesc' + operationId: obj-aigroupguidesc-update + responses: + '200': + description: Success in updating a business object record + content: + application/json: + schema: + $ref: '#/components/schemas/AiGroupGuiDesc' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error400' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error401' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error500' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error404' + parameters: + - schema: + type: string + in: path + name: row_id + description: Row ID (or empty or _ for all row IDs) + required: true + tags: + - AiGroupGuiDesc + /rest/AiGroupGuiDesc: + get: + summary: Search AiGroupGuiDesc business object records or get contextualized + metadata + security: + - bearerAuth: [] + operationId: obj-aigroupguidesc-search + responses: + '200': + description: Success in searching business object records (or in getting + contextualized business object metadata, documentation, ...) + content: + application/json: + schema: + $ref: '#/components/schemas/ArrayOfAiGroupGuiDesc' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error401' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error500' + parameters: + - schema: + type: boolean + in: query + name: _metadata + description: Metadata? + required: false + - schema: + type: boolean + in: query + name: _count + description: Count? + required: false + - schema: + type: boolean + in: query + name: _doc + description: Documentation? + required: false + - schema: + type: string + in: query + name: aiGgdDescription + description: Search filter for Description + required: false + - schema: + type: string + in: query + name: aiGgdViewhomeId + description: Search filter for Home page + required: false + - schema: + type: string + in: query + name: aiGgdViewhomeId__viw_name + description: Search filter for Scope + required: false + - schema: + type: string + enum: + - ENU + - FRA + in: query + name: aiGgdLang + description: Search filter for Language + required: false + tags: + - AiGroupGuiDesc + /: + get: + summary: Get user session information + security: + - bearerAuth: [] + operationId: info + responses: + '200': + description: Success in getting user session information + content: + application/json: {} + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error401' + parameters: + - schema: + type: boolean + in: query + name: texts + description: Texts? + required: false + tags: + - session + /rest/AiGroupGuiDesc/{row_id}/action:AI_UPDATE_DESC_GLOBAL: + get: + summary: Call a custom action for a AiGroupGuiDesc business object record or + for all records + security: + - bearerAuth: [] + operationId: obj-aigroupguidesc-action-ai_update_desc_global + responses: + '200': + description: Success in calling the custom action + content: + application/json: + schema: + $ref: '#/components/schemas/ActionResult' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error400' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error401' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error500' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error404' + parameters: + - schema: + type: string + in: path + name: row_id + description: Row ID (or empty or _ for all row IDs) + required: true + tags: + - AiGroupGuiDesc + /rest/AIProvider/{row_id}: + post: + summary: Create a new AIProvider business object record + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AIProvider' + operationId: obj-aiprovider-create + responses: + '200': + description: Success in creating a new business object record + content: + application/json: + schema: + $ref: '#/components/schemas/AIProvider' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error400' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error401' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error500' + parameters: + - schema: + type: string + in: path + name: row_id + description: Row ID (or empty or _ for all row IDs) + required: true + tags: + - AIProvider + get: + summary: Get a AIProvider business object record + security: + - bearerAuth: [] + operationId: obj-aiprovider-get + responses: + '200': + description: Success in getting a single business object record + content: + application/json: + schema: + $ref: '#/components/schemas/AIProvider' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error401' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error500' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error404' + parameters: + - schema: + type: string + in: path + name: row_id + description: Row ID (or empty or _ for all row IDs) + required: true + - schema: + type: boolean + in: query + name: _inline_documents + description: Inline documents? + required: false + - schema: + type: boolean + in: query + name: _inline_thumbnails + description: Inline documents' thumbnails? + required: false + - schema: + type: boolean + in: query + name: _inline_objects + description: Inline objects? + required: false + tags: + - AIProvider + delete: + summary: Delete a AIProvider business object record + security: + - bearerAuth: [] + operationId: obj-aiprovider-delete + responses: + '200': + description: Success in deleting a business object record + content: + application/json: {} + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error400' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error401' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error500' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error404' + parameters: + - schema: + type: string + in: path + name: row_id + description: Row ID (or empty or _ for all row IDs) + required: true + tags: + - AIProvider + put: + summary: Update a AIProvider business object record + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AIProvider' + operationId: obj-aiprovider-update + responses: + '200': + description: Success in updating a business object record + content: + application/json: + schema: + $ref: '#/components/schemas/AIProvider' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error400' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error401' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error500' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error404' + parameters: + - schema: + type: string + in: path + name: row_id + description: Row ID (or empty or _ for all row IDs) + required: true + tags: + - AIProvider + /rest/AiGroupGuiDesc/{row_id}/action:AI_UPDATE_DESC: + get: + summary: Call a custom action for a AiGroupGuiDesc business object record or + for all records + security: + - bearerAuth: [] + operationId: obj-aigroupguidesc-action-ai_update_desc + responses: + '200': + description: Success in calling the custom action + content: + application/json: + schema: + $ref: '#/components/schemas/ActionResult' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error400' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error401' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error500' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error404' + parameters: + - schema: + type: string + in: path + name: row_id + description: Row ID (or empty or _ for all row IDs) + required: true + tags: + - AiGroupGuiDesc + /rest/AIProvider: + get: + summary: Search AIProvider business object records or get contextualized metadata + security: + - bearerAuth: [] + operationId: obj-aiprovider-search + responses: + '200': description: Success in searching business object records (or in getting contextualized business object metadata, documentation, ...) content: @@ -490,32 +1552,6 @@ paths: required: false tags: - AIProvider - /: - get: - summary: Get user session information - security: - - bearerAuth: [] - operationId: info - responses: - '200': - description: Success in getting user session information - content: - application/json: {} - '401': - description: Unauthorized - content: - application/json: - schema: - $ref: '#/components/schemas/Error401' - parameters: - - schema: - type: boolean - in: query - name: texts - description: Texts? - required: false - tags: - - session info: license: name: Simplicite license @@ -526,7 +1562,13 @@ info: email: contact@simplicitesoftware.com description: API for module AIBySimplicite title: AIBySimplicite - version: '0.20' + version: '0.22' tags: +- name: AiGroupGuiDesc + description: Group gui description +- name: AiGroupView + description: Described group +- name: AiMetricsHist + description: History of generated graphs - name: AIProvider description: Provider diff --git a/AIBySimplicite-swagger-2.0.yml b/AIBySimplicite-swagger-2.0.yml index ee3c71d..2ed023d 100644 --- a/AIBySimplicite-swagger-2.0.yml +++ b/AIBySimplicite-swagger-2.0.yml @@ -2,54 +2,824 @@ # / __(_)_ __ _ __| (_)__(_) |_ /_/ # \__ \ | ' \| '_ \ | / _| | _/ -_) # |___/_|_|_|_| .__/_|_\__|_|\__\___| -# |_| Module: AIBySimplicite 0.20 +# |_| Module: AIBySimplicite 0.22 basePath: /api paths: + /rest/AiMetricsHist: + get: + summary: Search AiMetricsHist business object records or get contextualized + metadata + security: + - bearerAuth: [] + produces: + - application/json + operationId: obj-aimetricshist-search + responses: + '200': + schema: + $ref: '#/definitions/ArrayOfAiMetricsHist' + description: Success in searching business object records (or in getting + contextualized business object metadata, documentation, ...) + '401': + schema: + $ref: '#/definitions/Error401' + description: Unauthorized + '500': + schema: + $ref: '#/definitions/Error500' + description: Internal server error + parameters: + - in: query + name: _metadata + description: Metadata? + type: boolean + required: false + - in: query + name: _count + description: Count? + type: boolean + required: false + - in: query + name: _doc + description: Documentation? + type: boolean + required: false + - in: query + name: aiMhSimpleuserId + description: Search filter for Mh simpleuser id + type: string + required: false + - in: query + name: aiMhSimpleuserId__usr_login + description: Search filter for Login + type: string + required: false + - in: query + name: aiMhCreateOn + description: Search filter for Mh create on + type: string + required: false + - in: query + name: aiMhModuleId + description: Search filter for Mh module id + type: string + required: false + - in: query + name: aiMhModuleId__mdl_name + description: Search filter for Module name + type: string + required: false + - in: query + name: aiMhMetrics + description: Search filter for Mh metrics + type: string + required: false + - in: query + name: aiMhPreview + description: Search filter for Preview + type: string + required: false + - in: query + name: aiMhPrompt + description: Search filter for Title + type: string + required: false + tags: + - AiMetricsHist + /rest/AiGroupView: + get: + summary: Search AiGroupView business object records or get contextualized metadata + security: + - bearerAuth: [] + produces: + - application/json + operationId: obj-aigroupview-search + responses: + '200': + schema: + $ref: '#/definitions/ArrayOfAiGroupView' + description: Success in searching business object records (or in getting + contextualized business object metadata, documentation, ...) + '401': + schema: + $ref: '#/definitions/Error401' + description: Unauthorized + '500': + schema: + $ref: '#/definitions/Error500' + description: Internal server error + parameters: + - in: query + name: _metadata + description: Metadata? + type: boolean + required: false + - in: query + name: _count + description: Count? + type: boolean + required: false + - in: query + name: _doc + description: Documentation? + type: boolean + required: false + - in: query + name: aiGroupGuiDescId + description: Search filter for Group gui desc id + type: string + required: false + - in: query + name: aiGroupGuiDescId__aiGgdViewhomeId + description: Search filter for Group gui desc id Home page + type: string + required: false + - in: query + name: aiGroupGuiDescId__aiGgdViewhomeId__viw_name + description: Search filter for Group gui desc id Home page Name + type: string + required: false + - in: query + name: aiGroupGuiDescId__aiGgdLang + description: Search filter for Group gui desc id Language + type: string + required: false + enum: + - ENU + - FRA + - in: query + name: aiGroupId + description: Search filter for aiGroupId + type: string + required: false + - in: query + name: aiGroupId__grp_name + description: Search filter for Group name + type: string + required: false + - in: query + name: aiAigroupviewUsed + description: Search filter for GUIDescription + type: boolean + required: false + tags: + - AiGroupView /login: get: - summary: Login (obtain bearer token) + summary: Login (obtain bearer token) + security: + - basicAuth: [] + produces: + - text/plain + - application/json + operationId: login + responses: + '200': + description: Successful login + '401': + schema: + $ref: '#/definitions/Error401' + description: Unauthorized + parameters: + - in: query + name: _output + description: Optional output format + type: string + required: false + enum: + - json + - oauth2 + - token + tags: + - session + /logout: + get: + summary: Logout (revoke bearer token) + security: + - bearerAuth: [] + produces: + - application/json + operationId: logout + responses: + '200': + description: Successfull logout + '401': + schema: + $ref: '#/definitions/Error401' + description: Unauthorized + tags: + - session + /rest/AiMetricsHist/{row_id}: + post: + summary: Create a new AiMetricsHist business object record + security: + - bearerAuth: [] + produces: + - application/json + operationId: obj-aimetricshist-create + responses: + '200': + schema: + $ref: '#/definitions/AiMetricsHist' + description: Success in creating a new business object record + '400': + schema: + $ref: '#/definitions/Error400' + description: Bad request + '401': + schema: + $ref: '#/definitions/Error401' + description: Unauthorized + '500': + schema: + $ref: '#/definitions/Error500' + description: Internal server error + parameters: + - in: path + name: row_id + description: Row ID (or empty or _ for all row IDs) + type: string + required: true + - schema: + $ref: '#/definitions/AiMetricsHist' + in: body + name: body + tags: + - AiMetricsHist + consumes: + - application/json + get: + summary: Get a AiMetricsHist business object record + security: + - bearerAuth: [] + produces: + - application/json + operationId: obj-aimetricshist-get + responses: + '200': + schema: + $ref: '#/definitions/AiMetricsHist' + description: Success in getting a single business object record + '401': + schema: + $ref: '#/definitions/Error401' + description: Unauthorized + '500': + schema: + $ref: '#/definitions/Error500' + description: Internal server error + '404': + schema: + $ref: '#/definitions/Error404' + description: Not found + parameters: + - in: path + name: row_id + description: Row ID (or empty or _ for all row IDs) + type: string + required: true + - in: query + name: _inline_documents + description: Inline documents? + type: boolean + required: false + - in: query + name: _inline_thumbnails + description: Inline documents' thumbnails? + type: boolean + required: false + - in: query + name: _inline_objects + description: Inline objects? + type: boolean + required: false + tags: + - AiMetricsHist + delete: + summary: Delete a AiMetricsHist business object record + security: + - bearerAuth: [] + produces: + - application/json + operationId: obj-aimetricshist-delete + responses: + '200': + description: Success in deleting a business object record + '400': + schema: + $ref: '#/definitions/Error400' + description: Bad request + '401': + schema: + $ref: '#/definitions/Error401' + description: Unauthorized + '500': + schema: + $ref: '#/definitions/Error500' + description: Internal server error + '404': + schema: + $ref: '#/definitions/Error404' + description: Not found + parameters: + - in: path + name: row_id + description: Row ID (or empty or _ for all row IDs) + type: string + required: true + tags: + - AiMetricsHist + put: + summary: Update a AiMetricsHist business object record + security: + - bearerAuth: [] + produces: + - application/json + operationId: obj-aimetricshist-update + responses: + '200': + schema: + $ref: '#/definitions/AiMetricsHist' + description: Success in updating a business object record + '400': + schema: + $ref: '#/definitions/Error400' + description: Bad request + '401': + schema: + $ref: '#/definitions/Error401' + description: Unauthorized + '500': + schema: + $ref: '#/definitions/Error500' + description: Internal server error + '404': + schema: + $ref: '#/definitions/Error404' + description: Not found + parameters: + - in: path + name: row_id + description: Row ID (or empty or _ for all row IDs) + type: string + required: true + - schema: + $ref: '#/definitions/AiMetricsHist' + in: body + name: body + tags: + - AiMetricsHist + consumes: + - application/json + /rest/AiGroupView/{row_id}: + post: + summary: Create a new AiGroupView business object record + security: + - bearerAuth: [] + produces: + - application/json + operationId: obj-aigroupview-create + responses: + '200': + schema: + $ref: '#/definitions/AiGroupView' + description: Success in creating a new business object record + '400': + schema: + $ref: '#/definitions/Error400' + description: Bad request + '401': + schema: + $ref: '#/definitions/Error401' + description: Unauthorized + '500': + schema: + $ref: '#/definitions/Error500' + description: Internal server error + parameters: + - in: path + name: row_id + description: Row ID (or empty or _ for all row IDs) + type: string + required: true + - schema: + $ref: '#/definitions/AiGroupView' + in: body + name: body + tags: + - AiGroupView + consumes: + - application/json + get: + summary: Get a AiGroupView business object record + security: + - bearerAuth: [] + produces: + - application/json + operationId: obj-aigroupview-get + responses: + '200': + schema: + $ref: '#/definitions/AiGroupView' + description: Success in getting a single business object record + '401': + schema: + $ref: '#/definitions/Error401' + description: Unauthorized + '500': + schema: + $ref: '#/definitions/Error500' + description: Internal server error + '404': + schema: + $ref: '#/definitions/Error404' + description: Not found + parameters: + - in: path + name: row_id + description: Row ID (or empty or _ for all row IDs) + type: string + required: true + - in: query + name: _inline_documents + description: Inline documents? + type: boolean + required: false + - in: query + name: _inline_thumbnails + description: Inline documents' thumbnails? + type: boolean + required: false + - in: query + name: _inline_objects + description: Inline objects? + type: boolean + required: false + tags: + - AiGroupView + delete: + summary: Delete a AiGroupView business object record + security: + - bearerAuth: [] + produces: + - application/json + operationId: obj-aigroupview-delete + responses: + '200': + description: Success in deleting a business object record + '400': + schema: + $ref: '#/definitions/Error400' + description: Bad request + '401': + schema: + $ref: '#/definitions/Error401' + description: Unauthorized + '500': + schema: + $ref: '#/definitions/Error500' + description: Internal server error + '404': + schema: + $ref: '#/definitions/Error404' + description: Not found + parameters: + - in: path + name: row_id + description: Row ID (or empty or _ for all row IDs) + type: string + required: true + tags: + - AiGroupView + put: + summary: Update a AiGroupView business object record + security: + - bearerAuth: [] + produces: + - application/json + operationId: obj-aigroupview-update + responses: + '200': + schema: + $ref: '#/definitions/AiGroupView' + description: Success in updating a business object record + '400': + schema: + $ref: '#/definitions/Error400' + description: Bad request + '401': + schema: + $ref: '#/definitions/Error401' + description: Unauthorized + '500': + schema: + $ref: '#/definitions/Error500' + description: Internal server error + '404': + schema: + $ref: '#/definitions/Error404' + description: Not found + parameters: + - in: path + name: row_id + description: Row ID (or empty or _ for all row IDs) + type: string + required: true + - schema: + $ref: '#/definitions/AiGroupView' + in: body + name: body + tags: + - AiGroupView + consumes: + - application/json + /rest/AiGroupGuiDesc/{row_id}: + post: + summary: Create a new AiGroupGuiDesc business object record + security: + - bearerAuth: [] + produces: + - application/json + operationId: obj-aigroupguidesc-create + responses: + '200': + schema: + $ref: '#/definitions/AiGroupGuiDesc' + description: Success in creating a new business object record + '400': + schema: + $ref: '#/definitions/Error400' + description: Bad request + '401': + schema: + $ref: '#/definitions/Error401' + description: Unauthorized + '500': + schema: + $ref: '#/definitions/Error500' + description: Internal server error + parameters: + - in: path + name: row_id + description: Row ID (or empty or _ for all row IDs) + type: string + required: true + - schema: + $ref: '#/definitions/AiGroupGuiDesc' + in: body + name: body + tags: + - AiGroupGuiDesc + consumes: + - application/json + get: + summary: Get a AiGroupGuiDesc business object record + security: + - bearerAuth: [] + produces: + - application/json + operationId: obj-aigroupguidesc-get + responses: + '200': + schema: + $ref: '#/definitions/AiGroupGuiDesc' + description: Success in getting a single business object record + '401': + schema: + $ref: '#/definitions/Error401' + description: Unauthorized + '500': + schema: + $ref: '#/definitions/Error500' + description: Internal server error + '404': + schema: + $ref: '#/definitions/Error404' + description: Not found + parameters: + - in: path + name: row_id + description: Row ID (or empty or _ for all row IDs) + type: string + required: true + - in: query + name: _inline_documents + description: Inline documents? + type: boolean + required: false + - in: query + name: _inline_thumbnails + description: Inline documents' thumbnails? + type: boolean + required: false + - in: query + name: _inline_objects + description: Inline objects? + type: boolean + required: false + tags: + - AiGroupGuiDesc + delete: + summary: Delete a AiGroupGuiDesc business object record + security: + - bearerAuth: [] + produces: + - application/json + operationId: obj-aigroupguidesc-delete + responses: + '200': + description: Success in deleting a business object record + '400': + schema: + $ref: '#/definitions/Error400' + description: Bad request + '401': + schema: + $ref: '#/definitions/Error401' + description: Unauthorized + '500': + schema: + $ref: '#/definitions/Error500' + description: Internal server error + '404': + schema: + $ref: '#/definitions/Error404' + description: Not found + parameters: + - in: path + name: row_id + description: Row ID (or empty or _ for all row IDs) + type: string + required: true + tags: + - AiGroupGuiDesc + put: + summary: Update a AiGroupGuiDesc business object record + security: + - bearerAuth: [] + produces: + - application/json + operationId: obj-aigroupguidesc-update + responses: + '200': + schema: + $ref: '#/definitions/AiGroupGuiDesc' + description: Success in updating a business object record + '400': + schema: + $ref: '#/definitions/Error400' + description: Bad request + '401': + schema: + $ref: '#/definitions/Error401' + description: Unauthorized + '500': + schema: + $ref: '#/definitions/Error500' + description: Internal server error + '404': + schema: + $ref: '#/definitions/Error404' + description: Not found + parameters: + - in: path + name: row_id + description: Row ID (or empty or _ for all row IDs) + type: string + required: true + - schema: + $ref: '#/definitions/AiGroupGuiDesc' + in: body + name: body + tags: + - AiGroupGuiDesc + consumes: + - application/json + /rest/AiGroupGuiDesc: + get: + summary: Search AiGroupGuiDesc business object records or get contextualized + metadata security: - - basicAuth: [] + - bearerAuth: [] produces: - - text/plain - application/json - operationId: login + operationId: obj-aigroupguidesc-search responses: '200': - description: Successful login + schema: + $ref: '#/definitions/ArrayOfAiGroupGuiDesc' + description: Success in searching business object records (or in getting + contextualized business object metadata, documentation, ...) '401': schema: $ref: '#/definitions/Error401' description: Unauthorized + '500': + schema: + $ref: '#/definitions/Error500' + description: Internal server error parameters: - in: query - name: _output - description: Optional output format + name: _metadata + description: Metadata? + type: boolean + required: false + - in: query + name: _count + description: Count? + type: boolean + required: false + - in: query + name: _doc + description: Documentation? + type: boolean + required: false + - in: query + name: aiGgdDescription + description: Search filter for Description + type: string + required: false + - in: query + name: aiGgdViewhomeId + description: Search filter for Home page + type: string + required: false + - in: query + name: aiGgdViewhomeId__viw_name + description: Search filter for Scope + type: string + required: false + - in: query + name: aiGgdLang + description: Search filter for Language type: string required: false enum: - - json - - oauth2 - - token + - ENU + - FRA tags: - - session - /logout: + - AiGroupGuiDesc + /: get: - summary: Logout (revoke bearer token) + summary: Get user session information security: - bearerAuth: [] produces: - application/json - operationId: logout + operationId: info responses: '200': - description: Successfull logout + description: Success in getting user session information '401': schema: $ref: '#/definitions/Error401' description: Unauthorized + parameters: + - in: query + name: texts + description: Texts? + type: boolean + required: false tags: - session + /rest/AiGroupGuiDesc/{row_id}/action:AI_UPDATE_DESC_GLOBAL: + get: + summary: Call a custom action for a AiGroupGuiDesc business object record or + for all records + security: + - bearerAuth: [] + produces: + - application/json + operationId: obj-aigroupguidesc-action-ai_update_desc_global + responses: + '200': + schema: + $ref: '#/definitions/ActionResult' + description: Success in calling the custom action + '400': + schema: + $ref: '#/definitions/Error400' + description: Bad request + '401': + schema: + $ref: '#/definitions/Error401' + description: Unauthorized + '500': + schema: + $ref: '#/definitions/Error500' + description: Internal server error + '404': + schema: + $ref: '#/definitions/Error404' + description: Not found + parameters: + - in: path + name: row_id + description: Row ID (or empty or _ for all row IDs) + type: string + required: true + tags: + - AiGroupGuiDesc /rest/AIProvider/{row_id}: post: summary: Create a new AIProvider business object record @@ -212,6 +982,44 @@ paths: - AIProvider consumes: - application/json + /rest/AiGroupGuiDesc/{row_id}/action:AI_UPDATE_DESC: + get: + summary: Call a custom action for a AiGroupGuiDesc business object record or + for all records + security: + - bearerAuth: [] + produces: + - application/json + operationId: obj-aigroupguidesc-action-ai_update_desc + responses: + '200': + schema: + $ref: '#/definitions/ActionResult' + description: Success in calling the custom action + '400': + schema: + $ref: '#/definitions/Error400' + description: Bad request + '401': + schema: + $ref: '#/definitions/Error401' + description: Unauthorized + '500': + schema: + $ref: '#/definitions/Error500' + description: Internal server error + '404': + schema: + $ref: '#/definitions/Error404' + description: Not found + parameters: + - in: path + name: row_id + description: Row ID (or empty or _ for all row IDs) + type: string + required: true + tags: + - AiGroupGuiDesc /rest/AIProvider: get: summary: Search AIProvider business object records or get contextualized metadata @@ -287,29 +1095,6 @@ paths: required: false tags: - AIProvider - /: - get: - summary: Get user session information - security: - - bearerAuth: [] - produces: - - application/json - operationId: info - responses: - '200': - description: Success in getting user session information - '401': - schema: - $ref: '#/definitions/Error401' - description: Unauthorized - parameters: - - in: query - name: texts - description: Texts? - type: boolean - required: false - tags: - - session securityDefinitions: basicAuth: type: basic @@ -329,22 +1114,57 @@ definitions: type: integer enum: - 404 - ActionResult: + AiGroupGuiDesc: type: object properties: - result: - description: Action result + aiGgdDescription: + description: Description type: string - ArrayOfAIProvider: - type: array - items: - $ref: '#/definitions/AIProvider' - TreeviewData: + aiGgdLang: + description: Language + type: string + enum: + - ENU + - FRA + aiGgdViewhomeId__viw_name: + description: Scope + type: string + aiGgdViewhomeId: + description: Home page + type: string + row_id: + description: Unique technical row ID + type: string + AiGroupView: type: object properties: - item: - description: Object item with lists of linked objects' items - type: object + aiAigroupviewUsed: + description: GUIDescription + type: boolean + aiGroupGuiDescId__aiGgdViewhomeId__viw_name: + description: Group gui desc id Home page Name + type: string + aiGroupGuiDescId__aiGgdLang: + description: Group gui desc id Language + type: string + enum: + - ENU + - FRA + row_id: + description: Unique technical row ID + type: string + aiGroupGuiDescId__aiGgdViewhomeId: + description: Group gui desc id Home page + type: string + aiGroupId: + description: aiGroupId + type: string + aiGroupGuiDescId: + description: Group gui desc id + type: string + aiGroupId__grp_name: + description: Group name + type: string PublicationResult: type: object properties: @@ -375,6 +1195,37 @@ definitions: label3: description: 'Label #3' type: string + PlaceMapData: + type: object + properties: + places: + description: Places + type: array + items: + $ref: '#/definitions/PlaceData' + name: + description: Name + type: string + ActionResult: + type: object + properties: + result: + description: Action result + type: string + ArrayOfAIProvider: + type: array + items: + $ref: '#/definitions/AIProvider' + TreeviewData: + type: object + properties: + item: + description: Object item with lists of linked objects' items + type: object + ArrayOfAiGroupGuiDesc: + type: array + items: + $ref: '#/definitions/AiGroupGuiDesc' Error400: type: object properties: @@ -408,17 +1259,10 @@ definitions: type: integer enum: - 500 - PlaceMapData: - type: object - properties: - places: - description: Places - type: array - items: - $ref: '#/definitions/PlaceData' - name: - description: Name - type: string + ArrayOfAiGroupView: + type: array + items: + $ref: '#/definitions/AiGroupView' AIProvider: type: object properties: @@ -457,6 +1301,41 @@ definitions: type: integer enum: - 403 + AiMetricsHist: + type: object + properties: + aiMhPrompt: + description: Title + type: string + aiMhCreateOn: + description: Mh create on + type: string + example: yyyy-MM-dd HH:mm:ss + aiMhSimpleuserId: + description: Mh simpleuser id + type: string + aiMhSimpleuserId__usr_login: + description: Login + type: string + aiMhModuleId__mdl_name: + description: Module name + type: string + aiMhMetrics: + description: Mh metrics + type: string + row_id: + description: Unique technical row ID + type: string + aiMhModuleId: + description: Mh module id + type: string + aiMhPreview: + description: Preview + type: string + ArrayOfAiMetricsHist: + type: array + items: + $ref: '#/definitions/AiMetricsHist' swagger: '2.0' info: license: @@ -468,7 +1347,13 @@ info: email: contact@simplicitesoftware.com description: API for module AIBySimplicite title: AIBySimplicite - version: '0.20' + version: '0.22' tags: +- name: AiGroupGuiDesc + description: Group gui description +- name: AiGroupView + description: Described group +- name: AiMetricsHist + description: History of generated graphs - name: AIProvider description: Provider diff --git a/AIBySimplicite.json b/AIBySimplicite.json index cedaed9..9c37546 100644 --- a/AIBySimplicite.json +++ b/AIBySimplicite.json @@ -4,7 +4,7 @@ "item": { "mdl_name": "AIBySimplicite", "mdl_prefix": "ai", - "mdl_version": "0.20", + "mdl_version": "0.22", "mdl_type": "T", "mdl_icon": null, "mdl_url": "{\n \"origin\": {\"uri\": \"https://github.com/simplicitesoftware/module_ai.git\"},\n \"type\": \"git\",\n \"branch\": \"6.1\"\n}", @@ -286,6 +286,15 @@ "prf_group_id__grp_name": "AI_DESIGNER", "row_module_id__mdl_name": "AIBySimplicite" } + }, + { + "object": "Profile", + "userkey": "GRANT_ADMIN AI_BUSINESS", + "item": { + "prf_profile_id__grp_name": "GRANT_ADMIN", + "prf_group_id__grp_name": "AI_BUSINESS", + "row_module_id__mdl_name": "AIBySimplicite" + } } ] }, @@ -419,6 +428,19 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, + { + "object": "ListOfValue", + "userkey": "TEXT AI_ERROR English", + "item": { + "lov_name": "TEXT", + "lov_code": "AI_ERROR", + "lov_lang": "ENU", + "lov_value": "The AI encountered an error, please excuse us for the inconvenience caused.", + "lov_order_by": 1, + "lov_event_id__lev_code": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "ListOfValue", "userkey": "TEXT AI_ERROR_RETURN English", @@ -549,6 +571,19 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, + { + "object": "ListOfValue", + "userkey": "TEXT chart English", + "item": { + "lov_name": "TEXT", + "lov_code": "chart", + "lov_lang": "ENU", + "lov_value": "test<\/p>\n

 ", + "lov_order_by": 1, + "lov_event_id__lev_code": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "ListOfValue", "userkey": "TEXT AI_BUTTON_CANCEL French", @@ -614,6 +649,19 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, + { + "object": "ListOfValue", + "userkey": "TEXT AI_ERROR French", + "item": { + "lov_name": "TEXT", + "lov_code": "AI_ERROR", + "lov_lang": "FRA", + "lov_value": "L'IA a rencontré une erreur, veuillez nous excuser pour la gêne occasionnée.", + "lov_order_by": 1, + "lov_event_id__lev_code": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "ListOfValue", "userkey": "TEXT AI_ERROR_RETURN French", @@ -974,23 +1022,23 @@ }, { "object": "FieldListValue", - "userkey": "AI_EX_TYPE CODE French", + "userkey": "AI_EX_TYPE OTHER French", "item": { "lov_code_id__lov_list_id__lov_name": "AI_EX_TYPE", - "lov_code_id__lov_code": "CODE", + "lov_code_id__lov_code": "OTHER", "lov_lang": "FRA", - "lov_value": "Code", + "lov_value": "Autre", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "FieldListValue", - "userkey": "AI_EX_TYPE OTHER French", + "userkey": "AI_EX_TYPE CODE French", "item": { "lov_code_id__lov_list_id__lov_name": "AI_EX_TYPE", - "lov_code_id__lov_code": "OTHER", + "lov_code_id__lov_code": "CODE", "lov_lang": "FRA", - "lov_value": "Autre", + "lov_value": "Code", "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -1072,18 +1120,18 @@ }, { "object": "Field", - "userkey": "aiGrantUser", + "userkey": "aiAigroupviewUsed", "item": { - "fld_name": "aiGrantUser", - "fld_dbname": null, + "fld_name": "aiAigroupviewUsed", + "fld_dbname": "ai_aigroupview_used", "fld_visible": "3", "fld_updatable": [ - "2", - "3" + "3", + "2" ], "fld_required": true, "fld_fonctid": false, - "fld_research": null, + "fld_research": "1", "fld_researchreq": "0", "fld_sort": "C", "fld_more": false, @@ -1099,7 +1147,7 @@ "fld_minsize": null, "fld_precision": null, "fld_fromdate_id__fld_name": null, - "fld_dfault": "1", + "fld_dfault": "true", "fld_indexable": false, "fld_autocomp": "0", "fld_groupby": false, @@ -1118,15 +1166,12 @@ }, { "object": "Field", - "userkey": "aiPrvCompletionUrl", + "userkey": "aiGgdDescription", "item": { - "fld_name": "aiPrvCompletionUrl", - "fld_dbname": "ai_prv_completion_url", + "fld_name": "aiGgdDescription", + "fld_dbname": "ai_ggd_description", "fld_visible": "2", - "fld_updatable": [ - "2", - "3" - ], + "fld_updatable": ["0"], "fld_required": true, "fld_fonctid": false, "fld_research": "1", @@ -1137,22 +1182,22 @@ "fld_listsum": null, "fld_exportable": true, "fld_tray": null, - "fld_type": "10", + "fld_type": "13", "fld_type_id__flt_code": null, "fld_list_id__lov_name": null, "fld_copy": true, - "fld_size": 100, + "fld_size": 50000, "fld_minsize": null, - "fld_precision": null, + "fld_precision": "hf=25 wl=100", "fld_fromdate_id__fld_name": null, - "fld_dfault": "[VALUE:aiPrvDefaultUrl]+\"v1/chat/completions\"", + "fld_dfault": null, "fld_indexable": false, "fld_autocomp": "0", "fld_groupby": false, "fld_updall": true, "fld_case": null, "fld_righttoleft": false, - "fld_rendering": null, + "fld_rendering": "TEXT", "fld_speech": null, "fld_calc": null, "fld_objlist": null, @@ -1164,17 +1209,14 @@ }, { "object": "Field", - "userkey": "aiPrvDataModel", + "userkey": "aiGgdLang", "item": { - "fld_name": "aiPrvDataModel", - "fld_dbname": "ai_prv_data_model", - "fld_visible": "2", - "fld_updatable": [ - "2", - "3" - ], + "fld_name": "aiGgdLang", + "fld_dbname": "ai_ggd_lang", + "fld_visible": "3", + "fld_updatable": ["0"], "fld_required": true, - "fld_fonctid": false, + "fld_fonctid": true, "fld_research": "1", "fld_researchreq": "0", "fld_sort": "C", @@ -1183,22 +1225,22 @@ "fld_listsum": null, "fld_exportable": true, "fld_tray": null, - "fld_type": "13", + "fld_type": "7", "fld_type_id__flt_code": null, - "fld_list_id__lov_name": null, + "fld_list_id__lov_name": "LANG", "fld_copy": true, - "fld_size": 1000, + "fld_size": 100, "fld_minsize": null, "fld_precision": null, "fld_fromdate_id__fld_name": null, - "fld_dfault": "{}", + "fld_dfault": "[LANG]", "fld_indexable": false, "fld_autocomp": "0", "fld_groupby": false, "fld_updall": true, "fld_case": null, "fld_righttoleft": false, - "fld_rendering": "JSON", + "fld_rendering": null, "fld_speech": null, "fld_calc": null, "fld_objlist": null, @@ -1210,17 +1252,17 @@ }, { "object": "Field", - "userkey": "aiPrvDefaultUrl", + "userkey": "aiGgdViewhomeId", "item": { - "fld_name": "aiPrvDefaultUrl", - "fld_dbname": "ai_prv_default_url", - "fld_visible": "2", + "fld_name": "aiGgdViewhomeId", + "fld_dbname": "ai_ggd_viewhome_id", + "fld_visible": "3", "fld_updatable": [ "2", "3" ], "fld_required": true, - "fld_fonctid": false, + "fld_fonctid": true, "fld_research": "1", "fld_researchreq": "0", "fld_sort": "C", @@ -1229,11 +1271,11 @@ "fld_listsum": null, "fld_exportable": true, "fld_tray": null, - "fld_type": "10", + "fld_type": "0", "fld_type_id__flt_code": null, "fld_list_id__lov_name": null, "fld_copy": true, - "fld_size": 100, + "fld_size": 11, "fld_minsize": null, "fld_precision": null, "fld_fromdate_id__fld_name": null, @@ -1256,16 +1298,16 @@ }, { "object": "Field", - "userkey": "aiPrvHelp", + "userkey": "aiGrantUser", "item": { - "fld_name": "aiPrvHelp", - "fld_dbname": "ai_prv_help", - "fld_visible": "2", + "fld_name": "aiGrantUser", + "fld_dbname": null, + "fld_visible": "3", "fld_updatable": [ "2", "3" ], - "fld_required": false, + "fld_required": true, "fld_fonctid": false, "fld_research": null, "fld_researchreq": "0", @@ -1275,22 +1317,22 @@ "fld_listsum": null, "fld_exportable": true, "fld_tray": null, - "fld_type": "13", + "fld_type": "8", "fld_type_id__flt_code": null, "fld_list_id__lov_name": null, "fld_copy": true, - "fld_size": 5000, + "fld_size": 1, "fld_minsize": null, "fld_precision": null, "fld_fromdate_id__fld_name": null, - "fld_dfault": null, + "fld_dfault": "1", "fld_indexable": false, "fld_autocomp": "0", "fld_groupby": false, "fld_updall": true, "fld_case": null, "fld_righttoleft": false, - "fld_rendering": "MD", + "fld_rendering": null, "fld_speech": null, "fld_calc": null, "fld_objlist": null, @@ -1302,17 +1344,17 @@ }, { "object": "Field", - "userkey": "aiPrvModelsUrl", + "userkey": "aiGroupGuiDescId", "item": { - "fld_name": "aiPrvModelsUrl", - "fld_dbname": "ai_prv_models_url", - "fld_visible": "2", + "fld_name": "aiGroupGuiDescId", + "fld_dbname": "ai_group_gui_desc_id", + "fld_visible": "3", "fld_updatable": [ "2", "3" ], "fld_required": true, - "fld_fonctid": false, + "fld_fonctid": true, "fld_research": "1", "fld_researchreq": "0", "fld_sort": "C", @@ -1321,15 +1363,15 @@ "fld_listsum": null, "fld_exportable": true, "fld_tray": null, - "fld_type": "10", + "fld_type": "0", "fld_type_id__flt_code": null, "fld_list_id__lov_name": null, "fld_copy": true, - "fld_size": 100, + "fld_size": 11, "fld_minsize": null, "fld_precision": null, "fld_fromdate_id__fld_name": null, - "fld_dfault": "[VALUE:aiPrvDefaultUrl]+\"v1/models\"", + "fld_dfault": null, "fld_indexable": false, "fld_autocomp": "0", "fld_groupby": false, @@ -1348,18 +1390,18 @@ }, { "object": "Field", - "userkey": "aiPrvPingUrl", + "userkey": "aiGroupGuiVirtual", "item": { - "fld_name": "aiPrvPingUrl", - "fld_dbname": "ai_prv_ping_url", - "fld_visible": "2", + "fld_name": "aiGroupGuiVirtual", + "fld_dbname": null, + "fld_visible": "0", "fld_updatable": [ "2", "3" ], "fld_required": false, "fld_fonctid": false, - "fld_research": "1", + "fld_research": null, "fld_researchreq": "0", "fld_sort": "C", "fld_more": false, @@ -1367,15 +1409,15 @@ "fld_listsum": null, "fld_exportable": true, "fld_tray": null, - "fld_type": "10", + "fld_type": "3", "fld_type_id__flt_code": null, "fld_list_id__lov_name": null, "fld_copy": true, - "fld_size": 100, + "fld_size": 10, "fld_minsize": null, "fld_precision": null, "fld_fromdate_id__fld_name": null, - "fld_dfault": "[VALUE:aiPrvDefaultUrl]+\"v1/ping\"", + "fld_dfault": null, "fld_indexable": false, "fld_autocomp": "0", "fld_groupby": false, @@ -1394,10 +1436,10 @@ }, { "object": "Field", - "userkey": "aiPrvProvider", + "userkey": "aiGroupId", "item": { - "fld_name": "aiPrvProvider", - "fld_dbname": "ai_prv_provider", + "fld_name": "aiGroupId", + "fld_dbname": "ai_group_id", "fld_visible": "3", "fld_updatable": [ "2", @@ -1413,11 +1455,11 @@ "fld_listsum": null, "fld_exportable": true, "fld_tray": null, - "fld_type": "3", + "fld_type": "0", "fld_type_id__flt_code": null, "fld_list_id__lov_name": null, "fld_copy": true, - "fld_size": 100, + "fld_size": 11, "fld_minsize": null, "fld_precision": null, "fld_fromdate_id__fld_name": null, @@ -1440,18 +1482,18 @@ }, { "object": "Field", - "userkey": "aiSelectProcess", + "userkey": "aiMhCreateOn", "item": { - "fld_name": "aiSelectProcess", - "fld_dbname": null, + "fld_name": "aiMhCreateOn", + "fld_dbname": "ai_mh_create_on", "fld_visible": "3", "fld_updatable": [ - "2", - "3" + "3", + "2" ], "fld_required": true, - "fld_fonctid": false, - "fld_research": null, + "fld_fonctid": true, + "fld_research": "1", "fld_researchreq": "0", "fld_sort": "C", "fld_more": false, @@ -1459,15 +1501,15 @@ "fld_listsum": null, "fld_exportable": true, "fld_tray": null, - "fld_type": "8", + "fld_type": "5", "fld_type_id__flt_code": null, "fld_list_id__lov_name": null, "fld_copy": true, - "fld_size": 1, + "fld_size": 19, "fld_minsize": null, "fld_precision": null, "fld_fromdate_id__fld_name": null, - "fld_dfault": "0", + "fld_dfault": "[DATETIME]", "fld_indexable": false, "fld_autocomp": "0", "fld_groupby": false, @@ -1483,483 +1525,2093 @@ "row_module_id__mdl_name": "AIBySimplicite", "fld_incrementsyntax": null } - } - ] - }, - { - "object": "Template", - "label": "Templates", - "icon": "img/system/template", - "field": "row_module_id", - "list": [ + }, { - "object": "Template", - "userkey": "AiConfiguration", + "object": "Field", + "userkey": "aiMhMetrics", "item": { - "tpl_name": "AiConfiguration", - "tpl_ui": "

<\/div>", - "tpl_min": null, - "tpl_image": null, - "tpl_grid": null, - "tpl_context": null, - "row_module_id__mdl_name": "AIBySimplicite" + "fld_name": "aiMhMetrics", + "fld_dbname": "ai_mh_metrics", + "fld_visible": "2", + "fld_updatable": ["2"], + "fld_required": false, + "fld_fonctid": false, + "fld_research": null, + "fld_researchreq": "0", + "fld_sort": "C", + "fld_more": false, + "fld_listmore": false, + "fld_listsum": null, + "fld_exportable": true, + "fld_tray": null, + "fld_type": "13", + "fld_type_id__flt_code": null, + "fld_list_id__lov_name": null, + "fld_copy": true, + "fld_size": 10000, + "fld_minsize": null, + "fld_precision": null, + "fld_fromdate_id__fld_name": null, + "fld_dfault": null, + "fld_indexable": false, + "fld_autocomp": "0", + "fld_groupby": false, + "fld_updall": true, + "fld_case": null, + "fld_righttoleft": false, + "fld_rendering": "TEXT", + "fld_speech": null, + "fld_calc": null, + "fld_objlist": null, + "fld_comment": null, + "fld_classification": null, + "row_module_id__mdl_name": "AIBySimplicite", + "fld_incrementsyntax": null } }, { - "object": "Template", - "userkey": "AIExemple", + "object": "Field", + "userkey": "aiMhModuleId", "item": { - "tpl_name": "AIExemple", - "tpl_ui": "
\n
<\/div>\n
<\/div>\n
\n
\n
<\/div>\n
<\/div>\n
<\/div>\n \n <\/div>\n
\n
\n
\n
<\/div>\n <\/div>\n
\n
<\/div>\n <\/div>\n <\/div>\n <\/div>\n <\/div>\n<\/div>", - "tpl_min": null, - "tpl_image": null, - "tpl_grid": null, - "tpl_context": null, - "row_module_id__mdl_name": "AIBySimplicite" + "fld_name": "aiMhModuleId", + "fld_dbname": "ai_mh_module_id", + "fld_visible": "3", + "fld_updatable": [ + "2", + "3" + ], + "fld_required": true, + "fld_fonctid": true, + "fld_research": "1", + "fld_researchreq": "0", + "fld_sort": "C", + "fld_more": false, + "fld_listmore": false, + "fld_listsum": null, + "fld_exportable": true, + "fld_tray": null, + "fld_type": "0", + "fld_type_id__flt_code": null, + "fld_list_id__lov_name": null, + "fld_copy": true, + "fld_size": 11, + "fld_minsize": null, + "fld_precision": null, + "fld_fromdate_id__fld_name": null, + "fld_dfault": null, + "fld_indexable": false, + "fld_autocomp": "0", + "fld_groupby": false, + "fld_updall": true, + "fld_case": null, + "fld_righttoleft": false, + "fld_rendering": null, + "fld_speech": null, + "fld_calc": null, + "fld_objlist": null, + "fld_comment": null, + "fld_classification": null, + "row_module_id__mdl_name": "AIBySimplicite", + "fld_incrementsyntax": null } }, { - "object": "Template", - "userkey": "AIField", + "object": "Field", + "userkey": "aiMhPreview", + "item": { + "fld_name": "aiMhPreview", + "fld_dbname": "ai_mh_preview", + "fld_visible": "2", + "fld_updatable": ["0"], + "fld_required": false, + "fld_fonctid": false, + "fld_research": null, + "fld_researchreq": null, + "fld_sort": "C", + "fld_more": false, + "fld_listmore": false, + "fld_listsum": null, + "fld_exportable": true, + "fld_tray": null, + "fld_type": "11", + "fld_type_id__flt_code": null, + "fld_list_id__lov_name": null, + "fld_copy": true, + "fld_size": 10000, + "fld_minsize": null, + "fld_precision": null, + "fld_fromdate_id__fld_name": null, + "fld_dfault": null, + "fld_indexable": false, + "fld_autocomp": "0", + "fld_groupby": false, + "fld_updall": true, + "fld_case": null, + "fld_righttoleft": false, + "fld_rendering": null, + "fld_speech": null, + "fld_calc": null, + "fld_objlist": null, + "fld_comment": null, + "fld_classification": null, + "row_module_id__mdl_name": "AIBySimplicite", + "fld_incrementsyntax": null + } + }, + { + "object": "Field", + "userkey": "aiMhPrompt", + "item": { + "fld_name": "aiMhPrompt", + "fld_dbname": "ai_mh_prompt", + "fld_visible": "3", + "fld_updatable": [ + "3", + "2" + ], + "fld_required": false, + "fld_fonctid": false, + "fld_research": "1", + "fld_researchreq": "0", + "fld_sort": "C", + "fld_more": false, + "fld_listmore": false, + "fld_listsum": null, + "fld_exportable": true, + "fld_tray": null, + "fld_type": "3", + "fld_type_id__flt_code": null, + "fld_list_id__lov_name": null, + "fld_copy": true, + "fld_size": 1000, + "fld_minsize": null, + "fld_precision": null, + "fld_fromdate_id__fld_name": null, + "fld_dfault": null, + "fld_indexable": false, + "fld_autocomp": "0", + "fld_groupby": false, + "fld_updall": true, + "fld_case": null, + "fld_righttoleft": false, + "fld_rendering": null, + "fld_speech": null, + "fld_calc": null, + "fld_objlist": null, + "fld_comment": null, + "fld_classification": null, + "row_module_id__mdl_name": "AIBySimplicite", + "fld_incrementsyntax": null + } + }, + { + "object": "Field", + "userkey": "aiMhSimpleuserId", + "item": { + "fld_name": "aiMhSimpleuserId", + "fld_dbname": "ai_mh_simpleuser_id", + "fld_visible": "3", + "fld_updatable": [ + "2", + "3" + ], + "fld_required": true, + "fld_fonctid": true, + "fld_research": "1", + "fld_researchreq": "0", + "fld_sort": "C", + "fld_more": false, + "fld_listmore": false, + "fld_listsum": null, + "fld_exportable": true, + "fld_tray": null, + "fld_type": "0", + "fld_type_id__flt_code": null, + "fld_list_id__lov_name": null, + "fld_copy": true, + "fld_size": 11, + "fld_minsize": null, + "fld_precision": null, + "fld_fromdate_id__fld_name": null, + "fld_dfault": "[USERID]", + "fld_indexable": false, + "fld_autocomp": "0", + "fld_groupby": false, + "fld_updall": true, + "fld_case": null, + "fld_righttoleft": false, + "fld_rendering": null, + "fld_speech": null, + "fld_calc": null, + "fld_objlist": null, + "fld_comment": null, + "fld_classification": null, + "row_module_id__mdl_name": "AIBySimplicite", + "fld_incrementsyntax": null + } + }, + { + "object": "Field", + "userkey": "aiPrvCompletionUrl", + "item": { + "fld_name": "aiPrvCompletionUrl", + "fld_dbname": "ai_prv_completion_url", + "fld_visible": "2", + "fld_updatable": [ + "2", + "3" + ], + "fld_required": true, + "fld_fonctid": false, + "fld_research": "1", + "fld_researchreq": "0", + "fld_sort": "C", + "fld_more": false, + "fld_listmore": false, + "fld_listsum": null, + "fld_exportable": true, + "fld_tray": null, + "fld_type": "10", + "fld_type_id__flt_code": null, + "fld_list_id__lov_name": null, + "fld_copy": true, + "fld_size": 100, + "fld_minsize": null, + "fld_precision": null, + "fld_fromdate_id__fld_name": null, + "fld_dfault": "[VALUE:aiPrvDefaultUrl]+\"v1/chat/completions\"", + "fld_indexable": false, + "fld_autocomp": "0", + "fld_groupby": false, + "fld_updall": true, + "fld_case": null, + "fld_righttoleft": false, + "fld_rendering": null, + "fld_speech": null, + "fld_calc": null, + "fld_objlist": null, + "fld_comment": null, + "fld_classification": null, + "row_module_id__mdl_name": "AIBySimplicite", + "fld_incrementsyntax": null + } + }, + { + "object": "Field", + "userkey": "aiPrvDataModel", + "item": { + "fld_name": "aiPrvDataModel", + "fld_dbname": "ai_prv_data_model", + "fld_visible": "2", + "fld_updatable": [ + "2", + "3" + ], + "fld_required": true, + "fld_fonctid": false, + "fld_research": "1", + "fld_researchreq": "0", + "fld_sort": "C", + "fld_more": false, + "fld_listmore": false, + "fld_listsum": null, + "fld_exportable": true, + "fld_tray": null, + "fld_type": "13", + "fld_type_id__flt_code": null, + "fld_list_id__lov_name": null, + "fld_copy": true, + "fld_size": 1000, + "fld_minsize": null, + "fld_precision": null, + "fld_fromdate_id__fld_name": null, + "fld_dfault": "{}", + "fld_indexable": false, + "fld_autocomp": "0", + "fld_groupby": false, + "fld_updall": true, + "fld_case": null, + "fld_righttoleft": false, + "fld_rendering": "JSON", + "fld_speech": null, + "fld_calc": null, + "fld_objlist": null, + "fld_comment": null, + "fld_classification": null, + "row_module_id__mdl_name": "AIBySimplicite", + "fld_incrementsyntax": null + } + }, + { + "object": "Field", + "userkey": "aiPrvDefaultUrl", + "item": { + "fld_name": "aiPrvDefaultUrl", + "fld_dbname": "ai_prv_default_url", + "fld_visible": "2", + "fld_updatable": [ + "2", + "3" + ], + "fld_required": true, + "fld_fonctid": false, + "fld_research": "1", + "fld_researchreq": "0", + "fld_sort": "C", + "fld_more": false, + "fld_listmore": false, + "fld_listsum": null, + "fld_exportable": true, + "fld_tray": null, + "fld_type": "10", + "fld_type_id__flt_code": null, + "fld_list_id__lov_name": null, + "fld_copy": true, + "fld_size": 100, + "fld_minsize": null, + "fld_precision": null, + "fld_fromdate_id__fld_name": null, + "fld_dfault": null, + "fld_indexable": false, + "fld_autocomp": "0", + "fld_groupby": false, + "fld_updall": true, + "fld_case": null, + "fld_righttoleft": false, + "fld_rendering": null, + "fld_speech": null, + "fld_calc": null, + "fld_objlist": null, + "fld_comment": null, + "fld_classification": null, + "row_module_id__mdl_name": "AIBySimplicite", + "fld_incrementsyntax": null + } + }, + { + "object": "Field", + "userkey": "aiPrvHelp", + "item": { + "fld_name": "aiPrvHelp", + "fld_dbname": "ai_prv_help", + "fld_visible": "2", + "fld_updatable": [ + "2", + "3" + ], + "fld_required": false, + "fld_fonctid": false, + "fld_research": null, + "fld_researchreq": "0", + "fld_sort": "C", + "fld_more": false, + "fld_listmore": false, + "fld_listsum": null, + "fld_exportable": true, + "fld_tray": null, + "fld_type": "13", + "fld_type_id__flt_code": null, + "fld_list_id__lov_name": null, + "fld_copy": true, + "fld_size": 5000, + "fld_minsize": null, + "fld_precision": null, + "fld_fromdate_id__fld_name": null, + "fld_dfault": null, + "fld_indexable": false, + "fld_autocomp": "0", + "fld_groupby": false, + "fld_updall": true, + "fld_case": null, + "fld_righttoleft": false, + "fld_rendering": "MD", + "fld_speech": null, + "fld_calc": null, + "fld_objlist": null, + "fld_comment": null, + "fld_classification": null, + "row_module_id__mdl_name": "AIBySimplicite", + "fld_incrementsyntax": null + } + }, + { + "object": "Field", + "userkey": "aiPrvModelsUrl", + "item": { + "fld_name": "aiPrvModelsUrl", + "fld_dbname": "ai_prv_models_url", + "fld_visible": "2", + "fld_updatable": [ + "2", + "3" + ], + "fld_required": true, + "fld_fonctid": false, + "fld_research": "1", + "fld_researchreq": "0", + "fld_sort": "C", + "fld_more": false, + "fld_listmore": false, + "fld_listsum": null, + "fld_exportable": true, + "fld_tray": null, + "fld_type": "10", + "fld_type_id__flt_code": null, + "fld_list_id__lov_name": null, + "fld_copy": true, + "fld_size": 100, + "fld_minsize": null, + "fld_precision": null, + "fld_fromdate_id__fld_name": null, + "fld_dfault": "[VALUE:aiPrvDefaultUrl]+\"v1/models\"", + "fld_indexable": false, + "fld_autocomp": "0", + "fld_groupby": false, + "fld_updall": true, + "fld_case": null, + "fld_righttoleft": false, + "fld_rendering": null, + "fld_speech": null, + "fld_calc": null, + "fld_objlist": null, + "fld_comment": null, + "fld_classification": null, + "row_module_id__mdl_name": "AIBySimplicite", + "fld_incrementsyntax": null + } + }, + { + "object": "Field", + "userkey": "aiPrvPingUrl", + "item": { + "fld_name": "aiPrvPingUrl", + "fld_dbname": "ai_prv_ping_url", + "fld_visible": "2", + "fld_updatable": [ + "2", + "3" + ], + "fld_required": false, + "fld_fonctid": false, + "fld_research": "1", + "fld_researchreq": "0", + "fld_sort": "C", + "fld_more": false, + "fld_listmore": false, + "fld_listsum": null, + "fld_exportable": true, + "fld_tray": null, + "fld_type": "10", + "fld_type_id__flt_code": null, + "fld_list_id__lov_name": null, + "fld_copy": true, + "fld_size": 100, + "fld_minsize": null, + "fld_precision": null, + "fld_fromdate_id__fld_name": null, + "fld_dfault": "[VALUE:aiPrvDefaultUrl]+\"v1/ping\"", + "fld_indexable": false, + "fld_autocomp": "0", + "fld_groupby": false, + "fld_updall": true, + "fld_case": null, + "fld_righttoleft": false, + "fld_rendering": null, + "fld_speech": null, + "fld_calc": null, + "fld_objlist": null, + "fld_comment": null, + "fld_classification": null, + "row_module_id__mdl_name": "AIBySimplicite", + "fld_incrementsyntax": null + } + }, + { + "object": "Field", + "userkey": "aiPrvProvider", + "item": { + "fld_name": "aiPrvProvider", + "fld_dbname": "ai_prv_provider", + "fld_visible": "3", + "fld_updatable": [ + "2", + "3" + ], + "fld_required": true, + "fld_fonctid": true, + "fld_research": "1", + "fld_researchreq": "0", + "fld_sort": "C", + "fld_more": false, + "fld_listmore": false, + "fld_listsum": null, + "fld_exportable": true, + "fld_tray": null, + "fld_type": "3", + "fld_type_id__flt_code": null, + "fld_list_id__lov_name": null, + "fld_copy": true, + "fld_size": 100, + "fld_minsize": null, + "fld_precision": null, + "fld_fromdate_id__fld_name": null, + "fld_dfault": null, + "fld_indexable": false, + "fld_autocomp": "0", + "fld_groupby": false, + "fld_updall": true, + "fld_case": null, + "fld_righttoleft": false, + "fld_rendering": null, + "fld_speech": null, + "fld_calc": null, + "fld_objlist": null, + "fld_comment": null, + "fld_classification": null, + "row_module_id__mdl_name": "AIBySimplicite", + "fld_incrementsyntax": null + } + }, + { + "object": "Field", + "userkey": "aiSelectProcess", + "item": { + "fld_name": "aiSelectProcess", + "fld_dbname": null, + "fld_visible": "3", + "fld_updatable": [ + "2", + "3" + ], + "fld_required": true, + "fld_fonctid": false, + "fld_research": null, + "fld_researchreq": "0", + "fld_sort": "C", + "fld_more": false, + "fld_listmore": false, + "fld_listsum": null, + "fld_exportable": true, + "fld_tray": null, + "fld_type": "8", + "fld_type_id__flt_code": null, + "fld_list_id__lov_name": null, + "fld_copy": true, + "fld_size": 1, + "fld_minsize": null, + "fld_precision": null, + "fld_fromdate_id__fld_name": null, + "fld_dfault": "0", + "fld_indexable": false, + "fld_autocomp": "0", + "fld_groupby": false, + "fld_updall": true, + "fld_case": null, + "fld_righttoleft": false, + "fld_rendering": null, + "fld_speech": null, + "fld_calc": null, + "fld_objlist": null, + "fld_comment": null, + "fld_classification": null, + "row_module_id__mdl_name": "AIBySimplicite", + "fld_incrementsyntax": null + } + } + ] + }, + { + "object": "Template", + "label": "Templates", + "icon": "img/system/template", + "field": "row_module_id", + "list": [ + { + "object": "Template", + "userkey": "AiConfiguration", + "item": { + "tpl_name": "AiConfiguration", + "tpl_ui": "
<\/div>", + "tpl_min": null, + "tpl_image": null, + "tpl_grid": null, + "tpl_context": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "Template", + "userkey": "AIExemple", + "item": { + "tpl_name": "AIExemple", + "tpl_ui": "
\n
<\/div>\n
<\/div>\n
\n
\n
<\/div>\n
<\/div>\n
<\/div>\n \n <\/div>\n
\n
\n
\n
<\/div>\n <\/div>\n
\n
<\/div>\n <\/div>\n <\/div>\n <\/div>\n <\/div>\n<\/div>", + "tpl_min": null, + "tpl_image": null, + "tpl_grid": null, + "tpl_context": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "Template", + "userkey": "AIField", + "item": { + "tpl_name": "AIField", + "tpl_ui": "
\n
<\/div>\n
<\/div>\n
<\/div>\n
<\/div>\n
<\/div>\n<\/div>", + "tpl_min": null, + "tpl_image": null, + "tpl_grid": null, + "tpl_context": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "Template", + "userkey": "AiGroupGuiDesc", + "item": { + "tpl_name": "AiGroupGuiDesc", + "tpl_ui": "
<\/div>", + "tpl_min": null, + "tpl_image": null, + "tpl_grid": null, + "tpl_context": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "Template", + "userkey": "AiGroupView", + "item": { + "tpl_name": "AiGroupView", + "tpl_ui": "
<\/div>", + "tpl_min": null, + "tpl_image": null, + "tpl_grid": null, + "tpl_context": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "Template", + "userkey": "AiMetricsHist", + "item": { + "tpl_name": "AiMetricsHist", + "tpl_ui": "
\n
-
- - - +
+ +
+ + + +
diff --git a/resources/ObjectExternal/AIMetricsChat/SCRIPT.js b/resources/ObjectExternal/AIMetricsChat/SCRIPT.js index bc80a58..b5b3b95 100644 --- a/resources/ObjectExternal/AIMetricsChat/SCRIPT.js +++ b/resources/ObjectExternal/AIMetricsChat/SCRIPT.js @@ -232,7 +232,7 @@ var AIMetricsChat = AIMetricsChat || (function() { displayHistItem(res.aiMhPreview,res.aiMhMetrics); }; deleteicon.onclick = function(){ - $ui.confirm({title:$T('AI_CONFIRM_DEL'),onOk:function(){ + $ui.confirm({content:$T('AI_CONFIRM_DEL'),onOk:function(){ deleteObj(res.row_id); }}); diff --git a/resources/ObjectExternal/AIProcessResource/CHAT_BOT_CSS.less b/resources/ObjectExternal/AIProcessResource/CHAT_BOT_CSS.less index ad5bd24..40dff70 100644 --- a/resources/ObjectExternal/AIProcessResource/CHAT_BOT_CSS.less +++ b/resources/ObjectExternal/AIProcessResource/CHAT_BOT_CSS.less @@ -30,18 +30,16 @@ background-color: #e2e2e2; } - .minified-img-chat{ - height: 60px; - width: auto; - padding: 5px; - margin-bottom: 0px; - } - .input-area{ + +/* .input-area{ background-color: #e2e2e2; border-radius: 3px; - } + } */ .img{ max-width: 100%; max-height: 50vh; } + .big-icon{ + font-size: 50px; + } } \ No newline at end of file diff --git a/resources/ObjectExternal/AIProcessResource/CHAT_BOT_MODEL.html b/resources/ObjectExternal/AIProcessResource/CHAT_BOT_MODEL.html index d655122..b6d4104 100644 --- a/resources/ObjectExternal/AIProcessResource/CHAT_BOT_MODEL.html +++ b/resources/ObjectExternal/AIProcessResource/CHAT_BOT_MODEL.html @@ -13,12 +13,13 @@ {{botMesage}}
-
+
+
diff --git a/resources/ObjectExternal/AIProcessResource/CHAT_BOT_SCRIPT.js b/resources/ObjectExternal/AIProcessResource/CHAT_BOT_SCRIPT.js index 5cd034f..c694135 100644 --- a/resources/ObjectExternal/AIProcessResource/CHAT_BOT_SCRIPT.js +++ b/resources/ObjectExternal/AIProcessResource/CHAT_BOT_SCRIPT.js @@ -5,6 +5,9 @@ var AIWfChatBot = AIWfChatBot || (function() { const app = $ui.getApp(); let userName ="user"; let image_base64 =""; + // Params + let useAsync = true; // use async callback pattern + let url = Simplicite.ROOT+"/ext/AIRestAPI"; // authenticated webservice function resizeUp(){ const vh = window.innerHeight * 0.01; const maxHeight = `${45 * vh - 250}px`; @@ -33,6 +36,8 @@ var AIWfChatBot = AIWfChatBot || (function() { }); $("#add-img").addClass("fas fa-upload"); $("#take-img").addClass("fas fa-camera"); + $("#speech").addClass("fas fa-microphone"); + console.log("Render chat"); botTemplate = $("#botTemplate").html(); userTemplate = $("#userTemplate").html(); setBotName(); @@ -87,9 +92,7 @@ var AIWfChatBot = AIWfChatBot || (function() { chatMessages.innerHTML += userCompletMessage; chatMessages.innerHTML += botTemplate; $("#send-button").attr("disabled", "disabled"); - // Params - let useAsync = true; // use async callback pattern - let url = Simplicite.ROOT+"/ext/AIRestAPI"; // authenticated webservice + let prompt =[]; prompt.push({"type":"text","text":userMessage}); if(userImage){ @@ -171,10 +174,81 @@ var AIWfChatBot = AIWfChatBot || (function() { }); return false; } + let mediaRecorder; + let audioChunks = []; + let isCancelled = false; + // Fonction pour démarrer l'enregistrement + async function startRecording() { + const stream = await navigator.mediaDevices.getUserMedia({ audio: true }); + + mediaRecorder = new MediaRecorder(stream); + + mediaRecorder.ondataavailable = function(event) { + audioChunks.push(event.data); + }; + + mediaRecorder.onstop = function() { + if(!isCancelled){ + const audioBlob = new Blob(audioChunks, { type: 'audio/webm' }); + audioChunks = []; + const formData = new FormData(); + formData.append('file', audioBlob, 'audio.webm'); + formData.append('reqType', 'audio'); + convertBlobToBase64(audioBlob).then(function(audio64) { + audio64 = audio64.split(",")[1]; + const jsonData = { + file: audio64, + reqType: 'audio' + }; + app._call(useAsync, url, jsonData, function callback(botResponse){ + console.log(botResponse); + console.log(botResponse.msg); + let json = JSON.parse(botResponse.msg); + console.log(json.text); + $("#module_user_message").val(json.text); + }); + }); + + + }else{ + isCancelled = false; + + } + stream.getTracks().forEach(track => track.stop()); + }; + + mediaRecorder.start(); + } + function convertBlobToBase64(blob) { + return new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.onloadend = function() { + resolve(reader.result); // Extraire la partie Base64 de la chaîne data URL + }; + reader.onerror = function(error) { + reject(error); + }; + reader.readAsDataURL(blob); + }); + } + // Fonction pour arrêter l'enregistrement + function stopRecording() { + mediaRecorder.stop(); + } + + function cancelRecording() { + isCancelled = true; + mediaRecorder.stop(); + } + function getSpeech(){ + startRecording(); + $ui.confirm({content:"", onOk:function(){stopRecording();}, onCancel:function(){cancelRecording();}}); + } return { sendModuleMessage: sendModuleMessage, addImage: addImage, takeImage: takeImage, + getSpeech: getSpeech, render: render, resizeUp: resizeUp }; diff --git a/src/com/simplicite/commons/AIBySimplicite/AITools.java b/src/com/simplicite/commons/AIBySimplicite/AITools.java index d8942b3..0f70c9a 100644 --- a/src/com/simplicite/commons/AIBySimplicite/AITools.java +++ b/src/com/simplicite/commons/AIBySimplicite/AITools.java @@ -21,6 +21,8 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.simplicite.util.tools.*; +import ch.simschla.minify.cli.App; + @@ -1135,16 +1137,76 @@ public static String getBotName(){ public static int getHistDepth(){ return aiHistDepth; } + public static String speechToText(String audioBase64){ + Grant g = Grant.getSystemAdmin(); + String apiUrl = getAIParam("stt_url"); + if(Tool.isEmpty(apiUrl)){ + AppLog.info("STT url not set", g); + return Message.formatWarning("clasique stt",null,null); + } + try{ + URI url = new URI(apiUrl); + HttpURLConnection connection = (HttpURLConnection) url.toURL().openConnection(); + connection.setRequestMethod("POST"); + connection.setRequestProperty("Authorization", "Bearer " + apiKey); + connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=---Boundary"); + connection.setDoOutput(true); + + // Convertir la chaîne Base64 en octets (décodage) + byte[] audioBytes = Base64.getDecoder().decode(audioBase64); + + // Préparer le corps de la requête multipart/form-data + try (DataOutputStream request = new DataOutputStream(connection.getOutputStream())) { + String boundary = "---Boundary"; + + // Ajout du fichier audio + request.writeBytes("--" + boundary + "\r\n"); + request.writeBytes("Content-Disposition: form-data; name=\"file\"; filename=\"audio.webm\"\r\n"); + request.writeBytes("Content-Type: audio/webm\r\n\r\n"); + request.write(audioBytes); // Écrire les octets du fichier audio + request.writeBytes("\r\n"); + // Ajout du modèle "whisper-1" + request.writeBytes("--" + boundary + "\r\n"); + request.writeBytes("Content-Disposition: form-data; name=\"model\"\r\n\r\n"); + request.writeBytes("whisper-1\r\n"); + + // Ajout de la langue + request.writeBytes("--" + boundary + "\r\n"); + request.writeBytes("Content-Disposition: form-data; name=\"language\"\r\n\r\n"); + request.writeBytes("fr\r\n"); + + // Fin du multipart/form-data + request.writeBytes("--" + boundary + "--\r\n"); + + request.flush(); + } + int responseCode = connection.getResponseCode(); + if (responseCode == HttpURLConnection.HTTP_OK) { + String res = readResponse(connection, g); + AppLog.info("STT success "+res , g); + return res; + + }else{ + JSONObject error = readError(connection,responseCode,g); + if(Tool.isEmpty(error)) + return Message.formatError(AI_PING_ERROR,null,null); + return Message.formatError(AI_PING_ERROR,error.optString("code")+": "+error.optString(ERROR_KEY),null); + } + }catch (IOException | URISyntaxException e) { + AppLog.error(e,g); + return Message.formatError(AI_PING_ERROR,e.getMessage(),null); + } + } public static JSONObject getParameters(boolean forDisplay,String lang){ JSONObject params = new JSONObject(aiApiParam,JSONObject.getNames(aiApiParam)); if(!forDisplay) return params; JSONObject defaultParam = new JSONObject(Grant.getSystemAdmin().T("AI_DEFAULT_PARAM")); - JSONArray specificParam = new JSONArray(); + JSONArray specificParam = new JSONArray(); JSONObject newParam = new JSONObject(); JSONArray leftColumn = new JSONArray(); JSONArray rightColumn = new JSONArray(); - for(String key: params.keySet()){ + for(String key: params.keySet()){ if(API_KEY.equals(key)) continue; if(defaultParam.has(key)){ JSONObject data = new JSONObject().put("field", key).put("value", getDisplayField(key,params.get(key),defaultParam.optJSONObject(key))).put(LABEL_KEY, optLabel(key,defaultParam,lang)); @@ -1157,7 +1219,7 @@ public static JSONObject getParameters(boolean forDisplay,String lang){ specificParam.put(new JSONObject().put("key", key).put("value", checkPrivate(params,key))); } - } + } newParam.put("columns", new JSONArray() .put(new JSONObject().put("class",HTML_LEFT_COLUMN_ID).put("fields", leftColumn)) .put(new JSONObject().put("class","right_column").put("fields", rightColumn)) diff --git a/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java b/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java index 904cb88..74e0b11 100644 --- a/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java +++ b/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java @@ -6,6 +6,9 @@ import com.simplicite.util.*; import com.simplicite.util.exceptions.*; import com.simplicite.util.tools.*; + +import ch.simschla.minify.cli.App; + import org.json.JSONArray; import org.json.JSONObject; @@ -27,6 +30,7 @@ public Object get(Parameters params) throws HTTPException { public Object post(Parameters params) throws HTTPException { try { + AppLog.info(params.toString(), getGrant()); String prompt =params.getParameter(PARAMS_PROMPT_KEY); String objectName = params.getParameter(JSON_OBJECT_NAME_KEY); String type = params.getParameter(JSON_REQ_TYPE); @@ -61,6 +65,11 @@ public Object post(Parameters params) throws HTTPException { ping = Message.formatInfo("AI_SUCCESS_PING",null,null); } return new JSONObject().put("msg",ping); + case "audio": + String audio64 = params.getParameter("file"); + String text = AITools.speechToText(audio64); + AppLog.info(params.toString(), getGrant()); + return new JSONObject().put("msg",text); default: if(Tool.isEmpty(prompt) && !Tool.isEmpty(req) && req.has(PARAMS_PROMPT_KEY)){ return updateFieldByRequest(req); From 4ccfc842d27eb5c7ca15162318844d84485b17b9 Mon Sep 17 00:00:00 2001 From: "designer (Designer)" <> Date: Tue, 1 Oct 2024 18:17:18 +0200 Subject: [PATCH 47/74] global chat gestion and better style, Speech to text completion --- AIBySimplicite-openapi-3.0.2.yml | 17 +- AIBySimplicite-swagger-2.0.yml | 16 +- AIBySimplicite.json | 324 +++++++++++++++- README.md | 1 + files/Model/Model-AiSettingsProcess.png | Bin 28480 -> 28488 bytes files/Model/Model-AiSettingsProcess.svg | 2 +- module-info.json | 6 +- pom.xml | 4 +- resources/Disposition/default/AI_STYLE.less | 84 ++++- resources/Disposition/default/AiJsTools.js | 347 ++++++++++++++++-- resources/ObjectExternal/AIChatBot/HTML.html | 7 +- resources/ObjectExternal/AIChatBot/SCRIPT.js | 65 ++-- .../ObjectExternal/AIChatBot/STYLES.less | 20 - .../ObjectExternal/AIMetricsChat/HTML.html | 38 +- .../ObjectExternal/AIMetricsChat/SCRIPT.js | 101 +++-- .../ObjectExternal/AIMetricsChat/STYLES.less | 23 +- .../AIProcessResource/CHAT_BOT_CSS.less | 28 +- .../AIProcessResource/CHAT_BOT_MODEL.html | 13 +- .../AIProcessResource/CHAT_BOT_SCRIPT.js | 188 ++-------- .../AISettingsKeyAndEPTemplate.html | 2 +- .../commons/AIBySimplicite/AITools.java | 16 +- .../extobjects/AIBySimplicite/AIExpTool.java | 15 +- .../AIBySimplicite/AIMetricsChat.java | 1 + .../extobjects/AIBySimplicite/AIRestAPI.java | 6 +- .../objects/AIBySimplicite/AIProvider.java | 1 + .../workflows/AIBySimplicite/AIGenData.java | 25 +- .../AIBySimplicite/AIModuleCreate.java | 103 ++++-- .../AIBySimplicite/AiSettingsProcess.java | 3 + 28 files changed, 1029 insertions(+), 427 deletions(-) diff --git a/AIBySimplicite-openapi-3.0.2.yml b/AIBySimplicite-openapi-3.0.2.yml index 74b857e..6fa04ec 100644 --- a/AIBySimplicite-openapi-3.0.2.yml +++ b/AIBySimplicite-openapi-3.0.2.yml @@ -2,7 +2,7 @@ # / __(_)_ __ _ __| (_)__(_) |_ /_/ # \__ \ | ' \| '_ \ | / _| | _/ -_) # |___/_|_|_|_| .__/_|_\__|_|\__\___| -# |_| Module: AIBySimplicite 0.22 +# |_| Module: AIBySimplicite 0.23 components: schemas: Error404: @@ -171,6 +171,9 @@ components: aiPrvDefaultUrl: description: Default url type: string + aiPrvSttUrl: + description: Speech to text endpoint url + type: string aiPrvPingUrl: description: Ping url type: string @@ -181,7 +184,7 @@ components: description: Specific parameter type: string aiPrvCompletionUrl: - description: Completion url + description: Completion endpoint url type: string aiPrvHelp: description: Key and endpoints help @@ -1542,7 +1545,7 @@ paths: type: string in: query name: aiPrvCompletionUrl - description: Search filter for Completion url + description: Search filter for Completion endpoint url required: false - schema: type: string @@ -1550,6 +1553,12 @@ paths: name: aiPrvPingUrl description: Search filter for Ping url required: false + - schema: + type: string + in: query + name: aiPrvSttUrl + description: Search filter for Speech to text endpoint url + required: false tags: - AIProvider info: @@ -1562,7 +1571,7 @@ info: email: contact@simplicitesoftware.com description: API for module AIBySimplicite title: AIBySimplicite - version: '0.22' + version: '0.23' tags: - name: AiGroupGuiDesc description: Group gui description diff --git a/AIBySimplicite-swagger-2.0.yml b/AIBySimplicite-swagger-2.0.yml index d675258..94f5466 100644 --- a/AIBySimplicite-swagger-2.0.yml +++ b/AIBySimplicite-swagger-2.0.yml @@ -2,7 +2,7 @@ # / __(_)_ __ _ __| (_)__(_) |_ /_/ # \__ \ | ' \| '_ \ | / _| | _/ -_) # |___/_|_|_|_| .__/_|_\__|_|\__\___| -# |_| Module: AIBySimplicite 0.22 +# |_| Module: AIBySimplicite 0.23 basePath: /api paths: /rest/AiMetricsHist: @@ -1085,7 +1085,7 @@ paths: required: false - in: query name: aiPrvCompletionUrl - description: Search filter for Completion url + description: Search filter for Completion endpoint url type: string required: false - in: query @@ -1093,6 +1093,11 @@ paths: description: Search filter for Ping url type: string required: false + - in: query + name: aiPrvSttUrl + description: Search filter for Speech to text endpoint url + type: string + required: false tags: - AIProvider securityDefinitions: @@ -1269,6 +1274,9 @@ definitions: aiPrvDefaultUrl: description: Default url type: string + aiPrvSttUrl: + description: Speech to text endpoint url + type: string aiPrvPingUrl: description: Ping url type: string @@ -1279,7 +1287,7 @@ definitions: description: Specific parameter type: string aiPrvCompletionUrl: - description: Completion url + description: Completion endpoint url type: string aiPrvHelp: description: Key and endpoints help @@ -1347,7 +1355,7 @@ info: email: contact@simplicitesoftware.com description: API for module AIBySimplicite title: AIBySimplicite - version: '0.22' + version: '0.23' tags: - name: AiGroupGuiDesc description: Group gui description diff --git a/AIBySimplicite.json b/AIBySimplicite.json index 8e589c6..1274176 100644 --- a/AIBySimplicite.json +++ b/AIBySimplicite.json @@ -4,7 +4,7 @@ "item": { "mdl_name": "AIBySimplicite", "mdl_prefix": "ai", - "mdl_version": "0.22", + "mdl_version": "0.23", "mdl_type": "T", "mdl_icon": null, "mdl_url": "{\n \"origin\": {\"uri\": \"https://github.com/simplicitesoftware/module_ai.git\"},\n \"type\": \"git\",\n \"branch\": \"6.1\"\n}", @@ -139,7 +139,7 @@ "mod_doc": { "path": "files/Model/Model-AiSettingsProcess.svg", "mime": "image/svg+xml", - "name": "Model-AiSettingsProcess.svg" + "name": "model.svg" }, "mod_image": { "path": "files/Model/Model-AiSettingsProcess.png", @@ -334,7 +334,7 @@ "lov_name": "TEXT", "lov_code": "AI_DEFAULT_PARAM", "lov_lang": "ANY", - "lov_value": "{\n \"bot_name\": {\n \"type\": \"text\",\n \"defaultValue\": \"George\",\n \"help\": \"The name of the bot that will be displayed to users.\",\n \"label\": {\n \"FRA\": \"Nom du bot\",\n \"ENU\": \"Bot Name\"\n },\n \"left_column\": true\n },\n \"code_max_token\": {\n \"type\": \"text\",\n \"defaultValue\": \"2000\",\n \"help\": \"The maximum number of tokens the bot can handle for all technical calls, including chart and modules generation.\",\n \"label\": {\n \"FRA\": \"Nombre maximum de jetons pour appels techniques\",\n \"ENU\": \"Max Token for Technical Calls\"\n }\n },\n \"default_max_token\": {\n \"type\": \"text\",\n \"defaultValue\": \"1500\",\n \"help\": \"The maximum number of tokens the bot can handle by default for each interaction.\",\n \"label\": {\n \"FRA\": \"Nombre maximum de jetons par défaut\",\n \"ENU\": \"Default Max Token\"\n }\n },\n \"hist_depth\": {\n \"type\": \"text\",\n \"defaultValue\": \"3\",\n \"help\": \"The number of previous messages the bot will consider when generating a new response.\",\n \"label\": {\n \"FRA\": \"Profondeur de l'historique\",\n \"ENU\": \"History Depth\"\n },\n \"left_column\": true\n },\n \"provider\": {\n \"type\": \"text\",\n \"defaultValue\": \"\",\n \"help\": \"Name of the model provider, used in the data disclaimer.\",\n \"label\": {\n \"FRA\": \"Fournisseur\",\n \"ENU\": \"Provider\"\n },\n \"left_column\": true\n },\n \"showDataDisclaimer\": {\n \"type\": \"boolean\",\n \"defaultValue\": true,\n \"help\": \"Indicates whether the data disclaimer should be shown to users.\",\n \"label\": {\n \"FRA\": \"Afficher la clause de non-responsabilité des données\",\n \"ENU\": \"Show Data Disclaimer\"\n },\n \"left_column\": true\n },\n \"model\": {\n \"type\": \"select\",\n \"defaultValue\": \"\",\n \"help\": \"Select the AI model to use for interactions.\",\n \"label\": {\n \"FRA\": \"Modèle\",\n \"ENU\": \"Model\"\n },\n \"left_column\": true\n },\n \"api_key\": {\n \"type\": \"text\",\n \"defaultValue\": \"\",\n \"help\": \"API key used to authenticate requests to the AI server.\",\n \"label\": {\n \"FRA\": \"Clé API\",\n \"ENU\": \"API Key\"\n }\n },\n \"completion_url\": {\n \"type\": \"url\",\n \"defaultValue\": \"\",\n \"help\": \"URL where text completion requests will be sent.\",\n \"label\": {\n \"FRA\": \"URL de complétion\",\n \"ENU\": \"Completion URL\"\n }\n },\n \"ping_url\": {\n \"type\": \"url\",\n \"defaultValue\": \"\",\n \"help\": \"URL used to check the availability of the AI server.\",\n \"label\": {\n \"FRA\": \"URL de ping\",\n \"ENU\": \"Ping URL\"\n }\n }\n}", + "lov_value": "{\n \"bot_name\": {\n \"type\": \"text\",\n \"defaultValue\": \"George\",\n \"help\": \"The name of the bot that will be displayed to users.\",\n \"label\": {\n \"FRA\": \"Nom du bot\",\n \"ENU\": \"Bot Name\"\n },\n \"left_column\": true\n },\n \"code_max_token\": {\n \"type\": \"text\",\n \"defaultValue\": \"2000\",\n \"help\": \"The maximum number of tokens the bot can handle for all technical calls, including chart and modules generation.\",\n \"label\": {\n \"FRA\": \"Nombre maximum de jetons pour appels techniques\",\n \"ENU\": \"Max Token for Technical Calls\"\n }\n },\n \"default_max_token\": {\n \"type\": \"text\",\n \"defaultValue\": \"1500\",\n \"help\": \"The maximum number of tokens the bot can handle by default for each interaction.\",\n \"label\": {\n \"FRA\": \"Nombre maximum de jetons par défaut\",\n \"ENU\": \"Default Max Token\"\n }\n },\n \"hist_depth\": {\n \"type\": \"text\",\n \"defaultValue\": \"3\",\n \"help\": \"The number of previous messages the bot will consider when generating a new response.\",\n \"label\": {\n \"FRA\": \"Profondeur de l'historique\",\n \"ENU\": \"History Depth\"\n },\n \"left_column\": true\n },\n \"provider\": {\n \"type\": \"text\",\n \"defaultValue\": \"\",\n \"help\": \"Name of the model provider, used in the data disclaimer.\",\n \"label\": {\n \"FRA\": \"Fournisseur\",\n \"ENU\": \"Provider\"\n },\n \"left_column\": true\n },\n \"showDataDisclaimer\": {\n \"type\": \"boolean\",\n \"defaultValue\": true,\n \"help\": \"Indicates whether the data disclaimer should be shown to users.\",\n \"label\": {\n \"FRA\": \"Afficher la clause de non-responsabilité des données\",\n \"ENU\": \"Show Data Disclaimer\"\n },\n \"left_column\": true\n },\n \"model\": {\n \"type\": \"select\",\n \"defaultValue\": \"\",\n \"help\": \"Select the AI model to use for interactions.\",\n \"label\": {\n \"FRA\": \"Modèle\",\n \"ENU\": \"Model\"\n },\n \"left_column\": true\n },\n \"api_key\": {\n \"type\": \"text\",\n \"defaultValue\": \"\",\n \"help\": \"API key used to authenticate requests to the AI server.\",\n \"label\": {\n \"FRA\": \"Clé API\",\n \"ENU\": \"API Key\"\n }\n },\n \"completion_url\": {\n \"type\": \"url\",\n \"defaultValue\": \"\",\n \"help\": \"URL where text completion requests will be sent.\",\n \"label\": {\n \"FRA\": \"URL de complétion\",\n \"ENU\": \"Completion URL\"\n }\n },\n \"stt_url\": {\n \"type\": \"url\",\n \"defaultValue\": \"\",\n \"help\": \"URL used for speech recognition.\",\n \"label\": {\n \"FRA\": \"URL de la synthèse vocale \",\n \"ENU\": \"Speech to text URL\"\n }\n },\n \"ping_url\": {\n \"type\": \"url\",\n \"defaultValue\": \"\",\n \"help\": \"URL used to check the availability of the AI server.\",\n \"label\": {\n \"FRA\": \"URL de ping\",\n \"ENU\": \"Ping URL\"\n }\n }\n\n}", "lov_order_by": 1, "lov_event_id__lev_code": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -405,6 +405,32 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, + { + "object": "ListOfValue", + "userkey": "TEXT AI_CHAT_HELLO English", + "item": { + "lov_name": "TEXT", + "lov_code": "AI_CHAT_HELLO", + "lov_lang": "ENU", + "lov_value": "Hello! How can I help you with application design? Do you want me to help you define your needs or do you have specific questions about design?", + "lov_order_by": 1, + "lov_event_id__lev_code": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "ListOfValue", + "userkey": "TEXT AI_CHAT_RESUME_MODULE English", + "item": { + "lov_name": "TEXT", + "lov_code": "AI_CHAT_RESUME_MODULE", + "lov_lang": "ENU", + "lov_value": "How can I help you with this module? Would you like me to help you complete it, or do you have specific design questions?", + "lov_order_by": 1, + "lov_event_id__lev_code": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "ListOfValue", "userkey": "TEXT AI_COMPLETED English", @@ -425,7 +451,7 @@ "lov_name": "TEXT", "lov_code": "AI_CONFIRM_DEL", "lov_lang": "ENU", - "lov_value": "Delete this graphic definitively?", + "lov_value": "Delete this graphic definitively?\n -
-
-
- -
- - - +
+ +
+
+
+ +
+ + + +
+
+
-
-
-
-
-
- History -
    +
    +
    + History +
      -
    -
    +
+
+
\ No newline at end of file diff --git a/resources/ObjectExternal/AIMetricsChat/SCRIPT.js b/resources/ObjectExternal/AIMetricsChat/SCRIPT.js index b5b3b95..cdb41e7 100644 --- a/resources/ObjectExternal/AIMetricsChat/SCRIPT.js +++ b/resources/ObjectExternal/AIMetricsChat/SCRIPT.js @@ -1,8 +1,6 @@ var AIMetricsChat = AIMetricsChat || (function() { const app = $ui.getApp(); const histObj = app.getBusinessObject("AiMetricsHist"); - let botTemplateMetrics = "
{{botName}}: ...
"; - let userTemplateMetrics ="
{{user}}: {{msg}}
"; let swagger=""; let userName = "user"; let moduleName = ""; @@ -11,21 +9,47 @@ var AIMetricsChat = AIMetricsChat || (function() { let moduleId = ""; let url = Simplicite.ROOT+"/ext/AIRestAPI"; // authenticated webservice let useAsync = true; + let addImgVisible = false; + let takeImgVisible = false; + let SpeechVisible = true; + let defaultSchema = document.createElement('div'); + defaultSchema.className = "ai-default-schema"; + defaultSchema.textContent = "your schema will be displayed here"; + let defaultSchemaDiv = document.createElement('div'); + defaultSchemaDiv.className = "ai-default-schema-content"; + defaultSchemaDiv.appendChild(defaultSchema); function render(params,id,module,s) { + let ctn = params[0]; + let printicon = document.createElement('i'); + let printbutton = document.createElement('button'); + printbutton.className = "btn btn-secondary"; + printicon.className = "fa fa-print icon"; + printbutton.appendChild(printicon); + printbutton.onclick = function(){ + console.log("Print"); + }; + let acts = $('.form-actionbar').find('.actions'); + acts.append(printbutton); displayHist(); - console.log("Render chat"); moduleId = id; // set button text moduleName = module; $('#metrics_user_text').click(function() { showWarn();}); + app.getTexts(function(textes){ let actLabel = textes?.AiSaveAsCrosstableAction||""; let sendText = textes?.AI_BUTTON_SEND ||"Send"; let cancelText = textes?.AI_BUTTON_CANCEL || "Cancel"; let length = Math.max(sendText.length, cancelText.length); + let optionalButtonWidth =0; + $(ctn).find(".chat-icon-button").each(function(){ + console.log("Optional button: "+this); + optionalButtonWidth += $(this).outerWidth(); + }); + console.log("Optional button length: "+optionalButtonWidth); if(actLabel != "")$("#work .actions").prepend(''); $('.chat-button').css('min-width', length + 'em'); - $('.user-message').css('width', 'calc(100% - ' + (length + 1) + 'em)'); + $('.user-message').css('width', 'calc(100% - ' + (length + 2) + 'em - '+optionalButtonWidth+'px)'); $('#metrics_send_button').text(sendText); $('#metrics_cancel_button').text(cancelText); },null); @@ -35,8 +59,13 @@ var AIMetricsChat = AIMetricsChat || (function() { }else{ userName =app.getGrant().login; } - userTemplateMetrics=userTemplateMetrics.replace('{{user}}', userName); - setBotName(); + //userTemplateMetrics=userTemplateMetrics.replace('{{user}}', userName); + //setBotName(); + $ui.loadScript({url: $ui.getApp().dispositionResourceURL("AiJsTools", "JS"),onload: function(){ AiJsTools.addChatOption(ctn.querySelector('.user-input'),addImgVisible,takeImgVisible,SpeechVisible);}}); + $(ctn).find(".chat-icon-button").each(function(){ + $(this).mouseover(function() { showWarn();}); + }); + resetChat(); $('#metrics_user_text').keypress(function(e) { if (e.which === 13) { sendMetricsMessage(); @@ -61,15 +90,15 @@ var AIMetricsChat = AIMetricsChat || (function() { }); - $('#ia_html').html(''); + $('#metrics_messages').append(AiJsTools.getDisplayUserMessage($('#AIchatbotMetrics'))); + $('#metrics_messages').append(AiJsTools.getDisplayBotMessage()); + $('#ia_html').html(defaultSchemaDiv); input = $('#metrics_user_text').val(); $('#metrics_user_text').val(''); $('#metrics_send_button').prop('disabled', true); $('#metrics_send_button').hide(); $('#metrics_user_text').prop('disabled', true); let params = {prompt:input, reqType:"metrics",swagger:swagger,lang:app.grant.lang}; - $('#metrics_messages').append(userTemplateMetrics.replace('{{msg}}',input)); - $('#metrics_messages').append(botTemplateMetrics); lastText = ""; app._call(useAsync, url, params, function callback(botResponse){ processResponse(botResponse,true,isCancelled,params); @@ -82,7 +111,6 @@ var AIMetricsChat = AIMetricsChat || (function() { } function reOpenChat(){ - console.log("Reopen chat"); $('#metrics_user_text').prop('disabled', false); $('#metrics_send_button').show(); $('#metrics_send_button').prop('disabled', false); @@ -91,6 +119,7 @@ var AIMetricsChat = AIMetricsChat || (function() { } function resetChat(){ $('#metrics_messages').html(''); + $('#ia_html').html(defaultSchemaDiv); reOpenChat(); } @@ -98,6 +127,9 @@ var AIMetricsChat = AIMetricsChat || (function() { app.getTexts(function(textes){ $ui.alert(app.getText(textes?.AI_GRAPH_DISCLAIMER, false)); $('#metrics_user_text').unbind('click'); + $('.chat-icon-button').each(function(){ + $(this).unbind('mouseover'); + }); }); } function saveAsCrosstable(){ @@ -109,16 +141,9 @@ var AIMetricsChat = AIMetricsChat || (function() { }); } - function setBotName(){ - let postParams = {"reqType":"BOT_NAME"}; - app._call(false, url, postParams, function callback(botResponse){ - let param = botResponse.botName; - botTemplateMetrics = botTemplateMetrics.replace("{{botName}}",param); - return true; - }); - return false; - } + function processResponse(botResponse,recall,isCancelled,params){ + botResponse.text = $view.markdownToHTML(botResponse.text).html(); if(isCancelled){ return; } @@ -142,7 +167,7 @@ var AIMetricsChat = AIMetricsChat || (function() { } lastScript = botResponse.js; - $('#metrics_messages .bot-messages:last .msg').text(lastText.replace(/\\n/g, "
")); + $('#metrics_messages .bot-messages:last .msg').html(lastText); saveHist(botResponse,params.prompt); reOpenChat(); }catch(e){ @@ -155,11 +180,11 @@ var AIMetricsChat = AIMetricsChat || (function() { params.error = e.toString(); params.script = botResponse.js; params.html = botResponse.html; - console.log(params); app._call(useAsync, url, params, function callback(botResponse){ processResponse(botResponse,false,isCancelled); }); }else{ + console.log("Error on script: "+botResponse.js); $('#metrics_messages .bot-messages:last .msg').text("Sorry, I can't understand your request. Please try again."); reOpenChat(); } @@ -173,12 +198,13 @@ var AIMetricsChat = AIMetricsChat || (function() { } function hasJS(botResponse){ if(botResponse.error !=null || ((botResponse.js == null && !botResponse?.html?.includes("script")))){ + console.log("Error on script in hasjs: "+botResponse.js); $('#metrics_messages .bot-messages:last .msg').text("Sorry, I can't understand your request. Please try again."); return false; } if(botResponse.html == null && botResponse.js == null && botResponse.text != null){ - $('#metrics_messages .bot-messages:last .msg').text(botResponse.text.replace(/\\n/g, "
")); + $('#metrics_messages .bot-messages:last .msg').html(botResponse.text); return false; } @@ -210,7 +236,6 @@ var AIMetricsChat = AIMetricsChat || (function() { filters.order__aiMhSimpleuserId = 0; histObj.search(function(res){ for(const item of res){ - console.log(item); addHist(item, histList); } @@ -224,22 +249,27 @@ var AIMetricsChat = AIMetricsChat || (function() { htmlListItems.id = "hist_"+res.row_id; let viewicon = document.createElement('i'); let deleteicon = document.createElement('i'); + viewicon.className = "fa fa-eye"; viewicon.style.marginLeft = "10px"; deleteicon.className = "fa fa-trash"; deleteicon.style.marginLeft = "10px"; + viewicon.onclick = function(){ displayHistItem(res.aiMhPreview,res.aiMhMetrics); }; deleteicon.onclick = function(){ - $ui.confirm({content:$T('AI_CONFIRM_DEL'),onOk:function(){ + let content = $T('AI_CONFIRM_DEL')+""; + $ui.confirm({content:content,onOk:function(){ deleteObj(res.row_id); }}); }; + htmlListItems.innerHTML = prompt; htmlListItems.appendChild(viewicon); htmlListItems.appendChild(deleteicon); + histList.insertBefore(htmlListItems, histList.firstChild); } function deleteObj(id){ @@ -248,12 +278,25 @@ var AIMetricsChat = AIMetricsChat || (function() { histObj.del(function(res){ console.log("Deleted: ",res); $("#hist_"+id).remove(); - },item,{error:function(err){console.log(err);}}); + },item,{error:function(err){}}); },id,null); } - function displayHistItem(html,js){ - $('#ia_html').html(html); + function displayHistItem(html,js,ctn){ + if(ctn == null) ctn = $('#ia_html'); + ctn.html(html); eval(js); } - return { render: render ,sendMetricsMessage:sendMetricsMessage,saveAsCrosstable:saveAsCrosstable}; -})(); \ No newline at end of file + function displayHistItemById(id,ctn){ + histObj.select(function(item){ + displayHistItem(item.aiMhPreview,item.aiMhMetrics,ctn); + },id); + console.log("Display hist item by id: "+id); + } + + return { + render: render, + sendMetricsMessage: sendMetricsMessage, + saveAsCrosstable: saveAsCrosstable, + displayHistItemById: displayHistItemById + }; +})(); diff --git a/resources/ObjectExternal/AIMetricsChat/STYLES.less b/resources/ObjectExternal/AIMetricsChat/STYLES.less index b425934..7a9ed8f 100644 --- a/resources/ObjectExternal/AIMetricsChat/STYLES.less +++ b/resources/ObjectExternal/AIMetricsChat/STYLES.less @@ -1,11 +1,17 @@ #aimetricschat { - /* Custom styles */ - width: 100%; - display: flex; - flex-direction: row; /* Add this line to change the flex direction to column */ - height:50vh; //specific to metrics + width: 100%; + min-height:50vh; + #graph_area{ + /* Custom styles */ + height: 50vh; + display: flex; + flex-direction: row; /* Add this line to change the flex direction to column */ + + } + + .chat-space { width: calc(33.33% - 10px); /* Adjust the width as needed */ height: 100%; @@ -28,7 +34,6 @@ .chat-button { width: 15%; min-width: 4em; - background-color: #dcf8c6; } #metrics_cancel_button{ display: none; @@ -36,5 +41,11 @@ canvas{ max-height: 100% } + .history_area{ + margin-top: 10px; + } + .user-input{ + padding: 5px; + } } \ No newline at end of file diff --git a/resources/ObjectExternal/AIProcessResource/CHAT_BOT_CSS.less b/resources/ObjectExternal/AIProcessResource/CHAT_BOT_CSS.less index 40dff70..ccb0cec 100644 --- a/resources/ObjectExternal/AIProcessResource/CHAT_BOT_CSS.less +++ b/resources/ObjectExternal/AIProcessResource/CHAT_BOT_CSS.less @@ -1,13 +1,7 @@ #AIchatbotProcess { margin: 0; padding: 0; - #chat-container { - margin: 20px auto; - border-radius: 5px; - height: 60vh; - overflow: hidden; - } - + #AI_data { display: none; Visibility:hidden; @@ -17,28 +11,12 @@ height: calc(60vh - 60px); } #user-input { + height: 40px; display: flex; - padding: 10px; - bottom: 0; - } - .user-message { - flex: 1; padding: 5px; - margin-right: 10px; - max-height: 55vh; - resize: none; - background-color: #e2e2e2; + } - -/* .input-area{ - background-color: #e2e2e2; - border-radius: 3px; - } */ - .img{ - max-width: 100%; - max-height: 50vh; - } .big-icon{ font-size: 50px; } diff --git a/resources/ObjectExternal/AIProcessResource/CHAT_BOT_MODEL.html b/resources/ObjectExternal/AIProcessResource/CHAT_BOT_MODEL.html index b6d4104..e4a432b 100644 --- a/resources/ObjectExternal/AIProcessResource/CHAT_BOT_MODEL.html +++ b/resources/ObjectExternal/AIProcessResource/CHAT_BOT_MODEL.html @@ -3,23 +3,18 @@ - +
-
+
-
{{botName}}: {{init}}
- {{botMesage}} - + {{botMesage}}
- - - -
diff --git a/resources/ObjectExternal/AIProcessResource/CHAT_BOT_SCRIPT.js b/resources/ObjectExternal/AIProcessResource/CHAT_BOT_SCRIPT.js index c694135..3a3d51f 100644 --- a/resources/ObjectExternal/AIProcessResource/CHAT_BOT_SCRIPT.js +++ b/resources/ObjectExternal/AIProcessResource/CHAT_BOT_SCRIPT.js @@ -1,53 +1,53 @@ var AIWfChatBot = AIWfChatBot || (function() { - let botTemplate; - let userTemplate; const app = $ui.getApp(); - let userName ="user"; - let image_base64 =""; // Params let useAsync = true; // use async callback pattern let url = Simplicite.ROOT+"/ext/AIRestAPI"; // authenticated webservice + //chat options + let addImgVisible = true; + let takeImgVisible = true; + let SpeechVisible = true; + let maxbodyH=null; function resizeUp(){ - const vh = window.innerHeight * 0.01; - const maxHeight = `${45 * vh - 250}px`; - const minHeight = `40px`; - - $("#module_user_message").css("height", minHeight); - let textheight = $("#module_user_message").prop('scrollHeight')-5 ; - let areaheight = $("#chat-container").height(); - let imgheight = $("#input-img").is(':hidden')?0: $("#input-img").height(); - if(textheight >maxHeight-imgheight){ - textheight = maxHeight-imgheight; - - }else if(textheight < minHeight){ - textheight = minHeight; + if(!AiJsTools.hasOwnProperty("resizeUp")){ + console.log("load AiJsTools"); + $ui.loadScript({url: $ui.getApp().dispositionResourceURL("AiJsTools", "JS"),onload: function(){ + AiJsTools.resizeUp($(".ai-chat-input-area"),$("#module_chat_messages"),maxbodyH);} + }); + }else{ + console.log("resizeUp"); + AiJsTools.resizeUp($(".ai-chat-input-area"),$("#module_chat_messages"),maxbodyH); } - $("#module_user_message").css("height", textheight); - areaheight = areaheight - (textheight +30)-imgheight; - $("#module_chat_messages").css("height", areaheight); } - - function render() { + console.log("render"); + $('.btn-action[data-action="AIGenerate"]').attr("disabled", "disabled"); + let ctn = document.getElementById('AIchatbotProcess'); $(".btn-validate").remove(); $(window).resize(function() { resizeUp(); }); - $("#add-img").addClass("fas fa-upload"); - $("#take-img").addClass("fas fa-camera"); - $("#speech").addClass("fas fa-microphone"); - console.log("Render chat"); - botTemplate = $("#botTemplate").html(); - userTemplate = $("#userTemplate").html(); - setBotName(); - if(app.getGrant().firstname ){ userName =app.getGrant().firstname; }else{ userName =app.getGrant().login; } - userTemplate=userTemplate.replace('{{user}}', userName); + maxbodyH = $('#AIchatbotProcess').parent().height() + $ui.loadScript({url: $ui.getApp().dispositionResourceURL("AiJsTools", "JS"),onload: function(){ + AiJsTools.addChatOption(ctn.querySelector('#user-input'),addImgVisible,takeImgVisible,SpeechVisible); + let msgs = $('#module_chat_messages'); + let initMsg; + if(msgs.length == 0){ + initMsg = AiJsTools.getDisplayBotMessage($T("AI_CHAT_HELLO")); + }else{ + initMsg = AiJsTools.getDisplayBotMessage($T("AI_CHAT_RESUME_MODULE")); + } + initMsg.className = "bot-first-messages"; + msgs.append(initMsg); + + + }}); } function sendModuleMessage() { let userMessage = document.getElementById('module_user_message').value; @@ -67,7 +67,7 @@ var AIWfChatBot = AIWfChatBot || (function() { let contents =[]; let content = {"type":"text","text":$(this).find(".msg").text()}; contents.push(content); - let img = $(this).find(".img"); + let img = $(this).find(".ai-chat-img"); if(img.length >0){ content = {"type":"image_url","image_url":{"url":img.attr("src")}}; contents.push(content); @@ -80,17 +80,8 @@ var AIWfChatBot = AIWfChatBot || (function() { historic.push(JSON.stringify(text)); }); - - // Affichez la question de l'utilisateur et la réponse du chatbot dans le chat - let userCompletMessage =userTemplate.replace('{{msg}}', userMessage.replaceAll("\n","
")); - if(userImage){ - userCompletMessage = userCompletMessage.replace('{{img}}', ""); - }else{ - userCompletMessage = userCompletMessage.replace('{{img}}', ""); - - } - chatMessages.innerHTML += userCompletMessage; - chatMessages.innerHTML += botTemplate; + chatMessages.append(AiJsTools.getDisplayUserMessage($("#AIchatbotProcess"))); + chatMessages.append(AiJsTools.getDisplayBotMessage()); $("#send-button").attr("disabled", "disabled"); let prompt =[]; @@ -109,7 +100,7 @@ var AIWfChatBot = AIWfChatBot || (function() { // Faites défiler vers le bas pour afficher les messages les plus récents chatMessages.scrollTop = chatMessages.scrollHeight; // Call Webservice (POST requests only) - + $('.btn-action[data-action="AIGenerate"]').attr("disabled", "disabled"); app._call(useAsync, url, postParams, function callback(botResponse){ let text ={}; text.role = "user"; @@ -117,7 +108,7 @@ var AIWfChatBot = AIWfChatBot || (function() { historic.push(JSON.stringify(text)); if(!(botResponse.hasOwnProperty('type') && botResponse.type == 'error')){ let result = botResponse.response.choices[0].message.content; - result = result.replaceAll("\n","
"); + result = $view.markdownToHTML(result).html(); $(".bot-messages:last-child span").html(result); text={}; @@ -136,119 +127,14 @@ var AIWfChatBot = AIWfChatBot || (function() { } $("#AI_data").html(JSON.stringify(historic)); $("#send-button").removeAttr("disabled"); + $('.btn-action[data-action="AIGenerate"]').removeAttr('disabled', true); chatMessages.scrollTop = chatMessages.scrollHeight; }); } - function addImage(){ - let input = document.createElement('input'); - input.type = 'file'; - input.accept = 'image/jpeg'; - input.onchange = function(event) { - let file = event.target.files[0]; - let reader = new FileReader(); - reader.onload = function(event) { - image_base64 = event.target.result; - $("#input-img img").attr("src", image_base64); - $("#input-img").show(); - resizeUp(); - }; - reader.readAsDataURL(file); - }; - input.click(); - } - async function takeImage(){ - let input =await $view.widget.takePicture({title: $T('TAKE_PICT'),facingMode: "environment"}); - $("#input-img img").attr("src", input); - $("#input-img").show(); - resizeUp(); - } - function setBotName(){ - let url = Simplicite.ROOT+"/ext/AIRestAPI"; // authenticated webservice - let postParams = {"reqType":"BOT_NAME"}; - app._call(false, url, postParams, function callback(botResponse){ - let param = botResponse.botName; - botTemplate = botTemplate.replace("{{botName}}",param); - $("#AIchatbotProcess").html($("#AIchatbotProcess").html().replace("{{botName}}",param)); - return true; - }); - return false; - } - let mediaRecorder; - let audioChunks = []; - let isCancelled = false; - // Fonction pour démarrer l'enregistrement - async function startRecording() { - const stream = await navigator.mediaDevices.getUserMedia({ audio: true }); - - mediaRecorder = new MediaRecorder(stream); - - mediaRecorder.ondataavailable = function(event) { - audioChunks.push(event.data); - }; - - mediaRecorder.onstop = function() { - if(!isCancelled){ - const audioBlob = new Blob(audioChunks, { type: 'audio/webm' }); - audioChunks = []; - const formData = new FormData(); - formData.append('file', audioBlob, 'audio.webm'); - formData.append('reqType', 'audio'); - convertBlobToBase64(audioBlob).then(function(audio64) { - audio64 = audio64.split(",")[1]; - const jsonData = { - file: audio64, - reqType: 'audio' - }; - app._call(useAsync, url, jsonData, function callback(botResponse){ - console.log(botResponse); - console.log(botResponse.msg); - let json = JSON.parse(botResponse.msg); - console.log(json.text); - $("#module_user_message").val(json.text); - }); - }); - - - }else{ - isCancelled = false; - - } - stream.getTracks().forEach(track => track.stop()); - }; - - mediaRecorder.start(); - } - function convertBlobToBase64(blob) { - return new Promise((resolve, reject) => { - const reader = new FileReader(); - reader.onloadend = function() { - resolve(reader.result); // Extraire la partie Base64 de la chaîne data URL - }; - reader.onerror = function(error) { - reject(error); - }; - reader.readAsDataURL(blob); - }); - } - // Fonction pour arrêter l'enregistrement - function stopRecording() { - mediaRecorder.stop(); - } - function cancelRecording() { - isCancelled = true; - mediaRecorder.stop(); - } - function getSpeech(){ - startRecording(); - $ui.confirm({content:"", onOk:function(){stopRecording();}, onCancel:function(){cancelRecording();}}); - } return { sendModuleMessage: sendModuleMessage, - addImage: addImage, - takeImage: takeImage, - getSpeech: getSpeech, render: render, resizeUp: resizeUp }; diff --git a/resources/ObjectInternal/AIProvider/AISettingsKeyAndEPTemplate.html b/resources/ObjectInternal/AIProvider/AISettingsKeyAndEPTemplate.html index 0794724..d0d2738 100644 --- a/resources/ObjectInternal/AIProvider/AISettingsKeyAndEPTemplate.html +++ b/resources/ObjectInternal/AIProvider/AISettingsKeyAndEPTemplate.html @@ -2,7 +2,7 @@
Endpoint

{{#fields}} -
+
diff --git a/src/com/simplicite/commons/AIBySimplicite/AITools.java b/src/com/simplicite/commons/AIBySimplicite/AITools.java index 0f70c9a..bb224b1 100644 --- a/src/com/simplicite/commons/AIBySimplicite/AITools.java +++ b/src/com/simplicite/commons/AIBySimplicite/AITools.java @@ -1,4 +1,5 @@ package com.simplicite.commons.AIBySimplicite; +import org.checkerframework.checker.units.qual.t; import org.json.JSONArray; import org.json.JSONObject; import org.json.JSONException; @@ -24,9 +25,6 @@ import ch.simschla.minify.cli.App; - - - /** * Shared code AITools */ @@ -1137,12 +1135,22 @@ public static String getBotName(){ public static int getHistDepth(){ return aiHistDepth; } + public static boolean checkSpeechRecognition(){ + AppLog.info("Check STT",Grant.getSystemAdmin()); + if(Tool.isEmpty(getAIParam("stt_url"))){ + AppLog.info("STT url not set",Grant.getSystemAdmin()); + AppLog.info("STT url not set"); + return false; + } + AppLog.info("STT url set",Grant.getSystemAdmin()); + return true; + } public static String speechToText(String audioBase64){ Grant g = Grant.getSystemAdmin(); String apiUrl = getAIParam("stt_url"); if(Tool.isEmpty(apiUrl)){ AppLog.info("STT url not set", g); - return Message.formatWarning("clasique stt",null,null); + return Message.formatWarning("Speach to text not set",null,null); } try{ URI url = new URI(apiUrl); diff --git a/src/com/simplicite/extobjects/AIBySimplicite/AIExpTool.java b/src/com/simplicite/extobjects/AIBySimplicite/AIExpTool.java index f325d39..6233084 100644 --- a/src/com/simplicite/extobjects/AIBySimplicite/AIExpTool.java +++ b/src/com/simplicite/extobjects/AIBySimplicite/AIExpTool.java @@ -1,6 +1,10 @@ package com.simplicite.extobjects.AIBySimplicite; +import java.util.*; + +import com.mysql.cj.x.protobuf.MysqlxDatatypes.Scalar.String; import com.simplicite.util.*; +import com.simplicite.util.exceptions.ActionException; import com.simplicite.util.tools.*; /** * External object AIExpTool @@ -16,6 +20,13 @@ public class AIExpTool extends ExternalObject { // or com.simplicite.webapp.web. */ @Override public Object display(Parameters params) { - return javascript("alert(\"not front object\")"); + ObjectDB cli = getGrant().getTmpObject("TnnClient"); + + return javascript("let obj = $grant.getObject(null,'TnnClient');obj.displayList(null, obj, null, function(){$ui.doAction(obj.getAction('TnnOpenTv'),obj);});"); + + //return javascript("alert(\"not front object\")"); } -} \ No newline at end of file +} + +//JS + diff --git a/src/com/simplicite/extobjects/AIBySimplicite/AIMetricsChat.java b/src/com/simplicite/extobjects/AIBySimplicite/AIMetricsChat.java index 5f2621c..66cf91b 100644 --- a/src/com/simplicite/extobjects/AIBySimplicite/AIMetricsChat.java +++ b/src/com/simplicite/extobjects/AIBySimplicite/AIMetricsChat.java @@ -29,6 +29,7 @@ public Object display(Parameters params) { return javascript("$ui.alert("+Message.formatError("AI_MODULE_ERROR", null,null)+")"); } JSONObject swagger = AITools.getSimplifyedSwagger(moduleName, g); + AppLog.info("Module: "+moduleName+" swagger : "+swagger.toString(), g); String swaggerString = new JSONObject().put("components",new JSONObject().put("schemas",swagger.optJSONObject("components").optJSONObject("schemas"))).toString(); swaggerString = swaggerString.replace("\\", "\\\\").replace("\"", "\\\""); return javascript(getName() + ".render(ctn,'"+ModuleDB.getModuleId(moduleName)+"','"+moduleName+"','"+swaggerString+"');"); diff --git a/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java b/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java index 74e0b11..0fb7a93 100644 --- a/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java +++ b/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java @@ -7,8 +7,6 @@ import com.simplicite.util.exceptions.*; import com.simplicite.util.tools.*; -import ch.simschla.minify.cli.App; - import org.json.JSONArray; import org.json.JSONObject; @@ -29,8 +27,6 @@ public Object get(Parameters params) throws HTTPException { @Override public Object post(Parameters params) throws HTTPException { try { - - AppLog.info(params.toString(), getGrant()); String prompt =params.getParameter(PARAMS_PROMPT_KEY); String objectName = params.getParameter(JSON_OBJECT_NAME_KEY); String type = params.getParameter(JSON_REQ_TYPE); @@ -58,6 +54,8 @@ public Object post(Parameters params) throws HTTPException { return AiMetrics.getReformulatePrompt(prompt); case "BOT_NAME": return new JSONObject().put("botName",AITools.getBotName()); + case "CHECK_SPEECH_RECOGNITION": + return new JSONObject().put("isSpeechRecognitionSupported",AITools.checkSpeechRecognition()); case "ping": String ping = AITools.pingAI(); boolean isSuccess = AITools.PING_SUCCESS.equals(ping); diff --git a/src/com/simplicite/objects/AIBySimplicite/AIProvider.java b/src/com/simplicite/objects/AIBySimplicite/AIProvider.java index 614fd04..d5e9149 100644 --- a/src/com/simplicite/objects/AIBySimplicite/AIProvider.java +++ b/src/com/simplicite/objects/AIBySimplicite/AIProvider.java @@ -26,6 +26,7 @@ public String getConfigurationPage(){ .put(getUrlJSON("aiPrvPingUrl",false)) .put(getUrlJSON("aiPrvCompletionUrl",true)) .put(getUrlJSON("aiPrvModelsUrl",true)) + .put(getUrlJSON("aiPrvSttUrl", false)) ); datas.put("help",MarkdownTool.toHTML(getFieldValue("aiPrvHelp"))); String html = HTMLTool.getResourceHTMLContent(this,"AISettingsKeyAndEPTemplate"); diff --git a/src/com/simplicite/workflows/AIBySimplicite/AIGenData.java b/src/com/simplicite/workflows/AIBySimplicite/AIGenData.java index 6223808..9c343ce 100644 --- a/src/com/simplicite/workflows/AIBySimplicite/AIGenData.java +++ b/src/com/simplicite/workflows/AIBySimplicite/AIGenData.java @@ -50,30 +50,7 @@ public String callIA(Processus p, ActivityFile context, ObjectContextWeb ctx, Gr return null; if(!AITools.isAIParam(true)) return g.T(AI_SETTING_NEED); String divId = "ace_json_return"; - String aceEditor ="$ui.loadAceEditor(function(){\n" + // - "\t\t\tvar aceEditor = window.ace.edit('"+divId+"');\n" + // - "\t\t\taceEditor.setOptions({\n" + // - "\t\t\t enableBasicAutocompletion: true, // the editor completes the statement when you hit Ctrl + Space\n" + // - "\t\t\t enableLiveAutocompletion: true, // the editor completes the statement while you are typing\n" + // - "\t\t\t showPrintMargin: false, // hides the vertical limiting strip\n" + // - "\t\t\t maxLines: 25,\n" + // - "\t\t\t fontSize: \"100%\" // ensures that the editor fits in the environment\n" + // - "\t\t\t});\n" + // - "\t\t\t\n" + // - "\t\t\t// defines the style of the editor\n" + // - "\t\t\taceEditor.setTheme(\"ace/theme/eclipse\");\n" + // - "\t\t\t// hides line numbers (widens the area occupied by error and warning messages)\n" + // - "\t\t\taceEditor.renderer.setOption(\"showLineNumbers\", true); \n" + // - "\t\t\t// ensures proper autocomplete, validation and highlighting of JavaScript code\n" + // - "\t\t\taceEditor.getSession().setMode(\"ace/mode/json\");\n" + // - "\t\t\taceEditor.getSession().setValue($(\"#json_return\").val(), 0);\r\n" + // - "\t\t\taceEditor.getSession().on('change', function() {\r\n" + // - "\t\t\t\tlet val=aceEditor.getSession().getValue();\r\n" + // - "\t\t\t\t$(\"#json_return\").val(val);\r\n" + // - "\t\t\t});\n" + // - "\t\t\t\n" + // - "\t\t});"; - + String aceEditor ="$ui.loadScript({url: $ui.getApp().dispositionResourceURL(\"AiJsTools\", \"JS\"),onload: function(){ AiJsTools.loadResultInAceEditor($('#json_return'),'"+divId+"');}});"; String moduleId = getContext(getActivity("GGD_0100")).getDataValue("Field", "mdl_name"); AppLog.info("moduleId : "+moduleId, getGrant()); if(Tool.isEmpty(moduleId)) return "
"+""; diff --git a/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java b/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java index fc9422b..23011d6 100644 --- a/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java +++ b/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java @@ -26,7 +26,8 @@ public class AIModuleCreate extends Processus { private static final String ROW_MODULE_ID_FIELD ="row_module_id"; private static final String DOMAIN_NAME_FIELD ="obd_name"; private static final String ROW_ID ="row_id"; - private static final String EMPTY_TEXTAREA =""; + private static final String EMPTY_TEXTAREA =""; + private static final String ACE_DIV ="
"; private static final String ACTIVITY_CREATE_MODULE ="AIC_0010"; private static final String ACTIVITY_GRANT_USER ="AIC_0020"; private static final String ACTIVITY_SELECT_MODULE ="AIC_0100"; @@ -145,7 +146,6 @@ private String getModuleChat(String response,Grant g){ String html = g.getExternalObject(PROCESS_RESOURCE_EXTERNAL_OBJECT).getResourceHTMLContent("CHAT_BOT_MODEL"); html = html.replace("{{{script}}}", script); html = html.replace("{{css}}", css); - html = html.replace("{{init}}", Globals.LANG_FRENCH.equals(g.getLang())?"Bonjour! Comment puis-je vous aider avec la conception d'applications? Voulez-vous que je vous aide a definir vos besoin ou avez-vous des questions spécifiques sur la conception?":"Hello! How can I help you with application design? Do you want me to help you define your needs or do you have specific questions about design?"); html = html.replace("{{botMesage}}", Tool.isEmpty(response)?"":"
"+AITools.getBotName()+": "+response+"
"); return html; } @@ -175,35 +175,13 @@ public String ai(Processus p, ActivityFile context, ObjectContextWeb ctx, Grant if(context.getStatus() == ActivityFile.STATE_DONE) return null; String divId = "ace_json_return"; - String aceEditor ="$ui.loadAceEditor(function(){\n" + // - "\t\t\tvar aceEditor = window.ace.edit('"+divId+"');\n" + // - "\t\t\taceEditor.setOptions({\n" + // - "\t\t\t enableBasicAutocompletion: true, // the editor completes the statement when you hit Ctrl + Space\n" + // - "\t\t\t enableLiveAutocompletion: true, // the editor completes the statement while you are typing\n" + // - "\t\t\t showPrintMargin: false, // hides the vertical limiting strip\n" + // - "\t\t\t maxLines: 25,\n" + // - "\t\t\t fontSize: \"100%\" // ensures that the editor fits in the environment\n" + // - "\t\t\t});\n" + // - "\t\t\t\n" + // - "\t\t\t// defines the style of the editor\n" + // - "\t\t\taceEditor.setTheme(\"ace/theme/eclipse\");\n" + // - "\t\t\t// hides line numbers (widens the area occupied by error and warning messages)\n" + // - "\t\t\taceEditor.renderer.setOption(\"showLineNumbers\", true); \n" + // - "\t\t\t// ensures proper autocomplete, validation and highlighting of JavaScript code\n" + // - "\t\t\taceEditor.getSession().setMode(\"ace/mode/json\");\n" + // - "\t\t\taceEditor.getSession().setValue($(\"#json_return\").val(), 0);\r\n" + // - "\t\t\taceEditor.getSession().on('change', function() {\r\n" + // - "\t\t\t\tlet val=aceEditor.getSession().getValue();\r\n" + // - "\t\t\t\t$(\"#json_return\").val(val);\r\n" + // - "\t\t\t});\n" + // - "\t\t\t\n" + // - "\t\t});"; + String aceEditor ="$ui.loadScript({url: $ui.getApp().dispositionResourceURL(\"AiJsTools\", \"JS\"),onload: function(){ AiJsTools.loadResultInAceEditor($('#json_return'),'"+divId+"');}});"; if(!AITools.isAIParam(true)) return g.T(AI_SETTING_NEED); List listResult = getJsonAi( getPreviousContext(context).getActivity().getStep(), g); - if(Tool.isEmpty(listResult)) return EMPTY_TEXTAREA+BEGIN_SCRIPT+aceEditor+END_SCRIPT; + if(Tool.isEmpty(listResult)) return ACE_DIV+EMPTY_TEXTAREA+BEGIN_SCRIPT+aceEditor+END_SCRIPT; if(listResult.size()!=3)return Message.formatError("AI_ERROR_RETURN", listResult.get(0),null ); - return "

"+listResult.get(0)+"

"+"
"+"

"+listResult.get(2)+"

"+BEGIN_SCRIPT+aceEditor+END_SCRIPT; + return "

"+listResult.get(0)+"

"+ACE_DIV+""+"

"+listResult.get(2)+"

"+BEGIN_SCRIPT+aceEditor+END_SCRIPT; } @@ -425,11 +403,12 @@ public String noParam(Processus p, ActivityFile context, ObjectContextWeb ctx, G } @Override public Message preValidate(ActivityFile context) { - if("AIC_0050".equals(context.getActivity().getStep())){ + String step = context.getActivity().getStep(); + if("AIC_0050".equals(step)){ context.setDataFile("Return","Code", AITools.isAIParam()?"1":"0"); if(Boolean.TRUE.equals(AITools.AI_DEBUG_LOGS))AppLog.info(context.getDataValue("Return","Code"), getGrant()); } - if(ACTIVITY_CREATE_MODULE.equals(context.getActivity().getStep()) && !displayPrefixWarning){ + if(ACTIVITY_CREATE_MODULE.equals(step) && !displayPrefixWarning){ Object prefix = getContext(getActivity(ACTIVITY_CREATE_MODULE)).getDataValue(FIELD, MDL_PREFIX_FIELD); ObjectDB obj = getGrant().getTmpObject("Module"); synchronized(obj.getLock()){ @@ -450,6 +429,15 @@ public Message preValidate(ActivityFile context) { } + }else if(ACTIVITY_NEW_SCOPE.equals(step) && !context.getActivity().isUserDialog()){ + String moduleName = getContext(getActivity(ACTIVITY_CREATE_MODULE)).getDataValue(FIELD, "mdl_name"); + String moduleId = getContext(getActivity(ACTIVITY_SELECT_MODULE)).getDataValue(FIELD, ROW_ID); + context.setDataFile(FIELD, "viw_name", "Scope"+moduleName); + context.setDataFile(FIELD, "viw_type", "H"); + context.setDataFile(FIELD, ROW_MODULE_ID_FIELD, moduleId); + + }else if(ACTIVITY_TRL_DOMAIN.equals(step) && !context.getActivity().isUserDialog()){ + automaticTrlDom(context, getGrant()); } return super.preValidate(context); } @@ -470,7 +458,8 @@ public void postValidate(ActivityFile context) { displayPrefixWarning = false; }else if(ACTIVITY_GRANT_USER.equals(step)){ - boolean isGrantUser ="1".equals(context.getDataValue("Data", "AREA:1")); + boolean isGrantUser =true; + if(context.getActivity().isUserDialog())isGrantUser = "1".equals(context.getDataValue("Data", "AREA:1")); if(isGrantUser){ String groupName = getContext(getActivity(ACTIVITY_SELECT_GROUP)).getDataValue(FIELD, "grp_name"); if(Tool.isEmpty(groupName)){ @@ -483,10 +472,59 @@ public void postValidate(ActivityFile context) { }else if(ACTIVITY_TRL_DOMAIN.equals(step)){ saveTranslate(context); }else if(ACTIVITY_NEW_SCOPE.equals(step)){ - scopeGrant(context); + scopeGrant(context.getDataValue(FIELD, ROW_ID)); + if(!context.getActivity().isUserDialog()){ + String moduleName = getContext(getActivity(ACTIVITY_CREATE_MODULE)).getDataValue(FIELD, "mdl_name"); + trlScope(context.getDataValue(FIELD, ROW_ID),moduleName); + } } super.postValidate(context); } + private void trlScope(String scopeId,String moduleName){ + ObjectDB obj = getGrant().getTmpObject("TranslateView"); + synchronized(obj.getLock()){ + try{ + BusinessObjectTool objTool = obj.getTool(); + obj.resetFilters(); + obj.setFieldFilter("tsl_object", "View:"+scopeId); + for(String[] row : obj.search()){ + objTool.selectForUpdate(row[obj.getRowIdFieldIndex()]); + if("FRA".equals(row[obj.getFieldIndex("tsl_lang")])){ + obj.setFieldValue("tsl_value", "Vue "+moduleName); + }else{ + obj.setFieldValue("tsl_value", "Scope "+moduleName); + } + } + objTool.validateAndUpdate(); + }catch(Exception e){ + AppLog.error(e, getGrant()); + } + } + } + private void automaticTrlDom(ActivityFile af, Grant g){ + String moduleId = getContext(getActivity(ACTIVITY_SELECT_MODULE)).getDataValue(FIELD, ROW_ID); + String moduleName = getContext(getActivity(ACTIVITY_SELECT_MODULE)).getDataValue(FIELD, "mdl_name"); + String[] langCodes = g.getLangsCodes(); + // Domains translations + ObjectDB dom = g.getTmpObject(DOMAIN); + dom.resetFilters(); + dom.setFieldFilter(ROW_MODULE_ID_FIELD, moduleId); + List v = dom.search(); + for (int j=0; j Date: Tue, 15 Oct 2024 18:34:30 +0200 Subject: [PATCH 48/74] ux, specchrecognition and sonard --- AIBySimplicite.json | 70 +++++++- files/Model/Model-AIModuleCreate.png | Bin 91183 -> 91397 bytes files/Model/Model-AIModuleCreate.svg | 2 +- module-info.json | 4 +- resources/Disposition/default/AI_STYLE.less | 42 ++++- resources/Disposition/default/AiJsTools.js | 167 ++++++++++-------- resources/ObjectExternal/AIChatBot/HTML.html | 7 +- resources/ObjectExternal/AIChatBot/SCRIPT.js | 12 +- .../ObjectExternal/AIChatBot/STYLES.less | 6 - .../ObjectExternal/AIMetricsChat/HTML.html | 6 +- .../ObjectExternal/AIMetricsChat/SCRIPT.js | 61 +++---- .../ObjectExternal/AIMetricsChat/STYLES.less | 8 +- .../AIProcessResource/CHAT_BOT_CSS.less | 6 - .../AIProcessResource/CHAT_BOT_MODEL.html | 4 +- .../AIProcessResource/CHAT_BOT_SCRIPT.js | 7 +- .../commons/AIBySimplicite/AITools.java | 18 +- .../commons/AIBySimplicite/AiMetrics.java | 5 - .../extobjects/AIBySimplicite/AIChatBot.java | 2 - .../extobjects/AIBySimplicite/AIExpTool.java | 11 +- .../AIBySimplicite/AIMetricsChat.java | 1 - .../extobjects/AIBySimplicite/AIRestAPI.java | 1 - .../objects/AIBySimplicite/AIProvider.java | 1 - .../AIBySimplicite/AiGroupGuiDesc.java | 3 +- .../workflows/AIBySimplicite/AIGenData.java | 1 - .../AIBySimplicite/AIModuleCreate.java | 120 ++++++++----- 25 files changed, 317 insertions(+), 248 deletions(-) diff --git a/AIBySimplicite.json b/AIBySimplicite.json index 1274176..5ae682c 100644 --- a/AIBySimplicite.json +++ b/AIBySimplicite.json @@ -119,7 +119,7 @@ "mod_doc": { "path": "files/Model/Model-AIModuleCreate.svg", "mime": "image/svg+xml", - "name": "Model-AIModuleCreate.svg" + "name": "model.svg" }, "mod_image": { "path": "files/Model/Model-AIModuleCreate.png", @@ -405,6 +405,19 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, + { + "object": "ListOfValue", + "userkey": "TEXT AI_BUTTON_STOP_RECORDING English", + "item": { + "lov_name": "TEXT", + "lov_code": "AI_BUTTON_STOP_RECORDING", + "lov_lang": "ENU", + "lov_value": "Stop", + "lov_order_by": 1, + "lov_event_id__lev_code": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "ListOfValue", "userkey": "TEXT AI_CHAT_HELLO English", @@ -600,6 +613,19 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, + { + "object": "ListOfValue", + "userkey": "TEXT AI_RECORDING_TITLE English", + "item": { + "lov_name": "TEXT", + "lov_code": "AI_RECORDING_TITLE", + "lov_lang": "ENU", + "lov_value": "Recording in progress", + "lov_order_by": 1, + "lov_event_id__lev_code": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "ListOfValue", "userkey": "TEXT AI_SETTING_NEED English", @@ -704,6 +730,19 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, + { + "object": "ListOfValue", + "userkey": "TEXT AI_BUTTON_STOP_RECORDING French", + "item": { + "lov_name": "TEXT", + "lov_code": "AI_BUTTON_STOP_RECORDING", + "lov_lang": "FRA", + "lov_value": "Stop", + "lov_order_by": 1, + "lov_event_id__lev_code": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "ListOfValue", "userkey": "TEXT AI_CHAT_HELLO French", @@ -938,6 +977,19 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, + { + "object": "ListOfValue", + "userkey": "TEXT AI_RECORDING_TITLE French", + "item": { + "lov_name": "TEXT", + "lov_code": "AI_RECORDING_TITLE", + "lov_lang": "FRA", + "lov_value": "Enregistrement en cours", + "lov_order_by": 1, + "lov_event_id__lev_code": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "ListOfValue", "userkey": "TEXT AI_SETTING_NEED French", @@ -2873,7 +2925,7 @@ "obo_exportorder": null, "obo_distinct": false, "obo_indexable": false, - "obo_groupby": false, + "obo_groupby": null, "obo_dfltref": null, "obo_template_id__tpl_name": "AiGroupGuiDesc", "obo_tpl_list_id__tpl_name": null, @@ -2889,13 +2941,13 @@ "obo_useform": true, "obo_title": null, "obo_icon": "img/system/group", - "obo_refcount": false, - "obo_tree": false, + "obo_refcount": null, + "obo_tree": null, "obo_viewmode": "T", "obo_historic": null, "obo_printable": true, "obo_followlink": true, - "obo_mergeable": false, + "obo_mergeable": null, "obo_social": ["1"], "obo_rowid_id__fld_name": null, "obo_extend_id__obj_name": null, @@ -2926,7 +2978,7 @@ "obo_sortable": true, "obo_list_areas": null, "obo_minifiable": "M", - "obo_minified": false, + "obo_minified": null, "obo_permalink": null, "obo_btn_searchform": true } @@ -5701,7 +5753,7 @@ "acy_max_duration": null, "acy_duration_unit": null, "acy_alert_id__alt_name": null, - "acy_user_dlg": true, + "acy_user_dlg": false, "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -5720,7 +5772,7 @@ "acy_max_duration": null, "acy_duration_unit": null, "acy_alert_id__alt_name": null, - "acy_user_dlg": true, + "acy_user_dlg": false, "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -5739,7 +5791,7 @@ "acy_max_duration": null, "acy_duration_unit": null, "acy_alert_id__alt_name": null, - "acy_user_dlg": true, + "acy_user_dlg": false, "row_module_id__mdl_name": "AIBySimplicite" } }, diff --git a/files/Model/Model-AIModuleCreate.png b/files/Model/Model-AIModuleCreate.png index 8ffd464323d260ffea957e9496d523869616ca8d..2019f81972d253a901d767faa43170ee180ef4e1 100644 GIT binary patch literal 91397 zcmd42by$?&_BSjef{4_BbO}RBOAHM%#1KOX(kVzN5)vX3l0$bl2-01W(jC$b14yTI zzBlKb@A*CN`#jJ8?{(eR#jxj|z1LcMt+iKtHc|y4i}Qs1$%6+EaNu$5I!ge zCO8q14yI)Nk!vJD)M5MN8!6tiXG6)*)rOb;FO6QI)6+5sc&<{$RoXeV-rbFBDeRYG zzpQ^bD*E!HxUzWC&w{4Q@fyC59w!=A1M7b;TD;NaJpc2sy=sxMGl@t|Cxb|U{`~|# z=)j`#`sbAvHFRbK+c*`k-#;UsC?BzZ-h~*kfQXo4w{Xd&{_|^ygxxC|S~T##pHd>U zKtcsa%#i2*jHE*|@WLNp{rk}Z)D~F?5tZa&%>N-y+7s2THZN)V-w|fS#>4*- z8cQc(XOg#<&i&sJBBtYi)}cjHAV`Ony>=cZ{SPg)04bOMtQ_w7{jo~2R=%*s)Bn&C z4zT_8AF;^&|AXzN4RqX}Zd0X;{)3LYvd!^t?&T!$6r2u4{z7E+AeD>^k$4|VKCMJK z+USjpBS&=^8Tj$5Q_7fA5frZB((&j9@?`>kFXg?>wm9|+|RB+_iHlNC3e;mM{gG@3R~@yGB5pca`5o+!xA25kzgv3Lo`c4RT{G}@>9 zH7VyI9!Sy6lZ%TB`E1BHC|q9tl{W^?aGk@uPn*9V(aC_6>pGdWg1_Z-QgwlVdA>19 z*nxRj4dg%*v?_#lCTDf3KbM(!XYcqfc{!zvepVSN%Lfn4^~(2^n%xjzL+@mFW*V^9 z(>%nA>;8}j(Ao*5tmR%8N(XTVnuILmK7)jl0(Jw=N}KM5(y36{p$grp^K&=rvUl7BmrUq|x zD?r5AIq09ov0w=j%qUon-S4xKhwh2UbwZ9 zX!-awQgnW(q-)jRS?FKiYt3SlSsyA|f(r%XH`{(q(XDsLG4b_M#NcX!uZ1jE!fL8e zLqXGc3G3nEn7VR?a+;W&f`WQ(01+}1{Yf;rX4fpB1>a}^QK3T&UV${}Y%7(f-f9do z?0)T@I-=reIydPzIiDp(>faK}pnzK5dVa zE(yVZ2gnFjC^emY&ZM$-dg4e$Ix-#VrR2u^;)Oa^+Iq4xu3s=E_)f)YsuiLOmeGek z>7sOaDichafgYGF^o>rCnNH=?EgYv{Wf$-Pvd;nEL-O2!uTDB3EqFLf=2}^{B3Aq>dNN4dh?-Xf;4sp#PTBj@o#we%y7-)jnSD}ew{h%*tKS`+5m=HSD z)8^T;qa#&jZxmBS$f$&!*hrW+H#gB&F*^ zK6Zq>f`Z*{)g&rfUHKPT+fYE+M8dn`(Le1m>-u>NTbIY)aJ8GlDR*Xx=mu{ISvKCA~GsD znUb%HeuS{mUY3qo1kic9d)p~@(-y*lC3_Mxxyt8eXTx@U6-6y0HMaJ=0P(h3|0PEGyK zL`;%A(S4QB>3Zi9oo^{|ak+F%u2!-^garTl+T3KC?QlCgZa-YACxKDJ!`60moKg)N znL*J|?msDVYK88Y$`%ZNt-!QiDp)GXKJvknQJx)u2z+v-fE6ml#$uDGVr|%f4|n=N^`pbaKPZ%&g1h zNbX^O;k)7d4==ihOl3kPpH`*uf*42`Iq8R(=yb^(9GLKArK?#&YSo#gh z!os2Y%4GCXNnWJTpzf#M+e({B9V9`*UftooK>p)C|9!U~uwcq8|1g=76;}-w1o2Jj zkJhTm;Cc)xe;gcP=fJ2^dNVJG$_GF-#$~!F;4S3$?8^2EVkM&@(rP}=hf?g<5(tF- zBvVQhP&I+!Qc>lx+Gjor)3YWLT+RWcZj;FthMunsxV+097bYyNZ=TvH2v;*qc}3)M zE=#Myh}&FDyaGg%5LtIt_Qh^8#5qP*^;5evGMZj-yL&M(D3Argwrt1y4V?~{1acIt z{SXTl?Wxh;lc-@mMiio0|6Z@A?Dwix%15yLDh!(>Fe>0D0XEbB5;8na0bWOjCU^4~ z2_8o-(XS=1?hn41-1M2w2b+)yV$E~9U}ClN0Q;o1Cpv=wJpfpYSxZ**FmwG}ZUud_ z4XEHaoVM)VPBlF$s_f(d%~2x^?tH7w!W0QF&Y0@)nNqPh)By*u0h4qenQcPw?LcLW zh)*`XM~1O4_#@`(Aw=gyOc}$dDhR$dAkB!izTa?K6uOC0GK^A=?**`LjL-!c5W&4e zM*G1QiJl1u*cGW{LA16-d=Hm^-kXRwT^}tP;l0^ligmzUpn!=y#srqMRe4JWF`@%L z9kk>^vG8PLUxAkIXTl9+^F~*^*LiAS`Q_zqH91;JKzCauBh11*k@ue-8U{s)emPxg z#pZ+=7*GT5DIz5$q`zM=J13`g^Anw*prFXJf7v1{u<)?py)BY67zp zW(*w4@mwE34F?#iPdMQfxfx#y_G)i0w@32SnHUiE_V%v_kuZdsnp!kh1~j82Tw?X! zqoi_M(|QGfxdNlg%Xy-sqm7nZeM$MOh++#3zR`VDg#q-m3b4(3Vh`2ffPz^4&?dlw z`2lXqpoGMxMi)t_UH03hXQUaY?!sd!%!MR{Vn;CVsK2EonxmjWWk!%}Obg0Awi zob(f@_GR04c)|2ja4826P;Z~&u+w{`W1%y4$fHYSG7&N=N=O=`rC#kjF#nBtq;Ei{ zUu)Wi`&7sn|MqgSIrHOUQ@AB10i!(zV)I{ALH3Pw2krxT;?ENbAY+J8zc9Cq@{=b| zY`2SQKu$}`>(nwb2pLlAkekfdyGqJ9LtDYilWqTsK_LaDWjRn`GMyrXfS;XRX)USy zQ|P?S8zwy94Cua(cGwJoLs#`VKD3IyzzO0?H!4i0a(fu&u@t2&_A6R8cWG$-PH&~W6 zYw1+9k73wE38;&``h70z3ARFmW^(T#>fquoCuy7AIiHKtlUmWKGBeDkyUQ178b|f+Lk%kX)q1@p9@P@?$@%nf(4uz>Ipoqk~q>0j?3^13Ba_|dh zSbFyY6IeRJVKhhS{IH9r%=N@7M&yOMn0*Q5rS%U-%r7@h4?WST?aRM4(z{JgyYVwX zbt)~qs6}0Wj0@QJMu#ZQce8j*stdZxYOyOGf5Pp6pI`bgL`Y}=+-y)l@MY11`vR*Z zM$|><)GAd7ROxcrL}MwR)oE&8ZCug&uFm>OXfh6e|C(*}qd||I`O{zkOcM6V!Y=bs z;A3!#sfk`nR;~lHV&?3}LUubq`5`uo6>D~K60%}2i|)KffdTjgEIQE^#+e<+CWD|T zIcXKKBuw5y>`$SY(2;MilzRe(hk+y9Obd_->*bB$k$`C`mM@(0wyhK%%K&J{ba93; zL`4)Nq2lIy5C9MQV}&*(tU#tAMgtI@4Y#_=NaK zB%Fe5_ckT|nr32(swB$|c+qvlhnZY|IWByw1VpqlfGQkgg5@57ycB#N5*j}Am4o;o zjhgP@M(r08D;Oi*2HLA_wTAGeGo57E(5nd;2!el~q=`v_uwX6BLiv|skx)jlr@?iU zKXip7t0?PsB+AsZ-*$*>YrVt@_jHvwklrFdx&dLm9Ia@ zG+6knv;v&=4_0s^h0Dgigq3{1fG-Y^A_f5IbkyTkvk`#IXIOfFotM(i(43lt!-^$A z5L%r|9oRk`w{Pz`%;(wudIbBwOIACPJ4>4Wpylt=N_; zAeaUF0vnWh%sUGQF%nLdK8io#KRDxNq-fm&cw+;?fc7JO*h4t2*yHOaT$g?IrC8O& z5$fu10N?h2YS4AXGDJPVB7MxJi`9QI(JaLVP!A-+z?y`Y_d(+8$JdoaS_jx%RxYpe zO&I{LxfKCl>L(nQ6D7e$aBf3TYR}Gf^i8Wgu^PyU<0XL=pKcXKp@YL)=JvhVXT6$n z;VqpNJ-{!Y10fd{76~UK8u$l?mvS=(F7bo)6zzGi3k|SRCVn~;9-V3~3~zZ0y1Sx0 zKs)ct`#&+#a6%9sgOxlXAU4yc2~-APp@0Zhr^?>~lt1*ETzEvz|KO5FnGIMGV*B=9 zmGJ+yBQ9$=>G}#wJ_f3Jp)tVk+PMJ1lJ1ElB0y!ZrD^S!GJP)teUl!m8F>)I2m_G7 z%O4d8u$%;F)DQzu^iMW%o+0m|0J**b95)!uVF2uoiasbz1UvaF`EZW3qr%cxU{T~N zKtQUliMtTAD6BbgDpGfj;T_T_9ODz<%UCABsxLS)y&(8B=zH!&wSU0rl8xsUc)Ec8 z;0prOMws?R0&6@)-*dqy6(|1@qwv3RLh6jiwMI-!FAC^Zbp4Yps* z_6=!!Y^1EpsS@&V-{vwrAGZuEea0qc0C=Z%>!EUeh!Hnva`BO35;`=B&75=qE75au zyRF#UY^rY2_w$QWR8~iQnbR9AT;h5Svbs$~<&QYOVx^b1Zb_7t*3n+B(>>kt4lOnn zkM!|4A^$EdX$43mkW9V#BjrWGe0aWeh{lth3-x^Jk28&+;4wL9)2A*hsRz{79s5@f z%X0##%1-BHN=H1Ohw#Fkr2xbp<&BqM*;6|G{=lVCP8t4fcBSnX9Z6)=&c<&D;k%Q< zkfvRSkxB&l??^H@7M3f>P|+^3C1of_*Iy!!WJ(*=mhWxQKfT$3YNRgYJPslv8=}ZT zOL3rt))iBExOaKMQ(sG;(y-0=zWHO*@#m}AkC>Fe zZz!JZ?~rBX6pGBses3JzvnV)oiYujwj_;)44SHl9&4YxyiR z)DT-2!Gtfis+^LB(cRf!X}A{|zczyY2mTgB271J~UwP!xo(=9~>F;y4Fs55d+%z zh3ZLk!0~IhXYzJn!<(Loc6_u5+AsQIZl&YivTtISCvO(yi@{tJ|tUkG}jp6o3(hN)n4t@j{vFg&dfuRTd?iEiwB|M=e1}3DZ(V2&DZu% zPqa`8tm=ZCZgr1J+!}EN1<9Zpx~6a6K~}bn=8ouSrBLMnNo2shUSJe2avin{|YSL?!!zA7-iw(cM)netK+#?7=&`pKGDUXo5E z&N1)zGtVGcGz$x15!D9KwsvY{D9nVG!32f_VDz-0mC;@5xvDXZ=O*?#4>4tUm0Jl5 zdJm+UNCsZMCmrp~J5sPY&m&^z*$HR4N;|#mP;7inQT%?n{rnUj+b0=eNrg-ecx*XS zF1~P%U%N|g^gA0qRcib&i;>v*@|iC7;qaI3!|C!yixDU$&bB#7jF~`9W%bqHPQmU$ zMb)CI7(<`=t3cHfO(CoGoV>*zzU`VFS=W3*B?@zTmY&eBm@b_gzh?cnPihZ8s=N@MDAIkC8WuSmYP8%be%4_w zaF^G3S5imdV-|yzJ;1aRe%@rLX+az_pQHBi58ab9nkqmf`tkeq@ zswivA&A>YErtQwuNSbCCzOC85jf8x$tAL11h)&!01v?(E&f`rkC;7H~6O1ds;F@fo zDdwzWJZr4LP2&*vY-&tQU!zgyD-hW0II8+GT&+z#Qv-#t1!I*(I%I||PVA{7E2wnF zWVUl|H>r{3ZWS&sZ|4NDCsQVT>X;^+9*q`eLAh~6Um#wCC<5JF-kOo6UN$N|$2b1X zJnn~`#F+6>AJag8zmr5*^xV1vGB>e+tnxJwxu~ZII(028PCv??79V$7%CPC#Q15cR zlGAg)Sd){t^qWYLL7h_Qw5$ue@u_8Ae$$w}x%llSa@~w0*E86ToTs4Yo2EGl7Xc^4 zZcY?aC-Qc42sE?W(bX{*@b5_1|EY>jk7!#tF0SKtt zVdsTH+*oYgXQ)#{z4-c38jOf>s5b@FR(btx%ns{k=JM?GLK$3&Dt+ACY5AXSr3MGAu0p*IZ5S9X)cOa0?Ril>yp=4qUuq z{nvqfkNoK#?!!(qMpi;7+USvyh# z*4rW}RrYn3@%ra`FS71}!cnM%^>aEC7{b3TqlsL3CH-TbpU-r>CC!I+^)wrq$KwL71^mF9teRJAP z!=UPPbt+n0`wnApBk}_aH7K~^49V9r|EWPQLkX(5elJo>mPZ#ZGD1etEqju`gE(PgyqnMekqG z|FDjUuOm>Cs_0vXCJaA{|Dr)Gn;|#v`(+oEGv(#+W|rHz-0gdf zUrKi1C=R(S(}WhLS&>>-NtWu^>qEvj6kLVc;JuBd_U4It?sxu}PW3o=&dQy|U>X^A zHs4w7+OZ_V58aBO>bUc48M1xT+>Pe^@ zBU8(V)NnI4em+s8=Rb6NM#f(_i?$gwWib*<4rhWkfL zerbAIr(L0?RqF3+E49HK7N`~v{-1|i7y^j=l@|3zwS(p&>bd4Q-xcfGGO709ft-b+ zmp5lTmHm|ki$n8k9lv-4WU4QdwAK7ab&U$~CbzW{DRO2p9s>-y~+zv{dsxaAnBI2}YI#uV$MD2DU$@^iZaxU$m zbj>&&GZ7Qt=H~?k&^T@B@tt%}wwamB#~_bIFg$?IrkIiQGRiH=T31-ZzA%8S2Y&bq z11r0xw=&O1`$E6%b<#|Dkz*{0>1+%t+4NeFNyJLVXkq6wsnZ~r$mx_RbhmOeJT}&E zZ0t2(>9*v2zH&03b=}>b$Ja)jF!x%t4?5#*$a(Stxl~GVz}%E(@iG;3?}|$H@ZD-Lik`}TAMQ9GKlUB{Lpkg8V}{<{ptvpf#4|#_RBocX+q348GE-T; zfh=ixGZ2Hp4EwHD!!0dj|E;q&7_m1(TBm*65Y>Ci92}<;g;cT1IH~Rw-7Ttm&QDeuUg*$>X5pg?h-`VwQzf1LuaI7s#K@QU1 z-Fge${bi)~xVC$1ZXS!b1(qK9%zOxKq^G-}p(*U@zYrd-(!V)Unu37Kjc3s+-zR5P zXHWXSw`?|^bw4pk$-%)Znjqk=c-f4Z3+wOBDJC;Cbt?I?@RGDdvxb?3h`fogDd2fmm=9vQtE53N1FhRW7JH$k) zeky(_*4#MFa0qR@rV?tVIxw*=BjGG8a;tZx=gOsmHic5G2uG)XSs3wEeAQYknWes) zw=tQOCeIvwhHhqN#^Oci{qyOD*98;bk6!zlrW#uk>I>V46T7Ucy5qS}DyxT8-oCdD zjBtA;`*VSt7pyE&$i9$DBBtMJ*A&$~Ndb7oKbLH$#;b7aam=VW<>h;aD>QhDNu&Ka z2Jni|%PBpfycT!WHyd;1FU8K69`ag^{g_KTiT-~2?gdO4=nf8}O=nNh9`uQEGT!O< zP0!AUlYQ+Gju45g@@-;u{>E3WnBz6`_6t{j6}D6o*Ca%(@%9w^aELYPpx<#wp#2@^koGhtQm}|X#`>*kG$?Wr_(vuAp8b^oG@kkWIi|Pz@QyLCY z29klT!;tpny%M9|q_bZlBDdWuwRg8yF`Pk56N1b$X+^ZvEQoKLN(NFO0yqdLB$`ovyA7TURS#L>-=)ii<9Z@L;U(^ z{rB*y)2-_3*MgintGdG)g|~z?yvG)Xc(Z3jsJNKf5#FJYKE!}jZcg$b(pC0Wb-79D zimUd{sNtX$yEjfcePaVTC`#bLulrs-IezVVVH{90fMBkjgqWQ#^56B{;Kp94pkm&P z#XX-+K>xh2^Yh`4xGm}Z8S1BkogI`>%%4>fMRB?uMQ{b?Y#$0a@96;wa}3LI0uh>K zz14hOK;U&WG@VrHDvLG4UsB}cuV3+*Q%7Jx{VMMLoYR8>fs4f=bpcKsL(Z8(u<;kC z_v!XZnnjDqi4(8ohxROrnKKUlZ_GK%v(yU^@!X~|b)3NL*V;_3x{~(py$nBThw7!CY&laF!nfqZP|XAxjvYfY0}^e`_E6CYRi`D zoE^LzZNcTARSOU~F6M)?erW<$R9I&B?NOw_d!Xu|Lq8!_vZ*y9rxm3nDp ztH2|7gt48LcWInW6x^|nuzOXsw!CH^cDGV#C(s8u@~G{0%hzOC|9ze8{+?J!K*8+D zI$MaL-M$L?8EAz^b8%l*AdZMVCO$JgC#I?H1A1D1k&hxI1|I*rse6Lr2#iX!E83i= zL)?xnE92Y!2D&kP@f3d%$JM8ra&(23y55b32DdeDZ_xS;$|?HzpBb&+sk9kC%^c9!F)gzzi3&R zE)UX4?%sL{)TOT~0zR-K+H(hlNCmlrM79~c9su8M04Z(q@$PI~1Ywk@bWjvv`#;@u zx<~~_UQjY4m=TIjjV^p*{vY}9UKNAr}(ZKc5_ZVDGslb&c zuxrobsXCK#kfPM=8O2JE?~6)b6vU=J7Kh%e8=p%(`8Ba1w~SnHLd64ZAtiW*=A_O`<{-1Ww* zbX=@yuD2>mUe7vG%`D>Wh^M>XT?H;`WdB*07B7$srKGBNVhdZ?aFq!r_nIxPSGu{$ z@DTGcQ;3bZa^%h81L~aA+*)E-?PO>#kWt@*;_@xJ>m3%Pi-fA8r)tgT_*mWCA$Imx z(X)q3KA3h3hC@>OgkK7*#ogAW_*D9yuUV+lsmmTo9!xYZs?kXYk$<+2@zQHYQu5fA z7}V)ZXGupsCfDB^X+7g}jDnFcC8oiYslOhpo~$Sd%=scITl;ij*8tC0#vZw_SvfBsGTf6;?VS3GuIL1VBC@)gTpEu>$!0gl_(urA6CFS4m z65gd+=0oeuQ0y+}ss7`if&;MF5mw{H-(lZQpIiEle1!bAtF%mM{BoMl^Xa&q8Ij%4 za?NH+9Yp+_4)N`oBHzil(H_w4_5+syh(u;4BL=%nj0N%3gGw)*?ANjQ1yT#HT#I$4 z>&D9EF-Stuc+4l@0%X*}?wyZVu3kvafbjE|FY(9{>g1G%WUQ<(k_U;Pk=Iwr-Kl$r z4N`@tkJ5&ME)1K!&K48>9$uX-Wh(5o9?KR7Z&{^CWIR`AeP?J}9av6A?F93H>FLy-YNzC|hwh(ApL9o2r&5mhkK zc0*48M+6~#a*JHbNXZLArcMhJ9akOSn2*89uZMP-5&2yq&Jhw*SX%I8Qp~YVCGt0< z?->@eSnW(G$1s!mC6G8&(s^w5z<=v*Lb3w`4mwOb#m^={Mf^osaX8il9~5P9_|{?G zzX>D~z~o;?H=cZ^10)umu zt_3FJ)3ZgF=HKl)Xr%E;bUh)F0=6qu0;oT#0&(luTm_D-OG3zBtw(n(uZe~Z7+ONs$eHxKIzgSPR8xlP;YW2a|!kKVh{3=k~ za3o)8J;{NhEh@#*ZKoj1eFpR&EW66JA^7*u*$6t_3i|TF%fk1wZds{fxekm zh4KIqlNSL20c{kcQY+BoM$S}On@$vJ#|wO<&QVIrK}T}8g5in4s@W9NXNKo!*^Vi0m4+Mj|+tR^>`t_P?@!fWn_XjNB*KT=DOFKFO=%Hzrcy4a)3lD_6 zyxQ%K2ZOgD=9wV3zpyofSKB?uqb&UZ#}QFkYsv8ph||6KAfT`+donLHaZJ3eYevMR z6CVJS{|5a6qJTmUu#L|2>=3UF0(?8VW&0a)SGXS~m(c_BCNV;sS^nVE=Y@G7G@P0^hFaR5ziXSnIh*&p+yc$EoeZ)g7Ql5%68a+D^jCk zha7xBeVi$KMSZ?5ey44=3IHXz?A4?O8&c3wex9nywR#*?&K-|P^gNS3Hj{PXityXa zkXhsOe0rOyDbIc%%~}AZYygtt|Eo>3NPYU2A!gShGeO3>D)e+5fRF@~5I=jC@utM! z{IaVgLQ|l;FWz*(qtJXmcCmUX(}A;93QzR4*!Qel7PF2xI~}HE_2>-yrAow)b{A1B zSO7plcRDAHVtG&ODt~YSFNWAT-RqY@qF}F(K7JG`gT!=eEN=_0p7xuwldD$bLodM| zn&{Ls=t$!42!4zwmIO>~emHF#+p;UG6^I-u?f8~@&c>jc1s7}}B>hkajgU(}uLvMq zsYKL%6(nN&2e>2&a&0+t5dlDfx7Qc7E1|*%yT3oG?y!d%?Xvyk0r5|9eQ4!nyD?)a z{<)QJZ%pU?+1&h(vBPl$d4Cu&0rC{LECy>6z}W&WoV|7Q?lZYfS`x0AB&etQ?Ncf! z(R{sgSBuxfz8mc$rS`Nc=*Xy0#L>FZuu3wz6ml|Lg6MI#XGxTabTRKZRj5l0XN z<(^F=6NE!a%)E;fC1eqAtz^MCYskvRVaJF^V;ZDlqK~maK>!;If>7xVWWmY5uxum80#6 z_1WgA!^J$MYUz%k2jsn;7$6=rT;0oKVky)CC#CX~j*w8oB5hl9g_ns$^rmyFW53WW zZmA^6$*|nc;VTL}dm|}vq)6THSJLfzp=-;#S~W|?N^F5yG5ERdihK&}o6htYpy?x7 zvRTGae(^_BL~nuC8JM`Q%5f-ElvLbRBoLR_ciO z<_%7fFjLMJI)kD229v!U`=ZgQOd00jpB7}ANEx-!-8$h8XT3Sf;yfIl$IH-;GOs=U ztuX$8W7+0{)w}j~x_0&VljjGel8-ZJSH?m^QvquuCXNl-91_2ytWmC`^7enK`9jJC z7S=MDB78WKL}T1KKxjKCxW3fzcTl~lumgEsLChFa^qc!7SuB8Pb8k(QqqP8ejSy1t z#O11yoeR95N{96VXM%rc5qXw%NpW{U6sG@ZbM&~C|9+S@bJBoSESgveo-gK;GOG*L z{yTfIpN?C8w>MW=x-~Ye{p{Y=Pd9i1`qDWTt&PF)P>WL|8;tpu4diMnX~!|DBj|8K z_oMOPoFKG#-_ByPj;j1`xp9T=Fj@Zt(mz69scDX!*G(^m`pTRxbdEO`q%JDnhv(jC zUu&h!q?rkIu_8;!v2q<-cPQCH0l0Y!spv>wpyMr4WIjkPLcPflz)(+=7~)N5s27i) z^}Z>fOsc+QxBT7BN~}>S)jI9CHKtl%_vu@~(}|-mK>S9_;Ssmkx5!`;`9qaZiHqxZ zE@54VKvl`sejJD(g7Ox`b_!#@b)dDZ-pLQ>3g|^~JXVSIZswBNJEJkxej+6ONQGZEYakPrePt{8o+5chkTodU0Vz+ebtE z5Do{>Kj!LUt~W9s6P&w*hQ!ONG2#^TjGBZqKudey!9WtE%9M`zUeq&aBV5u@Ji$s8 z=*|%{b)qdkX@#|Xtr!m5hhXoul=vduV$k$4ELJ=@ylbeZ%)%#?<2$`X2yz{Q@9;Y< zQdH9el*w;iU*(^dCF{Vpud;5HiDAAD&6vMO3z-TFc;qr3;+(ps~0^`HM@JM1k+V?O83z6HHM4eCDliaj{NPX!O0tFGt4S)A55A^v8L(2=(@iAhbT zf~a7jWl3-|(rlp_V0;ygG41$))VWw|t|6_EIN^i2HW)&vN#VfLu?*L3=g`c*;bW2=#(T>7f+*ycXtm;j^=LkHaU zW}rZ>g%{Mxq_A?`L`?6M*>0trS+RaOg0uIIyp{C@uG`GmsPJWho#$k81xmu^S-H&O zCA^Q5ABmbHnz`>^WF^G{bh zVioe*qgto3y*mxnZgn?a>5m>N(E<&?4188M5a@k<*K{DTQAq0Y(bx#m!7NiK60Uog zmcv^1zN&j6V(Mm_J^cgr(s`;T#O-ZTaFbpFjqZFJ3&Lb*-GUp78RYeHVD+GT9UF>{r(X%<3 zd<7@t0!w!3V$zeE%FC3!T2`6v6M6@n?wDs*4#Wr`9=Qp`3W^E5-Wfh}b;fjcDpuug zs3Ql0wS2UY8UW~nevgKB(QNpwgPwXB=kd42hN{Ty4V{*hUF74&e*VaRfqNBwhVrdp zOFeI{lQ5ku4YPnUB_9xLy?#jk5lERHrvezGgF=_@RgXn(>9~HBh_l4Xe!7Rd#tB%{ zd->2y*hSjvQw!jvo{HFZvPfKM+Kpz%TR!f9_kVhZ!{9Y_k1I~Pkty)FO2GC(IpFRn|;d;cql)J|+TTXl|?#he_-qF(AtOTlUR z@4-Lj%_CMzsa>8gI5EftXhSRr0i-Cu-GnR%>mD5YOGqR%@yl6O3t!v=oUIPkER$>& zA|~$Ns=QI?CNTi>g{PFesa(%U9UiHa@N2{Fae z-1b|L<5rR zHhq0gptFAZz?2De*T6}jW8KIPNUucMf&i=i8JY|Nl`l+~!_7fr`?s;>_zO6vC)SGj zKerPlu7Mm0*(|2yL;Ni6fwRbC5q_5c*92OD5~T{rprD|`gEqXC8S9d@%Fyqw;hnGj zC5#EUmW`K2kmGepXJgTTwkTm80dkMq~s;hSl2z~j1MFzR(F=kf+pU9vH4CM*d4z13~)K&`e; zQ(8t#Kv7-ydjI2I@5i)xW6(_^0J7Om$v-TVQ@I?9x3p9Av_1v2-CX5e3M5i(W%b7@Y?2|MTKMLGf3jwm02StJhEYfa;>3P*6^! z1lv7~yu%=CK%5h^N&B(h7c%YtL3X~PU3$25c%ht@{NTO)%md*E{%$dbTE{>(ZP7Jc zNDn@@Br7$-;@Sd#O;3RYS(T7Ws4x5$^FrJE5vAb_64ew)bgNEw+1nP)Mm0YsnPO`b1ZhtGWYVE^OE((M`t+w6W(<&%WY9*3D>-ZqRngUlC7zjsMz zCy;$fOwUDGz_E|s{JAgm%F=u#T6Dkq@Ex_`t)K+b8FV->N(3bG{dro40RAmu) z)bV`sW5ulT5Zqt1gY2l$e1R7AwmpD=RL~yMq>EmthaKGT;C!o~B--|{r-3!>2cS{N zC+3>3K)(o>PafP&uXc(y#~Mpz7{<#%VC?~lhuyEkM1oUQy1X*FpkqTgYP(u?EkRcv z4jGd9IHof~+&LkHo1sfv!R;C{XeL0)|0GUsY=EZ?*0L?tQ;sub`)4&AThV6p@qkzY zkprroR5YRafmRJc?Xd{6ai+9FHwpkHU&zz^ z{g##HIAh}`5~a}(_ZXGpyJq9xB^;jytF!vC+2*!MUb4U3t*vS#d{ZgM!>&5P{3;mb zqZ)N^rPMC3C}Bs(R)udl?GEAph)KT2V+H1>5q|aSKQ^d>2ySWMN?^?_d(` zgwi6xvQ0Qi6hNc4b^n3a7Wxtn6>_uz_=y*0(IT9tjcetJ^ z!WB`+IQ|zmYENFpE;Ea%QJK=~xc^W5;oRC9yqxg__DWO1E;4+6P)0YTB@skJt*7c2 zHyO(^3X5N5n6*_^$3ztFwiHmzY5iO*@ag%X3D^2O>`yWoYrJ5?IYIn7mG_G|J?7qS zWN@)yIYpqLKTP>DRS3biu|0&#(35D2V~vB9z-dQTI7;!}E+Nj7absZl%6a0%k@D*U zN&XRWVKTcv2e?izmjQs5i`+(`ZP|dilv(b)P07I*zJ=}_II%ErMov8EW#YyH(6+zk z`+5O8zKcf064o~O64p4|ntbrWi}G+>uGpmxejnje_95BD{R3I5j{Ze-DB~2%te@`e z11a)z(--D$%nbmhG~Ryklg6EoaFJka~q-vz0d+)i%|6sJA_wy3q;q_5A!rVP;DwpT7cE zd^LqVslV)$ZCNj+vwPRvro^PNW`W8vP;ZOgi5rNrlcj`i2kM+yY1_}xvOZPH&+gao zQ?eFVPU39-^@lIXZbX{I_;_PPJ{g)acr?na8GLIKIsGjEJGAT-=dhm-(?Q9J&D_s+ z-+7M!!UVLYj3Po306t7XF&|$un`N((^9iA8vc`|hj=rEhg6$Gv--$7o(*(YamjiuZ z)gxWHdX{?;3lTBAqZd|rt>P2Yr-|wdYlby8xLWN8z8n(yTZ%RdwV=pi#(D(MjLyDI z`?rm|^m}|Qh0!ZV&G8WZ3VWPX57g)DgA=@an6llRUDtC4hDSX;JzGR&nK$$DAYb6_ zz9NX2_TUfAsL=Lp{Dft)dE3Bl3bY{O;ZTv?N{6FO^5~QoW<6uU>J-UD?MQtrRWpgp zc&9ba@Aod2MHKT6R2$KzU32=>L_gfkuf03^Jxmuvs7x%W9%S?9nwgq-ezk%Skn)>8(cDblrnQb|*% z8w7fo4Ry_mSZy)A>}h_k+eL}jS^c7eEaduyrwb*b1%raR`OMDkU;^{LD2oITm<5u$ z81F?bw)3cOUMFx-vLH~!1s;iago9LW9Oi?`$YT9^I#JO^z3kV-lH7zqh?H=wEr4|` zDFHU7(NXmynTU?r*EP|bo8+D?*4zsqjc8OkCAU{+^=3Z9wc6+`qEZ;My!0f!=#jh;I>U2Pwd8g)f#$zQ!Y&sVafd*uj~;*|rJ(i!@DQlu z$*3?9lijBK``2vX__|+3_Hd`z^C%OC6bS$djT?>jbxX+BTnh8H@mI)@6Q%z9Rp?jJ z@f@Pb8uk!rBGnqf`$C<+VF|`&nQ2!n-b`m{4NT?usP6}bg^ch0aS`T{!g5NKY=CrHM(%;q&_ctdN;qS$$2dNz3HLA z%^gQc_UZis!G7Zz zbt3^T$BaOgK8mVq&a~&rz$BAyY1=jWMs86uiB7oXH|n2HTuis%!Ftj-88* z2jQ=USdZoZG`z$d%~k4Z!xJymECujLF;_n!JzIH-FTbXsAjj@&Kv#?#1VmE*4^?j+ z5LM9j4bv^TGzd~lht$&DvUI0(N=rzGbce*!jWkF|cPZUSgCIzE$#=N#_xaxE{b&E$ zIcH|h#5LD1hVy+nX7r6u;+@=@0>F$nuzZOc^>Mx)?VRb9;*Y@+h-3%`?YHLzNA?9N5`~Vv*0^&c^X;%CQ zK6vl8+V)$OBx4=o;c)R&q6kjgl;eTaDnpW~UgT1d(5#RehU%I}+i{h2=Le*BS$xVO zYNNJT-UgeI(=phSZEaDUE^VufY-|HZ&FgX3l*`+}Q^e`-@eeEEgET)e-+w%b2IvB0 zfD%`8OWM~+4ujsu?0OcP7R)2#iwt6 zc_o+I@Gx8EutwqcpZvR!8_CY9&eOw<96uwsi*rgHj|I|6CJ*y&+x0}nKe*6?4-?q|9E65L0LQ8Q4CP?H z>MM%llQdIElU5S4{o;=VC;ljcFJr|t;4j8LOtQuT_~2|0_2Jz!6gPB;Bh=7!o_>Gs zD=`WdNnm?>yX%{30`pj<{hzgI|3`xrOh-+HVUH<%Yw?wQ{qMEuPYDix<5raHL_*3_)s zk(B*;Wf#EF;9hUO{Ra6nRTvHk`g?b01+)bfZGI=20n#`j_-JrYChjB^2EO7Ku=btm z{&X=WQH?H^#cYwqngJ;QG+F&f&+i{e%wep$&AgMps!)U3h^5$4MkUMR#XGd>!`u(& zt0Z@%3ql8xoB{0Z8WFH4NT)Xif$V^TqHYjaZwOm3VW$9BZ!bt zBIhFj(!*V$HQTwIPb+a~F+=HoIbIw3TIl=lsIx?GDD3P+eXZVTj3cE~?-Tq6NkpZ@ z1LMEpi6UU33($bg)+T!kp-U&dI7#S-Z_y<+0xdKKgvb~GqSeL(#a8A3>N`(NtLLM& z)!#yz1^vfoUqb*i)(38kA&3kRN)u2D{8{S|0>E-E^?!U2f45P&W)c|3EZH1k=am;1z>*J;9Lpj6vHSqNypyS1J>bmC3@xQbc<~}5C zv|CY3)mSKNj zyKWKI` zkGnT1d$$;Hc`O&M3=TVJ&Nl}99GJO`RRD!xP#`H_cd=~t0U z7~|OVfD#K}-4NL2clhxN$?h?0_G@W?ezU#N8!>A24?zBo94NUbjfutP>(SW1AFj`7 zLsjLVFBfe~i!73@_w{2{pRekd=Ub)tZIg+AV^k6ug6IP>1BBJQ80Y#Pc1)WEN0U>q z2dXYHyBQcTZ^TrA(NDjpfUyuz?!6K_sig?+-j7x5muB|) z&%28%V9DKOhGknj^5}IzTeAMuageEhRPxJ^C(xhG*e$y0P(6UcBLF-vc{B$k7enT< zNMNP4MR&@i?rFWD8UN4EL)$WRiv|QfVIRzP+NiE(Lq*QjxIzUD)6U(acwg&gfCew}fCHAFd<;aO#toykx5y43#07d#}hf zcUu&kNV2KRfF2t8;*&88@I&1G=KqH6@2otE-0fbRDQEHm`)T@PS;>H|Ba@5ic;qZrxy*rGqg<5}@>KpPJ{_W{nSQao@*&>am>my*5ArP<+Al8%fS!TFr|NVVpA z*bPLmffj-_F)mbh!LL zuBl)p6$DJ~sVj(^9UwOP4_%<;Ma#TeT?7G^#Ok38jVv|T<;gnL|4U2A%)}_2K@abP z&-z(1ZbS8J@4s2;P;sEvNV@M^QeIw%^}*tfrUD{pOME?Y-Kx7uXwUj({ zJ3zdgqQcOJvEF;&{auQ@*d#Ho(E7r#MF(u6fYwiZ^}7d4D6sCf@PyQ;SI}YA4o_T{;2)SKn0y*i|NFTbMKJo%a z1s=>7ZVl290<*7Eb?sqD1v1@`g_^!U+}7j$0LvywXUz}Uva{YM1OMh~(edNE_761I zM=Rm)`#z_NDUWVsXJnN31K+}ZT%jO}pn0Xr6>1UX0>IJ`%Son|+sx?gHL=8i)_Z=dH`k)qwR!57kk+C;%gc4#rM}fsBlN5P5YJza~2qr@URiYQ*EammOlhI*ObI~w1fxemrp8!2T2`=xewJy-y-;zbfywY|9Xd+Ys5T#{5O)ov^{5vs#_Eu-^Er2ea9LNRx;A@r& zi=gtqg@3-g6?48boZ?|(KUA!zfB$QDJ0UkWK9N?g0^T6^tqplH(oe%4QwHB{P$AJM zU^}At<7XB>j+6gA1BER%x3a~m+?&(BFJc=`eb1lIwucG<9tBWs=_qN`*gFQR2Y~_f z)eIz7sCbTctV(544C55Rh{&J2(i{?gZwlX2y>`NRzLU9t&ZsXre(0X79$!W|rc_dV zCaYQ3=@Lskif&>g_4*^BlSC%%dpVzK&2}+_pAKeheihVx6B3fBdbs@=&vj6**7Bz$ zYqHJLiC(t9YZogflcbdW=eZk@*Y?ol6Z(jz$@h)+;t8;28r0G;3fq35h;RGnLfkIu z^p|IpCT-cYk6R6zisvB!mO_R@&R%zsj(j^KoY;~nK{&d9a`#3TL*_|lO z+j9|7EA^*bq?lU&Cv1jWVCd{YLtH#iyjbgl_&Y#=>QmFP+6oTLWsubF86WQr4YaYw z{(Zp>U!CNvG_D3rdTC0R5*+|8OfRJ+4=~d}g_Z=*;l0+mexF|yIg72HV3cP|&Sg)> z_#dzz2bzQnHy}dL=8Z|f5Nye9gZcFR>4wH^H`|sJ&Z5s`T5haL@>?75@;`>4aal%|m@g{t(&yb~FHN~P3#60OeWiizdMAbFqh_no#`o7PwD z1JHUZoz9utnXSM##>5kubP}C{j107|b%3YQl!Pt_T{bV%P8TsnMSU z;)s}hbac-21Y%!YW6owpKlrkR=(Y8dMFN#u7t^Idmk#aDd?o5DJQPjY)=uJ;L@pvk zh4FPPJXpAORL48%)uU?JU&J?Rq7(?I4tIJu%VHd!Tj9CME|N7Mtb?qm7_4WFBLAeu zl$S4W&YJ-ya>U&EIW@XXz`{wu^p>=%g8QX(K76^()4Jh?DQ^bQu5}KjTjAeXUUqKb6n4jv55-qXQ#Av>H0N*k3ht<48GF2 z>ky5l5m4)Qp?lb@#c|IPYaZG^90XJZwE77V0S0Vly|&plK3In|L3X%{4GSEK{)Pxx z$EdJ16XofY@BtZj&8r~Qxf#0+R7v3gaU_h$(Hut0jd{eY&uk;NzMTZNwhDj+hJwx9 zFDm>6M3FEB889CPsN-7)(NF!D2r4@&jBC==Z_FWu=R2g)c82cbI5VKD* zFWY<-XKJ4<<@dMfy6FHM2S_WrtuG#fr9&0;58i~ts^kXcd$4I=hKF$3_2Ps^siXvj zG{q(Pwhafxce>|!dJ2udwvdwju8aNwg;*P)KWp(UqHYr?vYp$-4D;q| zrkcp0`^o37ubxS|KE3nC$;?dPezy0m0<{ZJgbr%bP^?B>`jo$^dj*eoDXJ&Gul|=yDjDvr<2SL=qS|5L+kUlwg|S^l2PdAE8E`5zZipOeK(r3>h>KV2SJD@Q7ChzA8YrI`3%$f-e(vloRI@B0BKqol>BiFrgu zW?;ZrV92E*MRO{s&;q%P@W6IDb!iNTm#MMb$T@^PuZUpv!q7<;J>*Lb96BVX!)Fud zEHz1)9p#;)(}p7KBK_t#jZUeid`wJnIEK7C`5$cC;ouE|iT`$dn!C->1dFY1uDg7< z50as!e-O>eX0*7#mBrzbJTN)%foVb`k!q=**3FOkG?gTK^&~)F|3;fLeC6o##9l~p zMpVzn7Ow;@BRjjSzrQFMuN_j>&yW2=e2y2*1Su;eCP%;Rk!uRfq;Ev&DsUmIuwhQ_8(pErMRDfC`j+% zmbwDE@ZSI@tAoBm;B2HKe1-&^sDP|}cq5P1PZYUi9a{u^Ht(H8IZe=Un!$(iCLF)p zVv`~mFD~Rz^PE2D7GTlf2l$N=!RvOciTO2rstLINefzq{eCeA#@eA+us^<+}vU$7+ z5&ybx!@XXK=T4st_MH)6w|9zsF&fICntB2PffzU2tbUUDUd`#W{H-6G%##QytY6MP zS?^Zn!%XQ=^YIiqU~3OVGJ83NzVMn}eeVA4_>UjCW@*EO=-0`u>2a`6QmO_GJxAv) z4ImBWbl+D65fNjR2Sc4Atzl07|@gMVzyR_u=u>nCRT|I|GnoG$`X7m{fJZbfcU9lyJ?0&~|-W z>g2C~J%nQSB#C(ObhFOl;@XQ2F8h@Pz%8!<|6}zqhoyRC{xvV!7nr8eelK7p*LPBW zyt~nMCLu8qPv5d#a1%}5V&{6rX-LmHI}AYaUeEtaWzpHHZaeM;`t9>z?9+kS)xq58 z&HWYTct+RlpxB(7x>J|Df&vus!@-&2Wz{Mif7f3^!Fme*K7Kc!yU(lvnIlbE4|w*Q ztu`VDh)ei84<`P1GRjB$S|EJorB=7nsDfdQqn;2{7r+I<^hY|^ZZJLGUBk~FJOD4w-$$%X0M=tIh#?=aMr zdc;a9{I9$Fu%aB9iK|&fp>FxPO4qf@ru*T3eA?`VeHa<#`6ie3I0YeF;&vFZad#Z0 zkS3#XlCfoKnDDBx_ipNLB7S78Jkr2zqX8|gm)kEOgKA<<8=um3`L|($hM%99*vMV& zTdQx|B!{}-H$-4N8Wt$>t1x14q6@OY<bCIsN-I!p|eB&k=jG4>o!zl~5myY-d# zT->Z(nq(D0&USn2>|jiUGB+kwWlpdk`oFQRWNt0?{mJ}t;ekwmZiudd z@2KBe=z4SL5m7N=Uy6p|TT=F-+JR(U`y-O7WU-|z8MHhrn&8kvqeyy)pH*WlUg?p= z`P>!wp*f@B$*%PpB(>gXoPlaM0@j{wQALmUhc$N0a-j+nIU-}NB*`{xh=o zQPuI!GoQjH(K{41#2w`8@*`-_h@{1lS)v%DbQv+2l|d^ zSj5D1)D@(BhIYube-P$dMED06pM;uvw~pwQvrZvhQ^Bnlc&)Yhhq`2Ro%*}Twl9Af z*2V6gUKl&GRiEAi{yy$(JSnB3w_ctXx>uJBrYcS7dzVCQ3ytY)lYg!d6oZ2)bJbb7 zX{l`ugwQ-_5OHm+wR|(DWD_I}Ah<=dO6R(BcaoKXeHdOKDB8OzFbrERs7&CaDF-c1% zxnVvuX0)h7HjD||tPq1J}s0f=q@TvOZMG%={B9gJ*%Z-R#X{LiUDNF5? z;fS~L`FU>M!w+fj1Et^d4_LPGAa6X!Te8a+lXL>-r|`VKx?x^Iquemw6(u1t&fJtn zw-9EJ#GqG^Z%+|jsWl6-IF)yL`<4b;kd=Tr5eV*(WLLV9AFQ_LF)_>P@P2qM!|csW z;OSu$0!G0x6e3tj%y6?RXj0LFcoAr?qzlu;3MHG~3qUP2HVoED6Mi zUQ=-N9>++6$j7sU;TkK+gOsucsTqXP9PLpHj5Vo;gVpC;Du#n+g}I}Y*q{c`6mQ}$ zDOIucmexxM9~#97MGPlJe#|FV=m&LqrXqX@PxeC|AZa+l{rBUi-1B{8`dnRWZO-gY z9!U!SwYBNlR5Bw^=IQ$dzLpLNHsi7?hJx>BhCa*sUH&5T)yjC{lBTZSU+PU4^erE9 z&w4O!V-XY~Op_T2I=WHn7hxGfNc8AxZ_v;&#E*vIq{C6V;rS#wdx9Ijzg>uH_(1t- zi%NmR?P~v(Wy1MgRQ-e3pXp+XfGz%xxle>1LNH%1R?M1XB?2y*iDugv7dG+&W3Qj3 zmeYT;OFxzbZ|p72$8vUR(aw5GbgtQBthc{)gcq}$W%O-4FAK!im(9v6dOs)B`%pq{ z$kL_LosmwE=}4eD5<^~`-pHCFO`+2r`Qu^Y$TDHN1o?E7`zNQ}EZWDDTR)DEU2s6h z@Z(sRu5G@v_=A6{3X|nsmJqZDeBe}itY?qsm^#X%td*@YN%b<^!t>^Mk zXmxF#>$Zp`!u`8W1VqGv^-K0=ZGWc|-;;`7of}W&6lZla&O&*oV1@Sr=s2&W-F0z; z5fBqd@B-6ShY-vzu83fBU-Y1va^wlP>iQqD3FL><^2_%%nJ~ zPLe=i3y7MyJFQ0O6c+tX2{r!ZhNTn->nD|B>g@WC_@N?;I<2_blU2Y6pJiHwwnI1k z-<93wQrfFY2#sbSddEA49MC+0+%autRdR+CN|pG--4@eg z>zxkCrJxS6$I8pBFr3I^6@NDh@ z?a5qrA^ezi0{y*FC6%$5Y!doF2Hrel@JIkrFy_6uH|%>$sbG-^!cn%lgR*K?yY7(Y zEx+U$m_dwB(nI;Uc;hY48bqsF5Ae&T`Oe7$RwBaOhzj=RLPk<720#EW|%XNKQ&%ye-15^)3B`!R64${Ul^Z>Z|6i8dRp|-qDXD5& z56FapAk55(lZ^Zu&r99clthB~u`Q?zrQ-=#SIkuVmI=oznBJ0|=|Dx_MqTZbP=02} z?@8y`)cgCZgMfQ2Bj{sPb_F&e8Ry3broW=4a=C(u>8=WnjWJe`vr_UY3!e8=e`R#f zHZc-%+X1y28V(L|TiYmkBK$zEPblBP0TxWNSr!XCr#0?5UU=qm1{=8D2~p|)a0rlV z7G`hvKSEsGwO+E8pM3FG!&J0$kXn()ft8H-6I!1z1urT$(C_Ofe11Ap?G^Mq(o4pJR7(=O5TM4*? zKb*H}?fxaI#>Ioa-T|5jd$X4cs?MB@bM!7!hSveX+$$Q%fi=OW0|tF_m6T(O`b^;1 zhX??&>5t1?~X6wrg1^zVCE^Dt(~$PpTZ_o%#45{59t{w+aM&aLB(s`9{5k3yS1yjj}MG*-;zIc!PYK+-?fum)JaG*S>; z*!9l)<~X}d17742;e^PQ53}R9`#>0TIP$3+d^VrI4aw)u3+RykHOGklbhscXDWAYQ zAKKk-%DFMhQq#X>89h~?6z%#-$@IJ@vEi1c5Uv%4;6pW481c%SY(p9DoI4zQ#0>}y z6RWRE#AzT99&xhS$)ta95JNmNCI%E_3JRbxSAiV&e>&PZ(P;`x?p5awMjS0!&7DJ} zObSlG9p?i7TT?MK3Lv9Gy(W$Df4blNeps#X^q*QL+TPtSp>m(v4%*gbIbW2a3C|b6 zf99)PXZt7RoaDnyC{sdX|L}KsX0vMu^Ymw=Bs{~H!Ekf4HvJZ1E||Hp z;c7H5Y(0rosTT095&n0(ZPvqw0CGJW))OARQsFUFX8-<~P_X`TIz*Zt+?}_HGzUskamzpuPF=KAca?=Q*ZN=iu=;r7 z8THM=OVe~S*9b=uCVLW%E-xLmfr+14hzS1H95(h1UbQm59-;pN|p!@bW-mP|0EaAnG%+NKkAaZhdqs z<)ms&`RYICo<`z0QC1q@Xh1-IzJ>-X?BhYkuX&s}c)U`wl4 zhAJ~~#|*0fUFo6{d%7jaf!)%@5Di(KNQb4;(Czp7i?CNCSeL3H)4?Wh<+(kJJoLVI z&hd!)AVbTHnB@7s)gsxejDIC{ zn6By`hhuIZDeHuxLYTF&^R2u_Z&lD8Q4x~wp|X<+7A{`YVC!9Qk%iwiO96$HE*#c< zJkkg3lAC*Zb73R7GxyC1NZ=U;m4@#gXi!GJ_zh{t?ZSnP(C=ug5siD}dLi%`Ve}9q z!(cJMyRlj9F_5W7H2##DJE=EBRZKXYjsBmXih$uKbTCKzY4FvE_?j<|y&3&sZqpN zBO{1O}bT@Ka^5{`nJ_gEi}Q;SCt>rtyJPdm||b zNTH2WAN3iFLkV{KvS2)UP2v2XlbL-|s-?r32ue1RZ^ZDJ!sB1ZF*TG>3)8gsa_VXPw#RNMOo#Rf9yDD&>|6Xt-Sr@F>2@DRngXW zBX10SokMaK3b6)wR;fAQnv=i06znn4_{+VKm*t}ai#v*S6mDBIJp$xkm`!n@7C$00 zS;3<&;YjJ6-jb>2@*bfDE?`==KEbu6F)0Dro6dZGB36^YP<`}-?UnB)3j#bJR(>mc z7(zVX5LFq55><_HpxI@8T#NBGi%DCkh8l^u#EC!>ah!IpwP$XJoz-RH^RVydMr))? zg?u+^;gIMlG(R@XB0(K`B+$W%;sse|^Rs$b;5~B5UUU)CMSbY(#|v*W&MkWzC3v=O z^jLxQfTxZtIfFQ@*et&4slIearK!Fp+P>F4h1*mfB+wKb+w;ecw(GYr7_kmI*p7;d z6k0*jwiDka5*<{fB_kPKwJR+i)q7tMO1>hzkG_*wO4T~7&uw}NhjqjcYJS!F>dyKC znRQAcEq?J<_r)Ytdo1!iGH9By#`;sA6~$PsJ~ZW$3Xk;7C^fwOP24KNk0R`*1=VPo zuuW+Lu|dP-bBr=dC4|AL_pGgY^@Ok#Z-D)q5>IhbPSH_)5_V-jAALTV zk3?^vRA05*Z!Eyl(Ddm*)D+^PYWs=5VA%|sl7?;&9a%4>_!Z+x-m|^Yyp`%&#)+*y z^D*VmaJHnkMfNa0e;huXev_@<_%4kTiceG?xz*qbcj#zxPA1)l$33b5<3K5yJ*F`k z@q$LA5%P64NL|%B&es6v#m7IU3uPbQeonSi8Uj~{!+-0Gq^-uLhb6QvUcXlsFizNU zGtLhAb5UYI)l`Jcz)jmANv#^^cK$wYkXP_a++L|@JU_ULiKv=|m9bIOf~jV;)J#4=_&bqzH4N$9*5IN%!XD@xA>ZHQ?br%>& zAecggz1!{loc?e&8=|83v#4po83e_*2d9zq?971RlexJ#us;%%CUL$kv88{-W z<9foV7sk2ZjZjuz3+3Ygxd1$3?voJj`4OxpoT!xWuba|o1I7Y#xU6F@HLa$H5R{-`FlQ0u7tgMvB|sX4fhhOTav#lKO2xFlK9Y@{t4O%9*Nw zHn4xD$B$Y~51%+#A5IE_M=y5X(Fy!Mcc5HYpTPoGFQm9#79jkcKP$NP{X@o*M+hl* zkr6IRd9WgGf8LYP{wZOtvp>UFgC`(2!(dw zX8-$gNInLkDMamk;jL;S36#R&9Wd|0wk)t&fWOvi!c@aBIALYAYQAOiKrudszQ_KQlb-n@~BNpx{>si2_p&L&tt4DdIi{p3vJ z)ENt$#@^M&hL zcHzOs4!|4RUupoy<%mW}YP|7e((YzLUdy_E{qO0k-_eBcL?g<+e2Og#Cs;dVdR<~herm>1=9XlF&kd6;cfb!1jo_U|9zUpuo`d!Td zyX$|#GISB9^mhzrG?0997r+B;cx%T3-faHUbg9$={H$5eQ+Qwy{bkf*SFKJ>M~#GodA7^71EJI2M{IFL&LnwZF67$fxNPyx7XujE}uaKoK--TsUW8rmjugXZ!{ zhjArU*CQTqB_uw#yZ$#j`i;;$X3nMnZzMFrD`)?P&d)WVsi8l@>IN();Bx*#B_^9jZMr3eXn_Z;+OmDEk7BpE~ zsu3d9>1;>%ZbtdLi;K#{@19UL{&j4V;|fM|TquF--sE%YVOH6I#fT%YOqPgSn$zf^ zKCfPI{ASGw0YnnD36+6H$iOQ-f4AMb4t(+2&kygvl{YWY9+aEwj>JMJ1S3a@Bpy>D zq||i%Bct-WOl-kJeMKIMZ6ugy+~MSqPuwa>SqBSaN>^KiNRcYdQL_hf)RW#ZJ$gxe|)6>d^u>_T-`URHp#}%R}&c~zYsT_!sJ)w>cb_0 zq4q{kbDz7F0psU+;vvGYuWzft@h>GrB4=Avlj`E9?^Ah7c@ifU$oa%ixyDFfB-+t0 zuxwiE{b7l$&Hm^6I3jxo@=s7|w6d&xhtpqxh(ZNWsfzZiE^5mTUONGv0 z250(g<*QqV3FbUlYoEE<-13PCl7$sK|7E3MRZa2fw=*>l;OLYw4O4)lc_Skk`Pdao z;EkxHQC8z2XzBNF8G9c~{Dj4~HSPMar2URAZ?fGNoe_!Y-02=>oD#Rdd)C#t#loxo z-IIcnU>EUq$3tIwnZw~MkLg2Kcf!BUX+(;e@S528ieQ4`PjYwt)NiDNqaM4a?P!$q z;`odCG(IdNfQS(Jucxi6TaYJwX7|C zsERr)bRSr3gSUK)Y%E#SS6WQn7V{g>v1cCQrq4S~_j0k{%Rx-5gkumr{wlJ$<#Ts% zTc!x9Lk3xzrt@fxdhTk3iMbE0^COnJ1@-VhNI9}};-xaYE2fwEr)*t6&@c87Q8TZP z&M3^V>}1&i@8!+M>6TP;9XxtSFEKz2Oqt$D2ZT@jMbly19LE&pLni@M3c2D}Z&Q zP?7=o2#M1nuV$ff>wYPdD^=X=q4~L@pZCTCIVE9h!o0vysEY^F>;6ric5uxN+{4vH z>X{n1vl%ASb>@K1_PZ31)fQw(5qT!#J}!u>?{8Y3;L)ArB}Xpov}OL zIEv2<{#y`YCPV!O5w*jHKGw9Q)|}<81R}}>CQ3aTp;wEsbYs*a5VO>pl1?6C=Zc z#9#jNKODx>F_gSKToT`CRQACy&RIa%^C5X&g!JT=c<~YEblC5BB-hOnc%ruW7>2_# z3dK%~FdKh9qflSuU}l1$AbB%F{Ax{Iu$zk>ymlbrX&^$|4dUTHq`|oJ?txqU4;nzE z<~aQwZ2tXh{u$X%y5i&iZ~=t5rbX`Ds)3euW7y~gnUi)~KO-7@NsfKnsOJW{0Ozj& z++!1-*ExJFAuM_f=%>m+R1hQ?^@kC{53e;u;%%iCWgre~RyfRwxuHbxUxSPJH2J?C z3BPQzx3my=H`8c{$^KH``|cpkjfZdDw^RSC1DH6k2~Dq+{JriY;MruN&;{SF*0zwT3 z+;Quw*v-OOLjQ*@tiH$<`j1D*aV3b)cSPy8E%q0?zkm(}dW#U*D}eH-nGUGjGUpMb z)|HntvUJ3@a<`?WvKtv0OO`th#@^FvMtdoX`NIkmfbDQe$s!hqO=qL9B_!R^5Of>u zn7SVhHI?|ZviqG2Dt?!J=OhIO?mi_}nlgVGX3@r5Kb*yp|FV)(;0M5$wuls$llnctZE;gZ8dCH=lAY-o8jOgW{yO z*}|__jp5&s{-04LrX_A-H&_y4UFW6Dz(+YQx7sg{go3njxn$<e2;t6(QTxoAf@#|o?<8^A{ttX|8jsHYp;R}8u{+$oqoQH2b_o_c6KIR6qQSpqZ;02Q@kX1CY-ja-NwkujlwSDX|Iv&LJk@eqNYNT6c6IA5$~q$Cl^%ERPPNAjx7)RNDBmw&-j6}&J z1%@z+_va6Xh>9f|F?JV0&5CZ*Ss8t@;X79PP48FPyeUCh+Vr@3fDI);7Nfpduw5z1 zfJ+7_HlG@CP6zBt;QADPUS8ZTA%}I(dRu1c13ZXYgaeI0Gi95P8c|WK>xw z2fnL2EM~&fMEUFRHxn6>;wo{0&+{f0{$e*y0(ls0i$n=QLz+ala+9QI8Lc^qO1*ZPQ zF1A0=jlbwmAvV1sAFNC2g!6=?l& z-XCs`p$f+Z5TSgLQBb0u$2{+{-yP~6#}%7FT;74_il)g;UtOvz=eJM;Tau|3^-~Ns ze@7=}P|ur|?eE(26CUNO;B=Y>y_avDMCX3{cJkzRPfO#WmTsNz>l-L4VS;J_ z5&;64V24Y*ufzX`je)KSLShBI@v z3-{KJk@pQRt%@%ZDV~{#3{t-pF%5(f_bQnksejsi#|_yBHp+y5SUB8g@pjuC3h%D> zNtI)pmZ%E>+0_*Tmx3a=1!AnVP!2VNXJx?LGT)lYmqM)*eFxA?BvkP!C|HfpoeWf6 z=<|S_$ei7pio;t8>HIGK)d$N>z|*g?djO*-dn*6r>k2MDS&Y)kJd4xWVt^v6PA&;? zer-a!GouJ`{u>FKRG1gM$EPvQ&(GgAmC@HRL}tVSvpZ?uSjivn%7Njd zjXh61AfCWhT9$)ADjj2Y8Fg#J5YpY!2t#*+NQ-oLhje!-F?2W5DM)vBhop2jh=`O5qVR9d z`M&?=+`tXYytUuG)>CWj!#Bn++&P*$LL7O&$I$x*NC~PAh9xgbLG9C51JSd_^s%|5 zBo}q;%M=lb8D2ao5MQEt6pWVjv~VeAM&FYukklp!A#l5647IXXX9!Qp zDnBlDr}D?me1(aEcBKw~+W;P1)j~*<@ENo>f2ium7p?*w1zu-OWSn11Y)Sd+p&-tt zXm+BW6ncHRp8t%?+as_^<;Vx^JUUNpbI>y}Sv$HoiwPj?SOGhWeT)eCqyCCsg!AG`yS zA+ybaMwg@%H+M@f^&(NwWtSDEN6U35h#c?Tk5PH6o;zYjva#{e@zD`We1vrU_K`wt z_}O$6H!LJrDsKFiQn>jHM#!SQldQll;o)&36GXeOVz;+tCg@tBw~%x@t`nrk0dLkN zSRzaYQ|L!qVNBFejn3#5jMXw|zAhX@rgc!6UO7u=t1X^6ilLBb_@!9VAb4r+Agh?Ax{h z7mx`77MzxuS-z_z=JiNEa!r5)O*nqK@%&~GcE z-RV{@_+Trdq%~JutEEIE=q%^g5I$It)%}BpId<;kS~}abZ2mv@ohDt}U-D~dE9U*H z5Q<+P-xk|CqQ8x;ia5Dw&?N%Ep$d!X7*B!KVEXOXvi!uvL~6J&Rz_}QnGSD26mD`G z_iWuhCJ6Zc)T6F&;NS%Rpe-JTc0fqVb=+xj>vnCspb#yQKbehUKTfrtK=<1a6?uDB zR#(~q!5mfY>dN!>-JqF=qsh~J)PdE2mtJR+k`nJIN4C|T8yOg9Mpq3~xF-b|K7nT& zYuDNsB%I<73-uw0JFjl?u9N2Fex1Ss63FzxYhA1gXQl6@R-aTpa2J zPY{l=u?|;O#_x>gw%h1(U}dya(`mz$?nEd+MT4mHd?ffIM(rI7rW$U4Tg_{Y)DwmJ zdsTifD&f%1`(`P%DELRpiILSV!`KcQcmdBivsFF#T4o#)oJd<0rO-K>q3+*XEMPA5 zQ}14sqi>iy0M_YiK92nB4Ue7SdU5j3obC<00AK9_J0uiUWBj1x(7qj04@VvB`}m`R z1xwl9%B-kG^JT|z9GCe@1MXksVxg&Qwl?ccL~FbXLwSQ`xTeel-Q9bniWTYE8a{Ht z!(WIk9v}WaK|459RL;$Lvu6}S&ARQJ*^R?sOVQ>cEXltWzW8e)J`k2xucgY&4gsBx zW(i!o&(ULQ{8YruZeNtS^y`S?x}hMVxIHxiF0^O!Zo>|_OG@YfXLEHDl;T73D!L zPutP;QyvBjbW0~FMBjEh*Z0*&x_^qO+|wtC2A0zGTdYKy7^qm{s?@41{3Kkv@HVLg z(OVS7AWnziS+8I3T^k}l8cxpHS~GgFY#g3MJtEZYD4rX9%}_$ev_fN086{jY`x(;F z>*nK%2FRLr&_~34HtwBH$JLb&AiQbVXSrt6W}_TSzx7i>ywbp2g9PImKi09QV$TAB-hw3nsZj5upcbg>CrZ`1$9^hb+G*$agO9gFCva!>O8ubry99s09n- z78M!rF_01D<>iO$vO~i$B)9tm152|Ev8i-|b`J92Kh&c`2?z|nkcylw&6z&S;wJX- zAyMshc!T&qt3e7)PO$I;R%vM|FcFQ=C5R5V6czFx6am3$5*O4`DCt`+XU?q|#|M6F zp9`mg-LTD-f2v3|+$;r3K-)yi1_iZ}gTj0EW>^X+rBdC$;p8xG3cKY~ST~zbMm0u% zqW)+91CH(-kxW2U!mJJDsbx=v{MvzS2!}>sY3CZe)+riHMb)?%zt1<+9NiMQ83{Q= zPuw{g`@0bO$;Wbq&d1|#F^R`afqe7FCj0mLF>@;MHQW@3?cU2c?MXp>$QJm7{4cDjO`Cw37}mq9TvNKeB$c;#^H50}R>56(UJ3=jW~P0Xy+jVFzL)BNPbvji+C zqPpc{qF(lL(UZ3~UN$B?U=}vS(deETr`Vy}i z#;20QJY{U-MW}- z8)hm4UG2zV{vw46eG(W1@fna5eXINqm@$Kx@&Zx!?Pq^}BdwKxSu2BtfyXk)kMP1u zPz`w&&tq1?i4YJ$R2Bw;NjS8jn)D@%5(7)}g`c;HlwX`N`iFR=t>{}=lGzIRI&Rtf z*ls8s?&(w@K;^wPwEP&W`EiqQ4_Wyzpr_sW?UrarM}a6C9&EEUgp&i{y`!(um$5sv zG*S3hBI7(hdPlmY7|(?<&$2HUp-MX*aG@EEK8)A36K+LkP_5w{#s8(I_l<5}Ik07+@J^QIQd|BKR4BkhjXa z3Ky_UdY_IJMy4S&Si1bPJ26n$ph`{s!(!;WF2{ZDgV^WmJB!g*&`Fr%#>6f{1WRtU z#v-6L?Z>Zx+$_Ei6=_Jg;@KczkB*)V{uV>7IY;(zs{QXLi&whrd1Hb+A5D0y$U`i* zBuI=l+{+HQ3@=mHr(N3q3Gk~PZtMC*aA6?$hGof2=8x^Hzka>3&6gM4ie1?DhR?c_ z_x`nvvfdG#tihkGjXTrtL^ndRw1Re}8^>?Qu2{XyNL2FkJ{0>1oK+2D`6(qCj{{v4r* zckj<+KdnNF!%Pnb=3a0c>MAkDiK1wRKp?ZU6OYt~#gA|qO~`(Rr!%d{%ejQJAD>!C z2LX0ZU!=bfbglSs@tl9#20G9C1${7wZ6JGcV(r|w0 z;84<4Jjq;OAmwOPkaaPIgTN!=eaLwQiy2ivI(ox4znjveF@PkU|LmT#fYqP{V={x| zwY+?^>fU~B5Yc$w;<5KHr==>=bata?(17c#77D_HUD-zm0Es_NXLP*dAYz!%gOBYG zzl|V@WBLuZ4e2KaPQ8dA5WMI&Z-fGgELy1WvI=rPb$)t8mo=~LRoJu&2;Hk@a%OHqO41>XJ@Ri3Xt|zuE%(bV1S*Nbb z;CWfUbPMVsm+ud*-Mzy7{*OQFO6=|P8}k77ik1RZkp*^xg=)+a3d_okDkx{$a}XqouOihBw7kL9K@d40SEkI1Hi%v-5JU|gjF$Q zHRd!u_@ZMGrlWXI2WNNCuqM(fR=h7EO56E^*%{_v=Bp`)wdv75qYoy*F(5@<_MPmK z+pGVh9JFqLY^ec}uZJ)Nm=_g3G$aiM1&xS=?Nv5Flo@fzaboL##}O_igP|lb-XUP$ zl$Mc6bN`m8@S4YoLf_DFXbFMSfK}H`&t7z)$~dl?{9yh=7ZkJhy9z#Dnc@2QF_B&I z3VuW0&A9++n012LHxuFz%iI&4oYW`45coxu$Eu}V8vK6RRT;M9nf(2Wgh3QatT3AK z7O6s;nwt|ZH_IE3s29ZX80@}aU>E_rQFSqsps&rkM1TjY!cb%YxPr3$uA)I{P7cB+ zMm?Y3Hs1PgesFKQtNlm2O>Ds5H$XQG&TF0vCc1sEh;K0b^{#VZ)Bpm+fYDW>OHbeX$ z*J8NnMt6XDmsq0CQmD`y6>4T?MtdY3KbKXXBU<+pF1<7t5689K#2a@=e@=qO54gq# z>djvg8Li#9UlmNY&195lnKt)j1h2g zP^wh)z7OfG$ydPenA^_|<|AzHYhWp-8z^h)5ek)7NU7Lbh)}<7W5nT}+r5~`_^6SX zMiZD`tT|Xgry5V>_U~=4S0Gg;blthvNIc5pD^8BItZeiL;r{-9^No)>o>;Y?m)g&N zZ^{Yfg2zd)+`2TlPT)bpc4hzr{SO2EP6W$(zd1iT2@N9`S={aK?f3OyxS6Gum6_i4 zWFlp5&_RgdhP$cz>Hwpd*WWwu4&BW2=<{(g?Z&G`nz3@NN+K|lEP~yrLzk}C){o3H zz%PSiy^jT%Ape{!tCl>@!UdEElBcK4#IWhF zkERgXg=q0<=ZdYdc^&3)oR_;H?Gn2-+F1z^SKjwI2BWXiqq?!*E^!{01 zw0ZZ&{Rd%U?Ps(VHPh?0DH6ADI9*p0ENutL3RNzW!FBU?lJ+@r8Oom4r?aKq5NL4= zW#3hkM$zer#Im+<<&miw*NB4%%tA((^=t#<<$m$SH;&#NFj#JMF|cMNa#Xg!vvWzC zG^JMrBL#_Mo)OvE=oC1#eoK3@xQPA}d}us-b!#~eC3*Eu^vUm@Xp-_d;wCwfmiXVN zaiu~h`ZkZAf*_CYa^E=Gy=>&U;3uAfeLiWF?d?Cli`{CysF>-Q-Re<|s1a4;j?Hz;y1GRO3UdD&U285RTOZqRZRSF^)y@8@9#5pNfP;jeYwYwzoTdGMA^ z$eg8Q&^RoOMGUuRb(n={zv5dBv-g$`P@ylxH|VAp#+h@1x`y~X%FT17*ZmbG$rapF zc;_gkzoMcZa7GZWhrO@xx46x5F{IIADu@+PLmt5^02X?4FoY~q#G8H1+crThAx^TD zrSnt8Uqg~d)u4^|=NkNbo2x%)UqPvW-vwL0$%ba{=|K?*Mh#>@FtcyquF_m$aY;@N zBwBV{p{F*N?_}^P4bPHX&IUmfZJ{Cesu$XGgy?)voH)(pB|ph}C~vhc z(D+4P9cGy9feB`^vf9Wsr-6j0{N*t_b*5{kvDm~+;_81^LiYI7!wpYmyKzZh^VHq_ zp0ZhOqOa-sV|Pi*!WY-fdxVz=Tv6M2imAbMe7O=|2?Y!F_}Je6F{r{?r)7pb`_3v* z+vR#FAN>?ex|Q>rp{DCnzH{%lVRks3OzB={lYv2Gx7Y2364Lzdvi(zq+7S@mK=aX5 z-Yp}jD3-ul@N!D5;HN%QhE(D?1$_Zd$t)|S-^}#%2=L=4Wn@4@Yz`e{=Ed8)LYDY0 zJ?t+zUimb^)U{m@YF>QYPnD1%IpF+NS&t_pAPJ3gmdii?pOD{O1LNODI~ zBLUU&;0pCBfS72!wqc$$sPqwj1Op+YLSTOp`ZHM@8>sC>l3C{w8Rd04JU)H#Zjq?t zqi_d{a3Sk;w8ucR)a2Bcx9@v@p4k}9EqYPFbuf+FHSA3i+RPV@%jBB5E2D-#_(Ddm zzl10JbPmQbS-+csItOQIO&D6rx>Z|p4Hg2Q#!_iYX_T5!XxT>r`6>Ac>qZD6iz&7$ zilohkM$ZWkeGVfVhder({r4Qm<3Gxi1uUDXl;Wz%&n&wzxUdoR(x1}$Y6q5xhsjuc zp2uTL*JL@7i)IN{W;ZRN1A%MI!jQp~Z+oR)AY)IPK2+F26DFXWkhQ3L`oc z)~NBrxgpC@ZOnYwo|oY9K5!bal<+Mz!tYvXsn@kp$`Z@~^&#*%n;kvl0Wz*Cwm;K_ zqFtVx#NpSblIJkE=N5n1J}%bjhOlgI3%Chs4@T=z$!hJ#M%ThF|#T+(A=rdI1A zhXkr4abrkp2MAe+cm|w>KUU4vuj4&x;4**1bKZT;IzD6(T5%$#-4vM!*k@GrWa%( zQ>v|l6+C{+ABD0@t!vW$io9af`SBm-q?lniNS>SSuo9T+v|f&vx^ksWV=C}i9BUJy zuNo8A1u`N7WxK6N^mNGbPsFw6DqrKC#L(|~ZwVc#%+a}Osydf@tY{oXtlKtCcq(yZ0k{{rEgDWaBn)XtP&bRvBkAkSX zQ;v1w_1t00y4SLYwPM^@-|!6$(wU=EjiDIDf3*O1=xm}=qs^EP>r~>(l$;(x_ScJU zPHB!Epjt3HbO}`xCv=faqa#+aOTwZm%N>aQ_f<=IAIeC&z(}^QpP{E9_@Fh}D)Dnt z*`>jyUs5rXvmfmVQTjB@J2mB{)^chRH3N#y${@C&mFdrBF;U;v=vbcn9MhSOT-Qu~ zA$Dun3~DZV>@2RS2*$6-SwWd~khL>IjVB_q`1iGOFYrqtow=|^D}US^CoQ7R0@^5H zGp)1(YOU2?yi;MWD1DCT^=BT4^1;$3p0XgLwus|6eRFLP8;moxt*q>`E*!>J>?XUT zyuZykmDN^56zO;dftpBAi0YUXofkR3l=W<}blKo@=PstDdXkry5^4|Pb*0ji6q{*Q zP(fek2meGDS|gE(0$m-}(z6L}cjKqtNDQgR2;l^?FSoV4*5N^yR%;;2jf|^0{uXE+ z(FI9)Y-3-w;4Zi0fkJ%tZ4hvf7$zz?p`1h$qPNrN!oODwN{?k`Z7wKr=yz--Pofdm zl+$x4B#XaM+zFitww)<2y-*()A+K1@yXgO?ir z17+!CO?Hu9iyyP;_Q0Vw$w?4Va06e!*H<^>W-2!QX-(TqQRcMHH}9??^gpb zI;>TjYYK-`QeBFgauQ49Am)zC!gJ;n?VqcH$_P0#S>>jHaKA551cPA|sYow?T2d1c zYVr>b77jtE;m`;GtgoQg83_;;?tNvrxc>&!@^eTpFfb_jNdUZqq`{ylF;XAPTsTPR zVxIl_v|m${`wUl9_(6>&R?g)LDh{ZJA_RAJZ6GxKOQ?)Rfz)$L6Ifod6FUY`17t(fKG=d6&6$O|`XmTKm1=M%>;B7?eeMhYugTWh6U`YQ@C zzqYn%;8EyXNwOHW{w~ryx=z&{mq7fU^})H8yg~J<1Gq&-pg-P2Y!Bkd4X=|g=oIXfzZ@ptS%4501A@dII0||HlQm8^mNs>tIlQ4(+#s>+l9T$OuLZK zV`L+pub_RuGEPCaDg2~qkBM*;4oR%len(#*`yqaVSKg)WUriCS9Ew^;Uh3Vf?*S2Q z>q6U`eew`|)VH19XGG_0&IYz5$~h-}pj~oN1?uA*Hhx->ZMg2skQk^iD~hMN6b>m7 zY^4tFg$yD!Z`_#7~qi!+mpJWU81*ZO* z$k3L0==@$0j5gXc>FbNwS-#Z6hhM$h`jdJ|hteHMjL5RKdY9=x0o*-~^?6(m{uyvT zy*d4a=OC1okOL|H`T0pF)9uT8IvRn7F88HP9EPlwdnpvC$Ex5ICBv7Fe~I%6E>$v6 z<8LNJ(Wk`WP{UZ~94ZBGK%I|Y4+W@;^#d6 zb-Uqm3}pv4O73blPT<|>79<4!0!02QX^MR;FKY~+shYqsmxG>~Pvq&s# z$?8bBg(x@Hy5>I9{!g^%(F%)5(3YU9UsoS(^sGrA?qxp6gkjGBb-X&lR4HND1_P-r z=^-oaghQG(w!!2Z8B;U+sB%_H>5tWD$}4W_&8zLmo53npNCC3&*5=AKrA}*VTS=iU zOof4SC#njcqZ&5mL#|dDnZ|_LvC6oYEkO7}yk^`N;OYyCjF9p6(=Rkkar$!{xSYRTOcu(>l5gjt*Tg$hKvI(W1}!4t2J8VBcp@@b~u5Z zVa{8SiKT!ZoUu8tUV%WC8LvsCP$AsP1sL2l=g)~lx~D5%)sIM!mX0*Ml)zc^PMRqM zVMD;ET{!DYQT}Ac`{>9MOVRtAZW4Y6UC)NO1)-KsbQW)#k3Ujlbp6b~`r##j+sj^( z^Hs8pIaFzr&me-8Zlddu?|Zeo`YJ1po|Y8_K)FrBo?E?Z#qKtGkq{R{$P@A+2ZKV4 z;M+Sr=#sWt-nWuib_L*hWlu@wF-NLGW86KE&ZG3_iAmB4pgAgWazI%Vh?V@FiNhO- ziWBom2+!S3`&mgYPpG*{vZRL`8oMm@w92+x(gTn6)QExmvFTBjFUh-YBWC6g-(r9^ zAOz>G$nn*|64e#Y`evk&Nfx>gH$eN1s3z8pyQ0Y|MqP@+wRgC0vjDy$9#2Hw zdIHJeRYZ|$ealr&OvSuYqE=zT6IR7e?m~=*8=;en62yI@V+|F;hbwkd(s3 z+Y>LTWwuxKEd0#C6M_R9!6e(in&cR*ZrzG5DR}`;-_+0&uo@B#ORcC?{YL;C@ypY- z)0Tpll}AStf7&6_Lpjo6$kYs}d&(6=)k7!*Cv1#-2)n_nktl+3aE2&N)xyt|ckPhS z(9x6L@lrfrb{e|>(Us8oqvQFL1#)F3{ue{BR?8u!mAss*0MHz?b(9LdN?`6w$4{7; zBEH5)$_Y+6l~-r!AZfOU#vv%L$xJz28YP|<$@VAuG2>75c)$1F=X>)qjE|m`Rj~_2 z{p64dys|IDC=W+HO$9IaM~*8xmB71awrN`up+Gkjv%XN=qa5L5vb_A5%U;V-rR#`& zuTjjib6>a^VvdnC9b=|nOz7Cyt&(W%{wV4jq@e>Y>icgGFuFd0_q)L2vHg9;(?vHn z9k~qP34ze?e`Vo>!?b`Tk>dxs)5{WkajV6mG@}WQjKPrAb)g2j4uUC#arK@z{Uz26 zyI{&Wt}A0wQW8YHgm9Qh)zAnSSaet>?tC@D0{YK6JM6xw9g0myg#nz4-uiYam7 z@d9D0^=EhyTA%QrN3$yx%~8|D0zb@RR|+Riu+P7{*0hfiB%Vfw1Pp$18!i zirK*+4^5*lirfS!ny+?e(ke$Qh?FB20J{j_LmMG8yuG;$s-MyZ7ks=W;u94FtnZw; zK$IV}5A-=sltuowewu$|_%!+0nOS!DkbIcymrHau!)C1V1~Fec_koGrs!jp)-%yc8 zCsy!vMsv&Ylx-?ur8<$kulW-9f%svsDBteo*rf>g6yEIW}a zv}-y_%FUNU4R`jF7PKC|$Rj%iDXi+teDi+%Gx0?btECLaAafAG?mVw+XFqsu*}v#% zs31VWLK#`PA3@XD2Uh=y{-{{y);LBTEu=Qisvvp7f|n1|1O_hJ&Q!dxh*5LgdK896 zRKIRYU|GPWq_}6qNLPPmXCdryoS$1pT$B$+}zb)KiNH4x3s@%raP5SzD5iu;#3$U_C3 zUMs4iO)LZF_~fM2WI7vg|40;mnl-Vyobt<$z}HVy(pNqxL5TiF_pM2UfubBsx!m*9 z7Zwq*{&CQECnjbF9UH&LdP{h2{x!Q>eY07=+kr2=r&sfHKU624dkf}7#x2z0Ur6oA zGE{1Tv{4-77W;8UJS2sPO`lpPAGio9$GbDW`3mZ_xtIw}qUu$BM;h*^D5!wp)2C^S zmbIlcHSyk@t>X7ST(anU*zH#QaTg=gDiCZXdCC4Y_$iypsKW!-h1LWV=1BJKEXjt& z4X*Wi@EMGz_i#*4j52$Yj?sswi?!uHg9g2!mP^4(O~2z?n%+O6)OK{%d7Z+)$x(E zN;BLS&3PKqcDOUNw#4poU|RuZ-&a*ydYN6F{LYUX8Xg@W#ohMpq)04Ql6DPnKE< z5lnhI>R-2!0Y-qy~tA4Suw4$9iGT(qv_^g7V}Y{E|!dQSQR zO(mZ#rxPben_V(ysRk8cY;t@MpDwTOiGH?M%oK&+XNarRXRR(X6=d2Dxv{Xcf2jtU z0H}Xh%y9-^ujwrC$NW1zm#fHskJq}Kag7Iz2||!_J!<73n)-f%f}&25>ppyhZyWwKDoy6yMX6? zCt~px3blT21KDQnX-&3CSS&_z)k-`jLf|$^iHdi_nZL}CPvqGWk zgZL8zf+hww1mbs`OuY4a7?U(G7w~}^--%;neW`I zVoJQjtmJ3t-w(XkAin?}P050eI_b-5YNzGZ8bgJnK6@rMV*$S)4Y9I%?hDKOX`)x> zPd?WUPcnWdT`bA5QyL?&36FMbH?F!FaXIwQfOO^h`soers}B({Y+w?fuV?_;fh6ow z+trVyE=Wn9VTR%c{EqeSpu2Jq74vH8q!!mNBanEa?q<0Xs69@a%+Xg@1*#B@Ipz2ZX47B`cQ8^(TX-F@6Zg zXS8zFr$?tL6UTIe|A61jv0$b|W=LDsE#>CPmmcFqv0hkLfHTK6x0f4Yv;41N8tvJY zp?^*K6LlX-b?E7^sSrOfUh*}CbAOmLk^05;jXVzf;G1FZf+ioiokS-}Tl%CQhzx}7 z9s$F4lFZecx*xT+E42je+6(05?VtT)GZK+Uk47X!Wt)#1B*G`=g|qHQ(<}_q-<9r= zwULdB-7ctLWP`S7(Pezze*Q?rPSfx)ao7@MEYRx7z}L?Ik<`utKmp@%huYB(;KbGu zc`^9r@JgXgb)-;EPEB9SfsLUDkzT#fgg^D4=YF&C_Xellw)t*4Hd?pe3RbMqh$L2i zt;F#heQ3A!5W6t^2A{D{!+6TfF+znmc+{4D>nr$K|B7L_(G*FK88x&Ja#E_~>=gSj z8ru(_SdUW$0A>)EizCY3eJJD6=nVxH|#P67~D>#rLcRVT?B8d(U06Cp!BVfvMn} zakf_H5Qx)h@p$JABn}J%#FVPcx*ZGEis#TB};4 ze=GQZzNp0|IU^$iK*+Q@`7x4T?i{~pX_>PtHUoe6|M}bh9Mlom4#7?vnUL^WQWCPa zw}XV*W*@htbb06F}>0>|IJ@%;ASo88dH_S1e5`S;o{PO zoCB!aBahBvEE}{&eLnOKZ0f2GJp|yW3`>Gw_-nYv1LIQIFJTf=$h#jqoy~^>Sdw8u;g?|1bUZT&XqjBhlDvyWU^lnlr_$ghBEzAuggq zJp(rhKakP(y^)iP48lJQuc|2*>-01%EQ+`WeOld4fDll0GnNHypysiHVuePqur1{& zD+_dGvJ*=Lx{_>FS>c3?W9)rexite%sk>ktD?I&`j5aXRGxwD@AWDgypABiGCYNjIK!Y}wGxl|YMHigtz z$akgLllXM8BEo62qtK-Ho%we>2#(t(PR>{cTV|U@dVCcgAQ4vDwghu`hn`nl^F7Jo zwc)MKQ1w&}iX0Fb2|^{EDE-Qofyp{CFOPjs{Q#};Du9o<(~(%U7HhUHk4)h>i#w?~ z6s`oYPy_Ok={RnSvp1%w(3@@;o-J3s=W*Mb-9S42a#QW7J9wJg4gw^eME~M|NyCDV z&M{_XV?t!PY5f~79&QXGD0&y&NaTa*S%SF+gJyA>Qzx1a6UBjpc)SQCTy&!-m;98z zV<$FrFB1WMZH=RK!qJG!o?82z`O{*Jg5WWi@JTCkq-zuCmnZ?^%k5E>OrB#`TFF#W zYttQ0(1)O{INw>I+b~-i5)Cw%v2y6q7y+e^lb8=LKyUjx$Un#ANrSp=AvkAR?3$zp zPo>>QqYn`awPT7=(*pH8JP|^ zQN;Zc3CEA)CnwG(yf8yb4JyJ&O=BmwWvg$_N_=70kORQ~1EIbJ>!3PSDksjcMX9fA zG#81T7?VLdhx!ci-iacMW|L7Oi=G-=z}1PD-Uxi0!DLL-G*YCDENm|(sCDl?to6Yr z8a<(P_OCAbjQElzd7$efc`HvAV>e$vZ&38O0KME-Nn*4Km!f{zecDFIyOJQb5=IM! zifEq87Q(~OnIPrwL6dXfl# z^N~LXBB5Zre;}xsmO~|PVSldD?gFAaHf6{;$OohL^u?%e!o)4?~vZA(3^@LGu;N1AH%-J-gDrSBum z_*7H=PKP=iACq6mK$&;N#?Vr`FBAzEtn_-pa_9ReVnbojD-Qw`;pK{3 z0Mipzg?tbB|2IJuJ{Ohbu9dPf{yC7BFsSwS{prEYY_BCSu_VDIfHTw)Kw+stk-BOf zw!tF}VzEOqyW=WmWP+b~sU&$J;k})wqELhG#*?IAJxaMVw`+wdGdmCBr&*0U7DCxZ zGt33&T&O^O;Ii*Jrw1>3`EFJ`z~BQ;ftC*hv_vPZ=tR9&&Z3*8Vr*t5kW3=(@Ik?E~RLb+Zs3bnOb!dnkD zEma7>dFY`roJ`i#_ktu5GboMd^!_Ab&&|HCAC|_919s4GZI=cNKr5h)0LcH9T2K{b zC67|uu}UuAZ5k^rn+1fk)173=D*NJBzdDy=CM#_m9m2(Fp8DlozO|y4Rx}1yUxrRt zyGK@iR+hy?DwE(lyc4e}g1^Uf$oS1opaId>2Q(e!8vDCO~zXGIF-(&ACjXmxjJb!(8m$t)$^z<#|LS~(<01l7;xf@4+Y6|{BW#^;2G$AcQZpO$iPY8Ry87$2@@*Co<} zX^{E_c(;>O`U{%{xOdu1evGDNTt1_B#Z%1*8Rc2ZHbvZ!(LzMKMt5cUh3DnGjcILQ z4RZW&K{zXwTxOz6VM-4_5wkuaBlw=%&b~eA(3BAd9(a75g1YItT;E%sMQUYB;LUXQ z0@K6keU4nu7q7D6iwA+vD9;X+~R1Xn* zH+r=UjQIfH-w`n8~tkQNTJmzUSTV3ADlz+MT1 zO2|YFxZn+_X6~6m@+hj8&DL1Nd&Sp>sP$}{j+}inSox#G#RZ5ijja*`6zo3xinv61 z%+j~b^FLom8lUY%wnNb*e3^eEugCb?2wg7JNp}62$Q}5v7GPdTg}&I5=S47^iDQ4$ zr!N=zkAI&HMqo!YHZ}^T(GCj|%dp(&=Ga($B=BkwoZBg>A6M){M6_Yz(t4lU(JMNx zrDr&`tKT!ej(a#>@3#L+zgp^!DQuZmGBsQByV_-oR<|2hQIy2RMIk#R!i#DEHis{s zP2%-!36q_jefFz|WI>{UOt^2!GZ~{L9Y@R<{OZpHG5DC%1lgYv6;-Gk%L#DTuW-HD zn9_$(+2|Oik_=U&Ywtz&69`@s<**LLH7a2cS{QVGySz?h#iiYo%0=ukc%)dW(hUWW zC>0ntEm<)8iGWcb{YRak+Hs?oROO0$QU4o@ln+5sD5`gV2-Re6f6qzI(fNuoW|WjA zu=Vt)hKTjFv|axWnDtzwXzHErV)xA?x3h`C_QZ2(avd_FJC_90AY7M?yitSqPEYk2 zR2lWOKfEuRR?}>X9*!bYn3}D=DPfkYHWhP`PZ@qV8c?3y*H7{6a^g&<&h1d%$H%8{bJGZg0PS+@B0jwf z`j!~#+J2`?6xiXVPPU2h~CXQz8`km1VFDVOG zbrItLKKwda$W7}{w|7jGuPiSL7H)7TQ{KwxuJB`V&D)t`OP9$_6{FJ~?w8|y`?RU5lf zB8X=WXBPvnOmK=0rbT|hGBPr5vxcI$o1`Ez==bNDnmLKB2hBXLj3q`NrEf>>^iM|c z5&nsqSs<+RA#=6+Mou!}nB|38?@1I=F{vBdZVxbbGlKByVX)~V30Sxm{r%weE^S4f zp$}0}rl78bz?Z)C_CX!@of2z*)D50AL&@Oy9DE_Xu*b!Mg}69ZI3mH|R!ge8q9Pv` z<_dOH%4)(C5oIzMiHYti2|dhHwTaj&n~m4LQdVS8mdot&6R!DeaAn?!)3qTc?IYu0 zMwi@jKqDzyN^ry^+?^#^>`7Y6!|v}I`(F? zWf_QQ%`!BUSM8$YONfu(w?;e~osaTLa9pprVa{mtEaCp29VoqL5WyQ76})D?4)GS~ zJ)OviZq68?2&*zdpTWPs&?5IMX+fx+C5Iqmioz);*8)*kBx4u;d4*IHp`Xgz8G(bm zF0l-ErPB+POE$&6QxuYzl&&t(u8RS5)0wD4Q8WQOD8Z5%J9J61Iz{$pPE|s0^!=kK zT^GZT-!`EUQrQdlZwgwD@?wWW?6*>kLOXP|3i+?{Fo3x-ozHCM*VT(vztBVEOgQ{H zU5Fh4^!@og{(g8Yi^W!CWi~($oSY10BS_P&htgIWwP}-eJGo)G~rOp z=P|m`TJ^_tlBN@297aXOEe(ypD>Dy)p{e7?Ice_VZ*n+GH^MaTdenlS4Zb-l#aZkTxpLdsNFtWiq>22M)1Uf&r0Dt!Q&;nHck@NmdTdJJ z7?nMYy%&F$vT@E&4G*1PRG-}OK2(%DUKvZXz)o^toP{sg4>^besZz2NYW!7VTAY4) z4SuX)n}EgIzCWD$Vvtc2C_OqFe=d*!|MpCaNq!82N&2L@LE}!L{FjL=kNIH@TTW2c z5UMZNN2R>*QESoo%ajqFH+e&7zB(aNq4f{{ey()6^RN#Y^?kt>Wjj~%(=Q=@ds#88 zd%vZhBkYC7BBmESw=Zk4g?>Hs&qLAI67AzmUi>koe~tbO>d)STMS82>QwH4F)56vV z$A>yLDSrxG$6PVV#87~uM>b*WCG`)k;r-#f6n$07j$;xphSC_38+_#G7fTiKxV;p_ z%gMc#<-Nr3PS=f5@IRO-E9}Hmy<(q+!4L!RwkR&0wou09hhI%o;y_09Pf|izcLZ15zo{+!4|7EvmsVNr`pEhdzGskAcg%`@q*IAnU zT>6F)n@Kk4g8rX z0+EH*gnShwu2P5ljaBy|lS9vsMD)oNF)8|g{jgWvF*=jyWw;&A%Cnt(%DU3ov&ha8 z9=$M$C%5EMpG-y1`5l5{TG9QsH=a)!@Qz;fiODs(%lfD>P)_r*aVKhE`8ylwr5RSh3Xl2*dyW9A*`DUrC&FQ>hb4_q1@G51N57WDEPBRoxD9 znh&9f-W{Zvuaf7gmyiAYr_Z!mHU7r5SW7`%X|JRrC*^b~O1LI!B+v7n6#_TJ^Lx?w^Bw;K{}*OTHd_C&F;<(=3Jl+0j|fP>YgV zNBV=o6%a)3){jyS9(~Wo-QxP&;osAi2y8(lL*pYoQ=kSeCDOhuO_!%;5kmLI=$3Nu z`vwHVNLIU3J<^(`u=>;<`gB1k(#g81WkyC7V&L(Z$ zTDdIKOXiFLpJY)C1>NEQ(f-*5q4nZmc;E1!cX*5wY=c5w#Yy9qJkMi;vP7Y7sw3?T zH$93rX%NY1xCtROG!p$!`&2s|SEI2qkg(|36elY;Hs4n#eqVi)Dt*ddF-4aIPAm#f zq)9ARFPXW{b0#s5?L)7j{7bkZ{oodyc$73b9PMj}1L`gg5Kk4qs|M z>H=9;b%e&dWPKddnKx{vbEU`bR}u=*pEkO3<1oQ|>GrCk%A2gj&Lppi63kCFwkOux z0pW>QG|NAmUeRO!{_BcLzpRZpy1CULEAo7K-m=GVA5q?29{22dtaI-_BG3Y}tf!?Q zMk^*SPE6;J<)iVN&?D;Rlv~o0&0!Ehn_&vVdxI;8qE|X4ZH>*@SQ=80OZEFiwBbd$ z9CA?~oTurKzbLjNM7zz1EqoI>KeRn^N89{<1(*NRHvIoF_11A!ZBe^0u@N>6o0RTO zrMtTo=`N+a1*E%?*rb3(Dj+Bw(y4TJHxh#I&3*2D-}{}v_#M|?Ypylt9AnJ!JmVQM z_i#tu!QGm;K`JN8lTqk{JSdXm^*J!0)9eekGU+rlRGDILKcTJ6LW+kC76y>8cxSJt zP3VpdP&MW8`fG!55QV1!i$r1SLl)FuL-OuKj#46k$o1|j5tAP+6?O4tx? zaDVqz_+u|+y7Y~(ppKt5D|%$y*HqEyQFbvYCHS1`KU_= zd&&2&MM;?dWTQGZd0%ZU8nk%Sv#u$vMQENC^o=E*ez9^~?Od)I&2q%hJ*kJ?IZoF!qURGi@!mVQ`ucnTycE zy`;zRbN(<0+)5s(d>82Mx5xt%HkT#1BEC}8kMt*w#ib;gC8rTeoMB<5ye&*th&LnU zr75^cX`CcEVEeeZ-v2@k#IK+`$-9HM83kOQ{OJehz6!5y_ZT5Uxx2d{x`iKJhi_uF zH0wyPNhC%nVqrJFT579KU*lkgnmJhndLo;M-ZXe=N_J9K<9GykRi{wkj3zu~+e$Ml zXI=)yH=;9JNTOuMriVP-F7J%hqTZigNDbMOT`gEZl;J}GURg1c&o)IY!H!(W{P(3s z_#?7#YpEinRM`J=*1q~24*m~;Y-`^e4AzIG390Z65&!+lZ}O*u+awavy0r(PcwDfe zznbZ;c?qES&H@P2+J;UhlVK_c(POzyBpK z;?2E~Z5j=4HgE~ptnjQ-Bdu?JPxtfrzUICkYHWJugCP`iADjg);s@4BleBLHhY7Wh zEENUHl;L*(axwVf!__+T7Y$PlOF&Fea6!7gX9}${ui>W}PfG+4Lw#mYrp!dd3a>09 z#QcP@-)Bxz@2|O`s0U-#YTt2x*E5nqYQ+B-{~S3U3}_WgL~z<+skixFSo7*#Kdgs7!k303@B?*f_XE&)K z6nQ;(NEyDdwG~%(={#58!SF<6RBJH#O-rIgLF@6$TD5bDs|5yq=7F_zk99qxkMAzv zAA*~K$D-BLq!MG29Ll7Iv6(moI_*9$F7Jz%StVoB+=%wGoleEL3Fw+GG2QfDXGyH4 zg|NfKf4`lGqWgy3p?4*PHpdqPA0mI;|BU|Ek<=RvOgEl<6)koNLST@D0N6OO{N%Jvcmpn zj8QlgQEi$Jk<6*Px7xCC+-5b8Qo5Z+L^iMFC#-$2`&LLgY^@?7 zn41;aWN}HmU*E4c^%iizxK(xJWc&O$y^=i^R0*s(zq|Z6Z`kj~|KoZT-V@toAA0+O zB5dI7t}pNl5d3yp{Qmro!Ft>2z2Mi`f>#)f-OLv9%LLi{wwRzQk(S+(;|lg3WfU zbTa(slQ{-=16G!EiQ=-1ZV7VgTlevuYuyV^+W&n{4COzL5Hv0u!}Ztt^7ShpXeuS2 zA5T~?8d`)@pEGj#OlD;$^+{t$=RdNi4)_QpS*JI)J9c5`nc=j`u0Zig@*LhJ{I^w9 zsZiK`S0lb}@c?hs#J=T$Na`Y6kDM*EQs5NMiiTXz(Ixx`{N-uv#r>WC7z>2C;;cbz zFl{Ry)YPDfDy9PRb+RHiHL{@ zdu(7#0puqb{c`n)&G((sGW7}039&zBQ1)9S{~v@rOl!%DAuG2$t-UqHU7&R!D+I{W zonbJ_E5pZBWEG-39U_ymvhdXgz}oU(O4yHQ-G@J&dPQYKQsI>M_bzz)csepVVINLb zJ(b!paOFs^S*lzzDMVC$hIc|rzLKH*d8mv}b7iw8$^XI4{aC$-8IsV#!rv^15-BUr zsJqkbcS?VGyqpZW`p~t}nmbWwMb7QK-n6_6)^OtO5g<1V4VO517%|tN;lGoGJ6{OO zM%2BU!~}YJq$m;M^q`}0Nfb1eU{mFo?Zu7*({w~nY&nggV5=w!+*6l|?!Kv>P#cqo zki~1jNKdzPj3a-;u=qQx7f$4xjX0Y6I6{&4%Xg5AV<_aW@lQ^*R9Td8%{kHpae6Oc z3p*nrvEm#sW}`j>GjTz+$E z-=EW+Z2SvtX}K&!VPoCU?EJYFAs=&5l%ic+UFN3a;_`{fQugalOR7VuAL4IRF=~WY zd*4784B%s0Wh`JD<}=DCXzdE57Qon4f3s^6riUIkpe7rPy^i`>03&40P?CL5M1S_Y zwc6IQb1mW_z>pI-e-g2J@tQ~Uv^{80qQ6F%M7t_Ft*QhJ)l4vOi+fSr?rv1y#VP5c zXJZKyfhE|7DM-b7Y|5pqI$PNe!;YP6@@RNed1JyLc6^Ha!e#Oc25SqguHV>a{x*5F z&ImjEbN%*S7}-qkmo3#@3Gg1usg~56SNsr0$qfPRU!`Ai)@qV$CECPu9lV`>;@OYG@#TxSbn+*57?!f5#LiJY zYu!c#NYw8I2!;J1!XAWvUS9-~mcIOSx~#!vGVVu_#vns*9ctJUYtqWx z19e`c0)l2YpSR@9KLIVSqmeWWryySjpZo7HJc$c!L*?EXPhk1d?BKnfkkCyUq%PM- zqV=|qjaZ5>-DNGQ*fX0ww>3G9>M-W_G#mu29be{I=(zcM- zVi-<0#El;*+_o#(pCk=`gdsnVfi^d>0uoTo&epp8Pr{_dbpI)DYd=tLofEcN z`w&b29)Sp3ZIVJ^0cGjU%>2tBQCg8ql$;H9D3n%YuGtP<#dbx;KEUyEdiT%$6ayPF z#I3mzM@2qIcdVkRiHlHvX$ibq`O zWPk}Po0ezp@@R!hJyVwsgsgEthCn0TlvBoLn`1A3c91M*htBpubCjCEI@|a}H6TG3 z2Hv_5!R|Mx3nE}v&!J5t2On7#h0&$$VJ)y(_@BbX@iGlypjDrwD7(v|M7Cx%F+U^M z-#3muhqXg0QrpM%9_e_9)S6^80+|WuKG|2p9w=Sbtx(@#lkG5!ORy067IN4Rc&3wn`VCLYvCc!V(D$)Yuy-IJQA4r%%b!;Z~iCAeUFUohskUzturS z{u&P}yNc)(;}^+-sLIHMeF%}IkJS8Ip!t_PGHl1_d#~S>x5z{%^k zxYB-9y0N9-z`N!$^N&V2=AESXLw>8#ZoQGopcKc(KCs4T z(m?&~$YVU^2YE)PnSl}siN-!nAytSYDB~@@;()Py$^Y5a!zBa>`#`o*y&jbn;PuET zda~mAx^t&W(SP&S%)qF)!Pdew@T!KNvX3r5mv8%Xb|@Q$b|N7m(+je*p+I z5hyDwU%+T!Q!8Mr0V83a^xWdembQkmva#VUj@booFzr%}&$M{l8qpO!b}zXIQ0|~Z zi@8Yad$DW!Q9ax3K31Q)#Y0T10PT{RKS-*GWvn(%<3~oxo7Svisxov1Oky@88?tB# z=D9%b8LL6Ylr(*ARna=Zn6w5iF3$?_Pv2qMnZi1lM1~Ujt?Uv^6F*9Z1T1xQucD>7 ze5u874whVN?6hf$)NTj3^rC!AmE@VfvwP~4hU%DAXVre8Qg5Hbknbgz?_cg6lml_y zlww$~u^!4N7|Vp4^(tMP&}Ejg4nRA~^{VdolL{cO7wv029i)mJd*cKtwhQ{KUa9hx z1SKDBX(#>N&gZIAN69c(EMXKl%w^q06&5ktGVp(fqa@guCLKj`$L`r-yduJcxN|A5gy9itzwN0pZ`sb9QT|7O4{!tW9*x+B_&B)B-VtpOCl|V#DQHayRmFLTTIAB4{AP zgchkKvmdRy1k{U)YQ(+P*I(i@Nql$klXm*fjzDxa>uPlB>DuYb1naH=-YbL>+rL>- z8mJ`af0Mvyj5p$eE%H0nk75L`;I8Wx&8bgb-OJoq%BF>Av>^z}+MwtAcqnS?DDE+{yc z069AY^IJD(r+pl!282Hz`#Rf#AjDuc!g$@yu+(6^;yl|?Ze`$kIP1+}XtBZEa7)-p z%3NLhG=EqW6BwDLzlS3`b3464PkL8*PGtM8=OY;p!MV!t-sb<|0?;ZuY$hhZHB?{K z%#lVzM1Wy6q9~lY6)pq*?TV25>v>w$Gc4@SF3K4*bG*#VMbzM$-%m)LVq>8-%6xoo zM-$nIyl_@1 z&X*m!^A*lekYB^fmZz5O0^e_fm$Hf28()|l%)_|*<_)76^r$5Wg2zuODSg z4}+0^6ya$7;tquiV;#)mb(^u{E&4SIxD+mk!g!gGFX7o~f>*W#5Q9>K?x(Lj@B{H4 zi!;^m#iSv(JQcwf%!NKv1JA3Exkh2u76G$*XOsO#+D_kphxzFYt*U6ffWqhkI*gYF zjD5>`RKgeoTtmX2%1)tp#}v*wdu#8%6P0EP{M(dtXiu!b5P$MGBRHG0l_3#MVAWiy zi*lEd(Eccb1O&6eDVDmF zPCXTSX@xFc9>$K)xw!e%*e2;KheDwFmzR%ZCaR-}Wmo8)g#Ax={5ZRPGC|f!BI^y$ zRr$(BCg;rDJgrb0#_-+Z%KAq+t5>+k|bbQ)MS`n{tiWsaLKg-s}K0>gM$loB*kan}!tPM3W z3fuiG5zw@}c@yH8ov@jA4+5o?Fm&n<9z_AcH@X(~Ea9xXzZTD$PB3z$gTdMCBc4R- zTPRW=&xG~uDG}!aQ8?Vn*vpkPhWWm#F*i4!!M=)qY#PmU{t<>g+pfPbc|Nuj50z-$ z1?)KWYQy07bH66Bca9VxW6|W$3@lPTx0esw*A7z#3;a&JU-jw2=;Wd>KKmRk_~(0n z+y#cyR4ttK<+N&KxJ7z)C?>+du9nuQ%+cffGm*x(#rJ3tjhwngwSB{KfV$iHAgBF0 z$KP2;5h7LM`_TNxYE^}Xj>$mx7e=m(8jYVb>5al)XJLy0N-Rbn~=(y-ubkg9!{j(-?A;=i@ zEWj*Z4qf9iYb(-mv)^4wQU$I2C-xo#9EHcfDK>r33NElQRWFkhR)Y{`8Q;8c_v;!*PP;e6hf=F&ou(k{?OQDRIdc7tvDECecu&%aG07oP$$}Bvd=iEFx zS{yzOIef9{V~)^TFBq}AnyRLZy`I(%& zJR}O2Dh|*BW@cvrI8qJrQN-0}5^N?j;Z_5)Ypr#fV1B0TQx1hV!l+nuPrIY-SN7NA z@OgI^tSKyqdD0)ZDy2msxv!8wt$L`*llv!EW_4K=$eY<+Nng{?hs*#ZqHxCa& zmRRC4>C`6Hy&5Z$7Q~B`!uGHWUy< zQf1QohDj|;`u(ri^oTej)(sUt&5U|YBk@ej;6{WkTSx>6xnQ%2L!4@le#K%vl+C)F7WBN- zlK4YpVrn`lA6JX6uvPTI5#odc(y7MO1^Vc(hiSs zb(VcL91{_tZH)clmz-3wAX|H0^CO<&4a(x6qFNKvTf(pSEBo{V%fDp$Yi4Ifc9y4b ze<|K()fe;0>s!0n$uf&Zd3OWJx+I^&xsKss1gF!snEI?hJB>3Q_Sv7&ujmhmuuG{= zuJxIvA>5@K){|3M25mwz7460B)pe!J;g?e?gT%`}%;t?*KxFXDZMbI^`F@(vRwcqj zW0-*AJ~AbxwqAy=azbTLA%=$68qOmck-?*6x3|Y=fl5&k;7mNCRM`7uR2@sY9O+*&823+e!Ww98cAYP(F#s=H5-3Sv zD(A%OolTniSJIcLkvjhicL;u{gQc-{TfQ0_5Uw!i2G&S~8tAi|`xf zX-6x=+msY|qCVZy*#4isff1SNET6`I%y=ZskAtKSoDcX8mtJDv;q`vdc^4sEe3Inu zpmfypu7mCipdK@VLr*s3iLaFg1TaT?W-kj=dU;rWX&dOq5lY~%RKn<)1fI~ia3_^8 zV;-70**k`>AlXO!MV2rUdFN|P747l#Z@aQP;p4|~sSHY;^YcGs9irpD>R543i;wR> zzRog(Q(U*rhb9I`dg&&{)Bc;8KtU?L*d}2&Zq!Pzc;g9>4+04|L=uV0m8Aj zS@Z&*@q5?#2@2s19-8`9Cb8)EBIF&Gk`71fq0+8_*Zwn}R4^<*=~7`R6iTob(J2bR zAIz^RqtI!w+R*+jx~J@5YbVCNrTFH9^6X7(X{kIM4Gj&^3^j#LuEu3u^r_?g(A=rP z!gZN&v1)B5P{@kQyghW|6O7M$O|6Xz!sm%l-X=C?3w7zZ^tClBpqcqaxb{Q|WcXZ~ zHc3(e9|nNMwI}GI(bE=)lsTEIOAORRtKHx~*paDx>jW;Z1PE3eFa3gku9Hc<466V2 zXS-F(o$g3Bv8uA6_OaQ?z1Xq!PNm%V7Y#K8dC#V6pq^v(aNo3xWGFDFRyfs?%BWV( zk_sGp@@bAt#lT}6?5k#UaR{~3g+Jo7&SB=v)tOG#F9+S@008l^qhJNWntVKf5V=Mk z&sQiS&Y!{@PU$`P;Cen1%84g@*I6CeSDoTsI}Gxfo5v!ekw4f)r$ zI(lsMdm2BZW}(egw(M^<)Nt<+Tk52hF^h_j5DCHK1x|79Go#rmBFYUMav>YIgVH^x zfJps;L_p!(HGqLYqI=?AuU9iRa5vZNUw}+&$Y@4jjpIDG<+r-o-*|-aFg@7zJ!dA^ z{A&4z)Nk1_KA6He{k>zaQ(Pw-GVvKNEVX324f>R2bY|-rJ#55uIXV9?m2N9^j%iia zYHK1=jlQmKM=E|yq~t5Ug4ft+gVU03hi3`)erb8BK86Zg3#XS<{p>s6WYu}T&2X?{ zGwPan)PN7`PP2d8Yv+UVij)NqC3XDNa?ypVX^Bc>Qf}CO-q2hGcWy%H9!+r?>%DYQ zwk;qbq&0WF{yrg2xL%X=Wi)@@M<1UXa6WCVUJaRAM+i3^j?72Y=wh-Fs+Eg_jfXhn z_9M~`X9s69Lz>cuYx2zSJrl3zap{2E7+R3#uL7ebM?rr&|jTdbEHYK0ci&}IV`-Hvp z=HcLC_B%9iwveU*an(l#;nqax?}$+S9%!OQlt*a|ZFO&={(fHoBmai%XFCUhq>xal z505|H`P+W>c3?{O5EzNm(x;VVZbi_jh^2*8mp0+)x#DF(z@s8g=zDpv2Ed^BpaM6* z*Pq0Vgjqco6L8A@31aK)}|lfHVARUnMUX+8s7;m?9%^xdf}9Y5-e+9Zn>uk`8X+;4wGj zP>FDenK`e>#0=q2v6WmR|2y4=LZ8wjTe~9)yum@uV)3W9!&HMI!{v}hUU+D&@ag4c z)Z4eD;^N{fdwZDn_V&WU!tEm?nndOA((wT2y$YOTA__4PBP|tXV`Gy6>^H=aors@S z60tBSB@uN3v=Wm!N@I)?j4(HkU(i4ekX1kxFK8P5uBHaRsi}!fBH(FOrAd^&gwe~F ztWJ(N|3MHFJ1Q|TG3_fI;ngq}fPo%}d_-1ijrjkMTDBmar7(!_TT(0WJLcq9-33iA zJ@Ln8_r@x1g%CQCJ7dMDtQG6KyKJ4JAUdJ1uy%DFwWRV?$G!T<20q|Z0aK@nDZokx zm=XdxxdCJp_v;hOifb>lIJNkCLB@uwM-W{rJzlF7jOOzZG1&}d_qC%V?(WzN_{`j# z#|TtPMSbNFVuIH@zyyctA}ZMFq@-v_dCcU$xh%R#u7XPV{KvJvE^`?WCyVgR^A}bR zG`FYSFs+P8FXht4rY5NS+RhFu0z=!`2#4~94Io~TB^)s^ge?4s+83rC-KG9!|MQi- ztvJJYdl|f72BUV3yf|q@5EkLnj?kAuXhe<1sz))o%hFMm39n{~mgkZmDa9kE-+gMv zZWuphty`E)5XeO##EZZ9zAawvd!0*;M`0v_j81{B-s=42Bn8w%>1<@D2p8)`d1Va7 z*cwFp^CL627r;O!EYuK#HQmbAfrW(yUCig8y$eq&VR&Bf-E@(eU2URRr4%wE>V*r! zQr|Nue0dT}AX>)Dhr8>RnEv<4HVJ1TQXt@hCHY6#F&AMUj-^={9!Ee10C0c0_qp2Y zXZ#c1Kc^q<8Zv%VbA^4-)5$&`q7s~xD1Z<<-A&{^60@PY$utq{FCsvud_wv*llv}`e`{3&`!;eL8aUfA_ z+XIjiLYw~hGf-Ky-b)kGJ=^zHc|N$Pwg|2lf1LfxpfO|@n>161&Zm6L! z!Y4*oa7r;8lV+3z>Q9I0(s3}t$AGG4MgU0GGV}_uLwq_>9y5+5hd1{78i;fMu7RhP zx->o@DwL4|WaQ@4MXqvK$@2)75tR2Op@A;bdl=Y0;DxFgHI@BRF!&_P>?0#%8@BT* zh5k1&%75@m-epbvhg2ZTG#DBt^fw;5fMmpDXlZdzxWJ z00`8ysVIs8#&uG!sF7j3T)=LXZw|Ncg<(QUNxKaqo?W(NjrW*8l3d0f3X&as$NFt? zCcXswiZ#TJ{N1JwFY+%KcvQgF0t2iuN!r$uqReev^h-CR#h>@>&Gz+@gyH`NcoS>M zR`HW;hxn2^o551cek*k~0&!t|mLc`qsw%clN&?ky-E<{!cCPT`Q#X1%;o&G(va|$Z zQQC9Q5HefT0#G1q))i@R+wcJ2-vXpJp3;JW;$WobS%Fd;50n6jlMS`@Jq7g`C@(Uz zwgmXc$tP~yIF$NZQ~y{MJTgS2ZS>Z;aUsKsi|PvIAPmns9VEG3#QMl z2`M`NUtLR$p?doSMsp*X-z7o&XzzsL&visqPcbl8FC9u2s6kpQlQ6rD@_Jjo$RGBo z8v>ry$OoQ#7Xe0KL5LE+jCRyYg@MPX;=2F^S3gD^yt~qS%by@~5g6Pf^LpTqwbo}< z*cs;_!FbWZFSm+Dg87j-7;6F~#=eP-RlXy}Er=ch)PhPx;*yxVH5=H=?}XP53}dx8 zV`3#$TqnWcQvfC@ptth>64zuNYlp0@ub;L({KE^pJP7;oLo5o9CJ87=cT7)znRC_eo@M54(xsm7A?LlFx-+H1DuVp6$p+5%n*napNb^;@i zoXPRRYNb7Fn*4Nd8X$rROmi{f9y@8Gl9zK#KmE!pe{1)~+Vc z?URGAqn&;%OP!sdhI8+8BY?KYLC;xCAJ=(Q8#`3rMEyy(88YCJpDBYkz+{QkutIso zTw~ew$Z~0;KV3&#I}{L(vGC&3)6@MP>Zi@RfWY^7TgU@u*Ni7pqZ@g4(ED7a-UdEo z=AuVn+yCapazX`_gkhi!{o2{)V5etVTG|^R2~U7vfyCA@>hIjDq%#*QB~ueCdav-h z@e}&(nBm}LY1o2FGfu>kMicWLfYhn29L#>DU$y~QeWx+M=a%|Vo)8`&;a*?-(y9%4 zc%ACGwrAuX-NwKYCUyUay0B!i_Uk723fWQMEBtcXGRqF_!3T(J2WUo-2q?UiW@cu6 zKz1JVe6h5*N5{MoznrmlnArG>85$NE{!0ipQ~tfD2`Cm>*e#-skVedVn zTtR2{G#m4fe}CA~R6W>h4uUOK)%Ul0-`RtW697K*C;RRfU~?4FO4Hi_QCCFM0???Y z#&(cIy-<=0(NYIgn~uNN+WfQo)g#p36;;jL4i28l8%6<)Os5tGSZ($6(r7cRr{0$b zvoW!;;JlbcTy6Xfm&>@JxvDkRsksItn~%oe#;Ef9dOX-zHL~Ej6>by$ed)Bf?qN{>idZp;lC2v$DOQZH^}Ki8GxRwYlJWdsgZ3*B2w3cbi8c6(eSV!S z&43>h7uWg4cJKtuBnT>+A0AwUqR;LxxbuuRj_ip zI$HcpdD}_c9=sk#GR*ZD4=)LPyZ~?l*3}9P5(A&_5lWp$^yO4>iw`9g6-Uq6RABpz zaj2lBdg6bEQvhMWyucid(L%V*nqveUr(#TFKUM_W_Qq+2b_9ox96l~pbBO>KV*#wS zTb3m&x(D(&UE0HgUlT4IwzK0fHcd1&`_&!~pz!>3#5N9fBXtzGk)nL&~_$b8RJ%&>M;U_Dv`#C}`}X9!o8O#q-|p)uCC%(hmi8 zytzNXca?sE_?g|O8ExhwO%$MZN8eleNgP%-NzsOS7aUgnZ&HK=uqJu`Up_25v>d@i zvDzNV&lYebxxYKtYW(pdKCbo|-PCg1o_A;7Hx$jJ_78NqkGUxZf%yjjuP_4OO@bPr zgn=GJYruNIw!=`-$4V5iZ0zi;z!J5RlV)LguNr;xOB2!KUTA`l^@I%JYdFEQK91-7 zHVEO&ZU@4iJ#p|_>)tpGBsn=bKwJ7x9yFuw>d&7_uZy;OT*fk_tE74hVezM6e)lv0 zY}!KLfvVpA7sF|}m1=vmkaW^Q1+Hy7Q)T+Y3TzlFJ!vhiQPtwR*BCKLXyr?`!9#xC zh&}ngxqje-6lvMmpraC3l!^&tbf93e^|p%DI^^Ns)%wwoM;HivSaI82m6`_lOXE*w$=b)P4~_BO7`Ev9Kex!=@Bwboehbvfw3 z)T=V*M)w0)RodOX_9TOmk&%{ zc<|dquoz3mW39jDgo;2-8r_h;+K)c+*J7QH$RY&V;S_*F^%MB7V|Gu?H6G;sHe|D) zIrx<4GI-4o`M^llkK)fGG$4wKilh%dKY2O92vnrr>3)W#hd$pAy%~LJqwT~D-o_3w zM$VZgJ!T7k2+#(uby*Zeu%r&>zg2q`PAj7P4;LVGH>Z7{Bdo`h)AdfA9`1~nGQM&Dda*_d0X{mz&y{?L~L?jREE1F)*F z*P@8O1i~^hh;-&RK*2Ejp>{Jcjze$}7&wARzk0=f1lp0Z&j;<#Q8#$OQ(=2^9H9u&8muHNc4OT3TvVmD}b4 zNk0MyGyi8}0k?B`Z3 z*a^OKa$zOHft&)9`ck}Mfge`mfKpagrmUsa3qpnNJu1-;r4o~(#h+@4jy_h9&7a|g zriO=JX7cRRI@pN|gExGo2)5R+@ac1~h{y=8LGu}e6-Ts11H!Q|rUN#e%e$NNMzB>P zt|FFv-99vO+W!eCa`i1TR#F`JZ+^fIgT3ZQ%nvLKT&EdBu=!>6;J~T2cLYeHt?cX= zy!=7q3=wTW4p932(fI#t695QwV>0I;(ARjRNYB>$zm5kBO)!l-!JceB>+Y=(;GLiQ zG+Dy%7l_Da-q%*F`G7q+CJKzOQK3vjAv8M{=}`G@BVDTmpjSn~-gkF*ZWlW`s{+Nt z4^B=_?DYqqxk95U+yeI}*gL<`eq2?J|A-e%_IukzRc7SI5$1pcox z607H^`+4Qe&Fg4OaqFnho+eJjVDWB&%trT}XFCZ{8X!bShyuOhpGj2lI23{y?m#r| zKg-29@b~XuebFlCz|bM5m8$VvNd)R}r<%uFHxx9V z!>T0&jp#%?w@hB3D)9er^u?sR$_JvaF?_HLo?ps#vp~zNJ z`3R+3pi$dspl>qi{(qvb55SaErZD5>08_$*a8}}oXj>OWNfRaH4o6(Fr*zT7zMfXQ zf~P0#*s6BhOLR@|JoSY(3c8pvt*9^)r1G}8w)t#cZo`4_uRZwUu66NFHWE+OT3Iu2f1>QTHDLY!gDKjKuAhpL5i$dwf!uA@YqF^yXmN3>CmrS1WD-S8M&C|IR^f%0S@AF>bg@#~ zt@U(QtrePg^IfC!XxnSQPSy(?7N(_A(BkY0A>QO8Yx1V&9aFr>>4ZghVemJEj5b6o z2b(5N*N2#zrUNpsH2E$b3W;|2oT5oyi+Vxb6_%$8c1ZS+&4tkYb`C6zdl|zk9+unv zmgd_h-fD$h6fS0g~o&U9^aS#yr18IUh zu`A!Sj7iaBT>1#c#Hn@R1(uvnKZ?EfYSa51Iw*r=BSlya*`D2WUOj@Jk&9O3}xe0 z1XVWpp8dg5S=s1uQun(hJBteqlX%k&|HbG!Pa3|3?BYPW#X)GfD@@`|+|v`_0!;v7I`ksHo9p8~V9b*>ez{Q})y=ynH+3^>pxiLD5o_>CNHH%)cr%x!AMg)#FV5|6O z(k+HQrx{EADvd=%BJ5N!vJbK-kAhp5jno>k9wZG6^SI*1k0 zzSxBZkngDU@D9|5hiltzvw`mXivs#Khy7NARD3lKUsiM#>iNswSjtR-VA;VXDT2&| zWjyotr5Azi%ZuYd;Tr`4AZCj#f1jLak5bPdT@24>(K{V@yPf*}n?hUFaO8|Ib!Nnq zS~hya7c8Pf473g7hqLpf<*u@k~R6$d@I z8z1g(2O)h!3hf6h$UIsrK-0eivF^Dwd0SnNyD|as1F}0pyJ3(Hy|skjKa(a|7zvvJC3;vFp)-UGSQCp zqDhDf5*(YV_Yp2-`V>p<{GOw^LFI+vm@EAmZ^*os0S#^Qy3aw@H|^kXxKJtd+Zya)2pDt1kjD z0c3LnVy@1x)ZA88nZI~ojn|eHUh@tBvd3K}cHOCO`@G&v)}OvUZhU`8!I7rzar$7vlCS%h z=)BK#g`xV_jbhS_GLoVd{+ZSZp!0zl;aNfRA8Ou9l9fL@OU3R0&X~Rt!GS&QvAEn>TN|j}{r#4-OA|rU!n_E@&?5>Mkb_j1~NQ7PO6xQ5{@Rqdl{ z(UPXvB?{(7?3iu}g+Jajt#^&JRldl)R5|XCxRq42JL4wW>|I??ma6*WcOCVYfb4p& zun}&S5Pft&k6GQn{%*Ke!Qj0b#RH~Qmv(C_gyA+iv+|%gP%~evW2uXjZ}T#Vcy894 zm0D0C$M3vYx>4l(wb=9Fsn*5Ylac*nq@H#V`$m$EkB<{P}n~mazCG7MoMqd1e&GtiWV%Wp|IN>KOjcRMZ1|ZxONgC(@19LM!NonH);}68bqhUG^>S8$$VvMbUr9N;07@UHeRXup@lV9Kd7N^U){9PO%e3g9oOa|^W z=T2fOdvQHY)e6Tq4u2o`Z|{%6&6H~MzsvcZxq1$Getr*|LLBxD>$&!;v5ImYAT77M zYrUQ$J&bW6ni=(y1|C&dE#`7aQ;yG)Q(~twimQQ7v}1NDc_?~&wfh<4WSp+V)MEBF z!`e-pom}K5l5FXRI8l09YV+wG>lo`qN+&3AH?^kfUKwsCt3*MVf^(Yzy+*|=X$x1ze{Y4+UpOV`cM-pX)o z95^&?QuNuC&E^BH^%lf6;b;>XJy79HHQ#Pt)Mf6AI~GZEvovR=D>$8-n3xR6$6=qd zO0Z^WM)t&(jq)ZZLy@jG<=Lt4kJ%b`;A6j+D-%@gG{X!8)jQ<@Oj}(<*8j3;t<7?7 zMuYmQNv47F($X%zONwX84cF zrTVFCQgpeQ2ojP!_X4jf_FtA?B92qdT0OCF&<-yNrvcK77cT&_P;^zM*e$tsr$HXq zLmg-+`1|-fsjoZ+fMD|7)zgIq_!$4pj|8kkZZ&@v%VF_B{pB${Pmg#v5jLzUQS_%+ ztXCh#LV7Yd^U}>3&z^0hzBP~d%tr2Tm>%_m{>$V1z}IGyR`0B81Ls}j^J55ABJrf| z+zjCb_bH$}w0er{Yqbj@^Zhp2Yq30BQmWt`@@5J&G$vZhy(6Rh0zc}rxQG?6Nu834 z;!RzN?g1`)7BN7Jd7JtD{n;M|2Cr=Q_cUIba97<$an_Kkuak5o&mjdN_x^}v0}$mS zhQ#T583%kw>rrtoplr>8I%KpL{CerP_U;J=_DT0lN9BMbL7<4-fvg&b>xYq8@lQZk zkVY|DlQ{;jW*)tP^G5-pZE`_tOr8-6Uh)MWTiJ&vI)1+WKVrlQ*zVVzrmOO=we;@4 zy*wafDegp1NihqRImat5{Y?`5T`;<<{yTHV3TV=onQ8qpylpK_*Xz~hi!4@(U_Mg} z<4^pYSPl7Y8A*+Uy9QS#o)JRsYl#ngCq>RCEd*i>hwX3?&z03xWWYBA@^$D6yArh* z+u1!TRMgb1kx+-k_6|?-lAkIc!(m6?%PKAPgplgwFWPH492Pq%@{MmPV$=6wR&3vF z9>xc2YU?|8kXLP|*U1)~qey?`-_aiiWX8_mwk$U5TV_It)JFLG_wVspH)M(_i3k^d z_Sbsv%3)n0YF0UG6V;0f{^Ra#j*`|Ks*@<EWAhV}dTbs}cKKX%9<0KlV@~wfC-RJ~G*!LlYgYSjs=qQod*Hj1|masqXetDXgO#KWFz;ZgKL9!DWP zk6wOFkERt&89T)l)ZHqY!I%OsV7cr){o|oHEw~}VclS-Lzeb7v|0C-y2is-{`G< z$DPtxhh4F5^UlOHO;^#J>|dMuP2ho+`qKwV^Mm%0jrq83)0XSm`-*)Wt!Gv)3%ez4 zgDo`PEFYV^4)B!s_SbCo4%|AMYHLUb2eVpuELC|$E}hZzvtG2qMT3W{wwqxl7jsbn z{h<;0?Md3$*ckQ{K;Zb>-4Yxs1LDACAp29~t{o;dlN*;59fnU{uURNd2HJ5t7y3+6hjM4F_l9L-g1Pkt&!hy<+EO?=b6IDEjhWkYxbL5}9ntVZ?#T?ojA7RC=+_AT0yZK@E@{lqgE z^%ySvKwn>d(sjL@s-;^@xwLZedmZ>!t*#^8*+Hz_m0#<(xRW8d_yf26IH+0?JuAE* zJR5Ye{b#1uHSHGFH~q$}G7Ai7L|(lDxCVv?X%1m3w}LjGO(3LE(kzT7`+*zFht)-p z+j*Yhn*_32H|hCH+Ka0@F~Z#VMg9Wt2kyeGdMk_xsd5$%GzpY{cIbNIR&*3MTrGYH zb;_xRc%09!M#AXd{vG|4%0k{-Pkf}16~Bp_@HDrdkv?dbEbh7`ft!ct3D@_UCugIy zv|F0G1(bm0oAk+}y3M6&md`hmGW3$xvg}uW#5vGxl0owo;^niY0s%oWG0Vhm4q+Oi zf0{KG2=!MVlazi*N9w4F`H6RR;kch))J+O+yX|VY)>*KkZ;xJqH#(iQ&99co{}a_Z zTGKGnoBsMx7PG$kSfR+$l~FYgtt9)x>RwjkZ_3|4`a}p`YUXba86M3K`HT^|5S;BBMwt;YbTze19_L*2%k9(+xS!?*;F9!rv7o zmME6$zar^=xv2oiet;_SHB=O!E5P(nqGzcf2z~wva9c6iEmd|FJAvf4YG2uZm|FB)`L?b7jWi#=1j%s1BRdWWO_#ia`yqyaKDGw!~; zkBy0JqJ_u7^g(C2p(bd!Wy!n^3R%j8K|vIXTmlcPv`#kD5H0q{XxhmeF)zlR7TafO61NZ87P z0v|`%R1y8zjhpyxE=rM%{n`ME-^4CE#?Q!$i%2YW!E{^M(yLgcU!|{hTtnC(aoyPZ zI|60Kp{kL|x7u#39~Ho4wL((zTgNI&)wrWgVf>cB#KUth)7RJ62Ur3l6B2?`Q=9N5 zk7CM*ff0|=Z5hw1&FyXOEQ?3!fTtBn+Nvf9GHvFVWJ^XhECdmGf=E404sQ;giOpf* zG0InB_kmc2_W`%~M@e0f?-=50y<7Og2nVmcZG|!G%Y#+67bsEOL&7$It`d`xL9Xli z$O$npFxKvt9n2*!6@31TbAEmfKrvAVpln@*TT?(;(L_79Sk5SE4rJr&*fBUBKpRVrDeM(imaO8M#-A_E{#Xp9pXHklL<@O4+j=44(xR_US6*J3-S1)tYKf&8n97Gg$D3t{@@dXZe zTCE(&_3bZzq_41Vqpp6b(`*;YzOEU?`oS!ATsoQ*%V+@hq8J)81NJ|Nrl#f{G4?@A zK=wL2yO|az-1`!Bbn|A^Uy(6Z^Et2fhu29=&iBpS_1euRygEWTon_vn$d!jg{W9`0 zGoUo`(&8dRvT`;l?Pg+=jLh8J4A{L==fUk!dj(sc+x5-5D998zOjFu{?luY@?q4|0 z=2oma<*nLoj1@ZcC>a~4uWl^&U}iAFt&{E`3}?Nr%<3*e8iqgkQy!l$SiP&7O6*7_5(jYdS&n}_TX+b zvTLY4ix{BW8et}Ztc&zGh7!(SYi0^Me5du?n7~bBRjqvEy0vXHF4)HW2-O{lzF6yX{gVCYo$dTipt9#mg2yA+{;Y+F zyt+hJx&{+ihC}dM;$W^!gs~JnZ&jApmSy<__4Y@;AEtdGDWH`m87pW(?tfrt$w9?L z7XNWXD2CHAK@Yw~c6^hSUy&{KimC7Z3XFvE&^~9W;qWD^g#cRI_i4cmtFm*nkjot^ z>aq>Bk5cHP^0;mUKjVa!x~<0(-~G=FmiJ)ps*&SxE7~PuSRn^x7<`GQDGmI$-EEu@ ztb$Xgqh1}{?bGaDZ1G^{1&o-{ccbu=+o+nz;??Q=Yg}=QZ-_@L1@()h3NWjc_SYgt z1?aP03$lr~*rrcgGvRsjhMofX5Ydglxml>hTO&Ha_-H|)ZrO&99zEj8v2Ql%-YP$BKFa9k+-?(Fli zfSx&)))XXI+ftZ{Mg|MI?tO5uecBVU@9~xmz3HGgH@WzTiB`VQE#TwJUMgD1=GdL@ z-^T-X&Z-10?%zvc7X3_%!G^pl)Y3N&-d$^st8?_|MNp7QnskZUI?^r`x(xIr5X&UJ z7nMKt6ew{Q*31+ihViVtq@$tjMTq-R?kZtYuq^Pv+>;2?{uMeHc2AS)e-ht+`k}z)wG*eNHFSz$fg#B3v0&Y7N7lWrT{c54#@bih^m|1x@pEZKnyn_SOG^GdF1RC}5=0X&&RS|q~Pr-2Dskih6g9R3X0 ze!vX{cqAJSk9<&&)Lg)!+N~91e9M7oZ!bG^=cNZS5gDkk1S$i`4Q5GNsjhuQ*Ck5q zs$oJbjWLr*M}=d%9;~rJN1)foWp5U58Bjkp9P;WKf7#gWcior6md|nSE4>9L!F`KR zZWCjIT3K1);Noh@h|x~$cRl_gmKaP=l7l|8$`{w2VuP}h0SzXOh9;zz6@!G262l@X@#x6Y-%)~< z^RVr-Me?UqKnoLto>mJ`dp(f`}TEt%)@IKp=NOk|H z4vNqM8()qdrC>tWqjodIRbF2e3Zf~FDG&ShCog)hQ{0sy-$Qgg#=fUaxPxnm4DLo;e&RwV(!8p}czwA~aMVzj zef$N5XIo&qkRLCl{bnH+j!I8=YWn9>*KVwS6hkLjE$DypQsQE(>g?6u*NRT4l|}9I zljR96qqlt#7IB}l{2l-R*8rZ^A)CkAX={iiB?foO^%Qp^4qI^nAA^{b8~WyAW`2ym z<$kt5(JEUlS-u{g{vz@|{dZ8Nl%od`GxMpS!0-#t99uE}u52FE?=!E62&JIIfNs_6 zxtq(t>h0MHnvTP74%bK98g)Cpn{L49Ebqe$-=$`PeWoW7gl+u(x2j`)2 zVj_MdL=ktH*P@yB&A-uXE)f}KHU=ER`IB-~v2*FSkJ{R~m%|$B>h||P-^H*wk~Q4; zgTRUE?g6T`w+Ic5_V*cG3_Mb$6t7p<&?-PIgL{35!no-)Q#JwK~szpzCZ6E8Zp4;%ALxKL0 z0nQWw>D)*Y7qc>M*K2`jdG9ZE{A%2CJVD{Q-G zYi9KlcQAa;3sd*oM5GtK->27QbhpvYjYM2lq>9{o{FT}Ar=$_IR<2=rEvp`4qzb>&RN=oS@>cu8^w78NS5QL z?=RbJt6%(<2j|~6nItU8ZbW3{s9>$ig9ZjG)jFrYT8HDozwm??9&b z{**(u)ph8(<5Vt7{n1uvdy*{ny}N#KYOsXNNqvkkd|7cwbZ;K^6cJp1ok4<=F)rk7C?=PW z#R@gw2*v&GqYqN|Dxurm7!X)PQppvFvFD<76Fj%tZ!UgY1}f#qW9s2X#pV6M zR?H+Sbg-vNWH`neI9|6KhR+ziy%;m3^?I)NX3PsB3#AZaC3E8EkDIwTq`#a-mR=c+ zE8)!RJ9Q0JXk2&{v?Hlj3%mm(9gxBE#C#8;__g#^qEb*_NEn)XV+sP(^f^>^j9ghnqad*=a>f9QNed{(44rH&A17N6jOIhg?{-G#f2`_ zd56U%{fWPfAM@>O48?9#3WhJK{R3k$R@r6CdY`^F+^O2Xp2TrG@5bn#0Yk zyYa_me4H*Lf|&QBgYOLzf<?-$clkS{Fwt+JIW$CY0Tbmz2(p)xnZUqd`J?>`mckRBz$-vXfZMlU1hj^!}iM<52fBo>1mFDzeCe{m!^4IndM_U0}|2L zih!ZT2DNu4PKm(23~M!z{>9-p#V1|JSEK~Aug;iBiN^U$2=GuS1<{r}i`rZ?c0lx< z)%M!y#IKAPeMC8E!;giAnk0LopusNWVF+=JMz*D6-o9aK~yyFtTPdbZ7K)mgag$`2rktD-BDj$>VYg6fS-cKXN$RT-$#HJ zC0xFv5`w3|C;gmY;v&R7!v!s73kiXadNDkO6=DgQKL>5T0bTwlxI(AcY5?Xe;H#Yx zF9{zET-rku*};s#3nC~VVkvqx%xhK9=wQiUePZi3aOE!q!s?(;(i z_kfP5&OPONjO&90?MLsOJCf`Om%Gl7CK zJWef-FUN&8+*|pn_DeR*jYEb+3l$i@FII&QWI+ymEbou?{Hy5J!bTE_^C^OWh7;hW zq@ro8A9ny}VBot09NKUm1pljVY@}Ue456B0A+9Ae_%+!1|8mXu*Qw)f-yF3DY&@10k^ zf94p;5$=mPPw%9ZhzAcPFjPBdeGY%M@~d8i^pi*QP`weRHIs`kON0ixb1f4(^w9`Y zn?}BHO2VJe!DfC@$LBm;pK6+a7^PGxkIUbSo6nlExx~eXTbB&RQsU$5@rGsZti^j_ z)Gk8H^l|Xe0z)@?VWd)EWsSTj7o8wDPbziyT}_%e2|LnA9Nt}=*?4JO11eV-oe!cdsDecLU1&0w;1bW zVgENxn%? zXe8Mr{(*7-=jrP$NyMu2sm*k3$xw?6nq~6Y@NgnRV+O8~^(OQiE6+}7BOR_`78u!q zTK5BBU9)8ox8!;=^^Rbhda*I(Avl20N^{M}R#w7~Hj={Y-n;o%6ajJseH17dlNR56 z?*%&tPsgXjnuU6ETq=<|Vv>9p85w@c9ZL(i=t#igLEqyN;F4n>l$8}hhosd8(_65I+)tf^|t?|ysb|P8o91JIR`1%Y723- zBFhoSX;e>&xzj&(Ok4dlDu0Muu_)RS7-bx+Mn5j6?!6_Bu-hcCR*YwLL|bP}F?aPo zj7WHW0C`M3N8~d4l9;MTp<;UYn+m<&ikEY$Ny#6FWCIn1mMSI|me#n+K=Lk)T<5_Z zLkto(e$Z}o$bmP+?ds^EVf{84^`}mzgP$?9xs`zy6xMmqk-r#7zK5^=iAQ(KJ<~$; z%HR?{tik%p$=2E2HszQ^Ym?onXoKp{c3K%PWY)U)A=c6hBRZRpiY>fyOHrki&2Y2;@QWW51sD1CkdY zlm^A*B3d7Sl?(Q5Q*2Z%BZk^SO9#UgnQZE&@BfB{r04SeG+iLA$NDoc-4<4wbWee`6A_=C;dMTs z6_7X@lHov+P*8l7a?%grP;&nSs0F zao>O6TmDj1`UBX25RsGHrIOiTcZf!Jt>{_rE4Bh&9`sd5U&aMzh=SDA#|bfZLL6B| z#hht_Pvv!FfT$3Ole(ffbGp)fb91AWnv_yR7wwhz(#ZGQw5vjM%IXf*pkbt}`oC)2 z4#`y3ycYryp2cG=6W5Itr?cLKQvd!icNb^<`SV9Plu4KBB4Ee=1d9qgJv0zIYCftwqe}m_p&4oyM#aqp?n&ZV`mu{~{5cn=E|zcn_Hi)@E# zkMG4LZ**3of{Q?;W2%;P%8X$|_OR8%V(UjlG$Es~FiG2meU4Q?81?kjYc`s<{=yZz zWmTU27_@`E3N597H)vr&rp*f6US%i;o3^o}rQMXBA43DVR3bu;+1<%?;&5lhu%$B2 zAFbW+(GyCYF;ELRTE^!nUIRzkKYtKeO*Wb76$Oxm+l<`g!OCyNR`sXhPLHoV#jmgW zvx%9zQr6=j_mK}?QChedAMGyA=j{mD;mH=d6=^E zysHzVZoN|0783EpVB+3>?M|gfzxu5Avdep^zqx@3oqOtPf7}nR}5j z|H;U+k};?9XoGEq+8Bmp2Nd!-zq^gcx2uWst^@v@t~Hk ztkOqJO%nNxj(I=g`@^A9C8{5G-h_u1&i7mn1gme0jUc64-QLwTbEqz>?m36c3~e4=D^~h_8}xR@8X%u$;wak6n#*;t zI90V=hGO1&a+ft9a7f);dywU8_Cyvt|9GmDNtE%Ai5rR{Dq59Y&-?=%OW`LUOY!j( zFkjssm6%QE(y?i8v#Q+Oa!N|L4<0-y2TtX;Mn`Ax;Z!y*PKXdat7bA5%LLDh z@bc6yCd{`SS6o1YyV0q`aqw@4Dr99-Dpz9$IwXh(Z;MwiHG*@a)Q+Y)~L&G(jX{0li{q2`^ac1 z51Xp+y1!F@%`vQskPGw~oY~IB6>TXJ<^R{X&2Iye`~&{4MyGV)IQBoL81! zECpm)kn&}q$yO*WN5Yi8sNKSbdpI*vQgIPdyKS}7y3!*f){RnPtj4(Q35zmY#Ifn6 zeNxFKJGCx-!Yq$10z$ z-p2#qdO>Y<2{rU!6$gk6^i1MbYakd^JxY37iCI8YC&xuSvwKm(*&|NjR1 z5H>qKzh=6uFWdKh_6F|jL7vM#%k~&QHdtKZXejtcb@yR&`N$E)UIyxy5S3Vc2dvi{nhr-_H&6MaA-CBx@!1J zg#^qa)qHoX>qO^b0?lq6sPpSbf0Tf@$Gem>fBDrGl-iqlw^CWet3w<+Z3=BuBH6Dy z{pinl>O}^M`KsIZqxD`ye&T=?ehEk-Rk?mpG4%gVed%w5rvQ40CS5+IV}{D3;wEWU z+qL)xyfRVuWp<+XrJg+89AgE*55K~V1G{2Q4OpaKSvn3CTkm53WQA(8WWLTj6kqZ8 zbCd(&#IM!<)cI-!=$Bqt;ZA?cM>J_*rmT9*dX(EAHf1%qcE&9nfhWf6`V8|i_`2*f zyp)Q<{t4g_4!shOrJuza8*`V==_NKvq{}fG1exLt>@Zxl43Ux~22L4S0UgKP(x&l& z38eFJ(z1t~w`g(OyaEXyFSzHvGvO?U&oJ$iN$F)>dN}~Tn$-W}d0GMp(!yeYFrD*& zYj$f~T%6=#g%4S>WH9fnhBXCaODKY+`s^2L0NMXsmxcmwxP9mO?LsQ6dAYqI2P>q5 zX5AiaPcTUK7{JT-tupqsl1NE~A4JGqjGG(ZEto|_q}h;ho1lFLnxlWItKZXz9Rt_a)&_sXJm`DS zZ{m|uJO};^kcAb9u&{p5e}GNFT#_%A1<07}ztgv+rNEF>g^cA^l^(tPgQt@(dh9#$yBFlj#ewwNoZV%O@w+Z6FlWley6VrAQ4 za%uaV8ngnziF{D06!1rU$-iU5E&S)lCjHa%nULTRE+0J|Cubje>D zNz*D4Gcuw9cyiCi^>MV8NPMNLnc>hhal+@G<5bi5_IBBr$CAbfM9|+C?M%?l7wu?e zQ}G&!zT3=SK$V#hCn@P?rxMaf(?+*)b|AVg3p#sX_Rovo{h^_d0}eLBoifP_>gMwe znp>sXigIA0kJTb2_*)kzzH1u@2De$u=xq56 zGfqZaz*zyVaa&ga2n-g1n6*m|&~i<7n(oGC2-jFXG+H5-E^9rEmx^Bqww(3bEa7O8 zg{xF2DYnb5r;GA5gFc?nzk!0)c>1{YpZ~jHfF=PK_r184?3I-jOQ66%Tgz}A`l?}o z4@!r|3Q{vegxWb*S7n?P7CcX0yfkXLd)SPQSems4Wi|1!?i1+tlnUq>+R7HlnpZLv zo6m%4B~I_J8ePkPl_KrZpAHIS@cZR`BHzS`Qj7}XHarug;GT|hb=G!z9(!QiOoM3F$-eF;Rx_*M;_?uRl3zDYy5i8maAYu=%WaX<1x+f1% z*))lk?5rQ1tSLI9!I#K9Y)~OFSW8n@3=&%T%7#Da-v^wA6S6#$uIHXF48r!xnVxJL zn#aNO*ac8anb*}G7I*Z^upUHX4K;b(5v%#yUjq=RR9W?v5AS5(ltjRfq{P55K3$#Z zdVr1TeU+IZhcuHV%^Z7|250Zy=z%tN4q4M6@3VMy;YY)~#FV}-VEpoGY^-zJd`uKG zudz5MuoD?4!Qjcn86|38mr^na(D$7vpm6ok+{X0b>cd-1iu>3I!l~%nM`II9A%=NNx z57mB-8&wxLPW@^YCyLg`W;(QG;Mt-Nd)DOACh7OWFYxi9>d)~wu2>id1%D0`aJ|bW zIe|}d{y;@FbU{^QLj<%!C z{Vd#isVNS8{U%$k$#08s%MeNyOz;h(mP8x#@5;S-bFp*hvJP_RJ^`l8{d)^PuIGyG zXRBh`gYOQ%KVC&Z3QPHJ0=F^~j3uxE>#ZNgBQ>!!Jqv2Jka5~>wlYiK|?p!r_#5l=-V1%Vy}0$ z#scj!ljtdA`VWRtKd!FP&$|-?--A^UL6fR?NE7w0IKy8}*Va7zUG2OYi`q-ufhjabJiuJXSy|D?|6TCmSNN;?to2z*pBgV* zTRXc&fOvKQV~g>lMIfgvV)@H52y6x(fA?L_jNrHFw7fjqS600B9NKNUc?>LwzFS-$ zP>RYHTImVp7Az+6XBn zqi&~ubF6yl&E+z^Q)gUv_mfG}d&>gwG-pW2&Ms?*u&~^HNG%i` za0Tr1mI>dSVL^HYK;8MHzoYkoW5N$mz_%pa6YSoy>gd>XUA?Adqt^K7kavBY5Eh;Z zJcctx5;tbBFliPie4KlgVk0HIp1Uh`48_K5s-T>+4<(O1rMh~t!KrX;Z{Syjjh?40 zT$h5|xM1SxH(-ObU)yr^5RAJ+j?ygb)+gf(0O7Y4if4gwQ)JYahGTnB`s8woLTwnv zj_a<^+EbbM^e$*m#2@Q+VB=Nsv}IKFf5!-@#%LTze{6PGV{pkowOx5jD5Z&lZ;Y|O zoNF|CxZ6!;gGiS+o%Qg!K3^XvidX!(FB~qj}S{2(+K`mY8 zRIC5mC59Ex{OSm=+}EUINKN~>8q4~i5`aU%jnc33s&Sop}KIydZW@HB5w9*pb}wm=m`L z3Hyd|8TIGWLeEDW2y?kaHG2?RnqQ{XBjl43b$Lx2Jv1oueg|Lrou)6tOu)qM}L(KWvy+g;TI>{ z?(>1Cg@Jyy!tq@37TL?5SuREa#N?0C$$+iWmq9vTZd{++^#0*b&MZSh7`sb)@V8V} zo4x@TQST)xqC4c0{8w7{gp{3corRV|@pv?q-Z4Q0evh1KNu{QykQEx3<+FW)bA-Q2 z7pi>t+w+yHpEg%c2dLKJj(KsqYmkB2n-Hf8YrZ__8l4CwD~t`F&-T=@V#fX{m7 zYd*jhX>V`;%-+ky16)nMRI7qet7T0*ZpCUBfw{7hn)kUH9|Py9tRurx{_}(p2JG0S zHZ61N&j(tv+J2rjN>Qrs)}LYO|F?s1f+_XBzqZt{Nt0`KdPtP&n8_u2-WG7#?Otr& zOr0IDhZ}AoYN}Sd1-vPrKYz~ARGp(3_Th`mUuP$=sbjtHS1DJ<{GOu)*6xGpJmAK+ z+F?WP%S|XF6%jx8(xl%s8`H>Lr_fz(l?%r-Bv))|qZqTXt6EmYA z$|&XDa{JeDDAZk=s&YRAf;d~s+?+c65R9j$x;WI(uv|4Kh?q#Ue8Ul2wMz7JSw+4z zUR+HS)8=7hLBXf`Vy8x8+`4z*o^TsF`;Pi`D_Lfc$zHF=Cv^NO_5%)=RwrFm{EP9V zW4b?qO_5Pa7JJ#ykmm6SF*%)F8ZZ@lRsZ*+hraK)Uq%wB#Nzbg-25pSWl5!z$bK4} zUff%?f5NCa;9I&kmlhc!r}22gBPPcv`?JpPTcUjD_WcqI#t4S|KJH=zib+(X3XBe%hj6K{X~tKu4{> zD9X@Hp=5;b`O+bg3;{V{z!1Czw5tH7uP*dY#-Cs@PI@+^)U5u?-I5<|ZH!7G#@diP zCb+=MUwluht1Q2VRvDL+f42U^$~rCVIa*XCLX$ek8j_CN?WWO}!ae@;vC+adFxnwP zAS0t>jb!bO(bBY=9w>fSGu9tWKZqWagteu8a~u{WkQ6JhzL-lC4H6&>Y$#aX+czzq z3y?)9d)ndKPmlIEb$gw;+6)XG#xjX zhyH~iTO(UKU`#FAs|l-MW@a8&k(Fa&6X=Hn@)QScX@t+pl8gdpL4k>arKM|*SGWjG zGU)R(=^3z(+ne*>Eku)^v#Bf-(uxi>Q*T%HD-3Vt-LE*tPC!$|mbxTX_yH*bMY6Tx z;78@>DJ7DT`Dx#j)v0A83bW}Yys4YSK0Z6pnYi@EMzVcZd#lags1r&;2J7wRfPB!q z$M=$9s8MOVZ$MC~H4{9>cM42Ko7kbrINMW=_uu;AYmai+Nk#%cEEcxP_v4^MZ9d8U zNH?N*!3Is3@f4{XE+MF!w3d1EGn=GoO>nxh5Z@W2J z$q(#kD&N`AJ{B85OHO5uvwpV&j!s?6k`>Zc?t_THM)&E^S^iL}t3 zD>Wg}V|RXw7ciWt>e|jP(jM(3g(u0*Y*ZH2(sm#c&;LyDJVLnFJkbW|Z{*hKJMjBm zrG4bBrAgHB{o#5moX5?@kHmx#&n?MYL=RJch5J*BR4OTNuIWvxQvgWF3_RLbzHA&y zK{U^=a%M>mH3F;0dwaFYtq4zIeRK0dPo`Q|*|<4n%+0f+815v0!o6RkEZ+{TH4KX>Gm3!X|Jj7-VZ>Iw`HECSJN@Soc$SB{Ah?Vp0t^XEwVvlL|&7uy>#m zu#KFreS}e$b%z;R>R@~!o|2mHbAyWxIQ936HDCQ&+(>Kp;e%nrD{l2niFeJECo;ai zMs`K2QO~-$uZS0jvP!Pn`hD#UEvdp!sY?&krOp;e3xsywcDh`LhBW2#)wznMKOxY9 zu}R!gUKF#s&suK6cSUR&pRnK4Le^Yo`Et;ARUH7n#JyoH@)j(V1uE4dMqX(+GUhW; z+*<{YG1aWL z9j7XBL*Kp~YV`F;#^>~f_NPD5@nwIa##y7kZDdSx$D6+ImP+s}=qcMhFW1nsUvBU0 zRy$=xeU60wdA_oxA3^TYkXo~7=fwkbWYN(+iyCueK6OfBp8NN^7E@GQ-++cTUhVkW znePWR?IoIDkkv-vnj%|65HLt`g#G}XzTI+^(~lcdyOmzNV2_H9PDamyaJp{w#AN7n zsrk6E>MKw7`Iah|Vcmn*vr_UdQ7M_3B_ApJgj9@9Wl?uoidA71`VE!UUzzs?E`gWn z#nqp=Z@AM>G@iO8s4=XS{d$WU5jfg)x(bH3wL11%(L@NvE0Ln`l#jCE?wZ%FQ zLz@C<*m$X?!vJcVURK*WKO`3``2F5*r$DAOyY@@cPnriS)F4V$9h0j@cQ4siK5XD> z_5@;yoWb3H?>{H)@B*IgN41RGLjn^Ik9x^xc2wRcib*dUq0>~f#x1eP=Zt=a&ta9{ zRHE)l`X`a{c}=FrDDjcyMxpi&T}3%BWFmKiy5;W)n?I9J=wfv^!refgFg|ibVpd$} zk&AZQIQ*RHqH-_8J^lKdQze|6!IzzQ@##!Vlh4AO3Lgl9@u~Q7uJ8EV*CF}rl&Ie% zo$fxW&mLe_OUuPd(t<{P_SzwHhAU3OY;kM{mUaJ{j%$hv_9Wb zIULa_g!#z#{ru&)!{fros|8X=rU4~d>Ia91~P>DoQ#Zt*&mPD$q4P)UWnNO5Q zo0qXVWL|c~cI#I~5GS;fDmfqBo#b@RtPFFPSzqQ>lUbNZ%P6^Brk({} zJPpSlM&>%XKaq?zY;Li+QCeA{$dg<4X{Uxj1RL(OY)geqsF4os{rm@oH>>jV{2c70 zSHR8>6yyFO^w4!Aw3}-L_>)<6xr*<#O-fr1H_B0oyrR9W%l*Vd8-C|lp{r@Ax?t=B z05j?}Jw~4}K?QUa!oAp_o8!E}{BR~X(>ZGrsfgFpxd}4tohwVcW}^&5-@RJ-aK`nO zjO^D;TtYbD3G>Bn<5&i4W8%;w;_9b5AWW5N3jBf{Rv2dp7vftqJ z6hsFD>JJFq+9W9sBt}_7D4S7v}nhKN^K9hbAw7vN&ZFX))YR%Qpy3-sLs% zf2#HhsVn!2F>)PsQmbK19Nk(XubXu&xYyD}l zv8oSXU=f%=E+jpxS;&gi0{7S#j)qcv_~dal@~ZJd;%-gHP2z|j}^#W_h}x= zvqH+@3c{>Gl@F2b70R-n&5C-PDQFe-FUFLsw(1zo=G9n}1UPMWP1eM8S`A+6s*wn} z0|AVwSGJw=_LkpI@%UV(g)Zz%{1klibH-TwfVc;aMMJ;K4olk~!EZd@&v2aTv{G|| z8fmJdu{%eVawxESdqW!Lro!xIG?p7DlujOr&YWb0b<1sj+)w^Ua#I73^pJ@Tin)mpGB%f(QhJrO?9*Y^X^qTu` ze?93pjt$LoI1&|adJosG6?X5_vrkAg$nw9-L?=-WKv-m%xFCkxU%ggjAODbfJH)_>|16~Dvx2?1R8*8o za(lNgd}WQ2@lZG9pSi9r&Pt2v)Enr9Cx-lKY^RsZQUa}mc*SjYB%bi@+FHt#pECOnV`hn!ce}^h_C6z1PyZCMGD3=;j z$Tx2dP)ybMcgDn&`p=L}uZ6cn;}#AAW?#!;4ghdFNAMdLwmRl9<1N1=S2E&@oXq`) z)CJgb=9Q0=2c!#Cj>6#D+4}DLUxDQB3ml-`kvLs%TF%O%QVK+r42DTz|EuBrAqr`? zqN99$XD$xZc33Ng#r>V%Y5T6j@@JU;p^G3%1)x(+yo5ysnNjB&`C(z-!$yCtRaa7a z)NEFX_b^Xp_^Vlz^5@^>SE48M65+#v`EFXLjzWk`j6oNcFnnM&>j&EZnJiJfN^?k8pbO3!H$I)u%-?!c-rnFw!CuFGH<= z-q`Un{RkcZ7}BM&#>^{1L+KsWYS(1L#u_veJ!`W61aER-9}&Nt=8#ngmlkR|K?wQ+ ziQ8#Sn$ByH1~l!j*TFET`d2nUCkC^{m~~DgP~p?3w32+s_gxM4uaAWlqFKoijXy}L z0Xqas0nXsRQNSX{$We`t7`Cg+@gTd0rtHb3ofNvet9=&(nb`H%7atVR(*1BXbaX&y ztd2H13Pl>T^NN_~~5e8)H zO_^xactcgivF78GOtx0UC<_}8``ee%q|_u~?e7^N?buA*jM!$zVfk+^*o2hv?GK6u zPYHJQHT!xj;(1mawQXJ zIPAAYdAjv!WPxf$^I!;;L`vh>i--`TrMH1$GC`F!2e#T+GQxnrv0?1-pqT*WJG*x& zMWlEy0SyKkf4!=eOyrzInn|`c#{qS6jT+JD{x`65j^99B1AHm!O{pXtfzyXYY zm+n@s82{Q`zbp&87y=!45fHn2`wkF%;$TqZ@JYuSj7>^|pHj`TLA1ES67T?xuTMa|>o)_dhpK z53@o2DDu0*=1OI%Fb*v_kQw?^@@kq=|NFn)h`4&ulu=c)B)Ij*2{##|7&t0BJ0AEaFAYco0&2_Va`>mT(-Z*{ z2O!k~0miJ6$68xkn;wdskYrB*Q$ICvV=j!h`CzH4rZ?gEy)4zy;7Y&I+)q+!R$XKK z5ud>?Cs;sTd{YXc@?+Ln)~B0!GxI9-?q35Y0;c=XL55-L=7H*7Ut8u*4IGV7aM4#W z8*JvCfxXpkp1Z$)zkn5%qO}RDXaOs}IxM628LT4YNv~2sKqE;KC`P?u_{#s+*15+sz5j8XMM&i`Nf~NpbD2a*Q%L4A9degj7;-7i=1!qbF3TF5JF||h z9LdQ&>4wv?8Ht3`#U+-+p^)%%`+ZjD{Qmmw@%ihs@8k3Nem~#uv__sWp6=oGpxW zddKS!S3gkEaOiO@;~f888Dn`F*vLWSJKl=RW13ecO7v&*iAoV~MAWL|Ef>G-EC5S^ z&NOwC;Io}%EO-i%`c%$1NOAZyP+cuzwi!#VH)a1yM|Bl9?u|JapTV0=5(9=t!gIfL%sl;cxG^H7dshhrV4oKbUE|c(b`;^aTaP(m{db(>)gkIVcQ5O`Cw1yhzHhGg zu@Ag$u8T4-yaB>Qby1y8vf@>?HMO!#1rs$E?219PdzkchklBKx6AT;qDrT{cqx?9! zq?lxnwTcp)>tlo%f6yO7@wX_V5mzOv9iymP;VJGCpPfJbKP>5+um+j)C1Ju#E7 zsbknAey+I2WZjL_69fadx84=aPjqPWz)=9eue&Fer+a;$84gx+GDvE9_{O+B(EIWq z`b0O@0f329<^vc(v=FG0}v2=(!02$T7dLndKM{1K4v(;mTcu$^QZG7ot90A)-v!cPM;$NfGxXdHQl z%k?@7zOx`^jfIoyz}^iMC4ETe0NNra#_m#a>sWK<+}F!8O&tnYvC@{@_aQ_T~tB{3ec?}@npKO@-i9UofRotqTp2>T(~%< zd$-9iuH{4AWLbJoeeh`wl&1rjB+dVVwGEsO|Nl+y-Ta!t0LoBFKG5BK1*GAJ($gd6 z=@(U|7Gd>1k0WMJQl5mNg>xM5h&J&s6R4a#4O%LxV_^)}fTMt8+PS+Bz|N=wpk_|; zoGAwfUi+vk9y3wv>DHf^fRmmjcfH2|hVlooG1soF6xpY=$Pc0UH)^|SSEDW0yBlI_ zNFBD`AnXN(c6YC5gKU3R!Uw~SLvs4GOA7IG!tn&HbKQ)ROSMoF1a?A!gUrn22NjQO zJL&6K2PzD674ZK48*3{zoi-MOXMJeJ%T-ddNk^@$Tfq4I6n9!G(jM9Aw3+Flkd zBZHZ$PGb2AXR8B7E8pYV}b1>yHKD$4CyD8#j+ z18k*15pG5hSuh?QXHO_kV*o1G~n!jtp;1!-Bn1lVw| zG9(Nqx2G2m2b5?&(5a2;d-VZUkPnb%to=7MOc&8Ea1Y>I!;g)t-0VMw61B$ATDAZi z^m0bcNL*e@J_xrGyPm2Qqs0NW6juM>(+5xVx3?%`2}_y95UpO{OokF0NyU%pIudiG z0t6fo|2{j`p4AQmoh61W+(Y>7fV5XsuI-S;c+}#>Rg;$e(aX`I+xXk69Od#~{VrLx z93#$LZTWN%WxVF;QYo*X3vb^K z`^;=r=--8s#77CC_$3EFHNdb zc|0kjf|vIL@t-r1Z*IgVZ^nBpZ9?TU~g4^P_7pg zy*^yUPM+1=*G}!+&+v?uW=;l+eKSMC#e*z3A|hhPa9DE}6dk5Vs*9d>+YUP_Te5V) z>K9weO*#MQCzks}L<8N7gP(@GMfJbTn`@&I|7NfG+(&%7MABF5K#oO%xN%4(gu={`Pjp3n|5$v40P zfpGd=P7N@qIwT!pK*B%SXq5*@(z3oNch5271h|(sZ^Ol>`^!~pX0lk2=0bpN)x$?p z7krv_v8^d?ayg<~w*Iwb0oCsc-kVQ+(>p5aE8IY1NZGIjMw=JFV#hXc|?xv!R}Xm()xg$pGN|w zWcA|uwD0DhdOFGG4p>>w`{&8LNgFXSPrn?8oQQM!DX-{GFq1e1Wp@JhU4A&&N=6OX zF#77^^dKyw^SiW&@2eW`IRd2nuLS_Z*|f66V7mkRblUeCN#zwCpQjIX1=Su|DIyw% zX1bL=|GrPOsAiud4d@--Em`!vyD|Bs2kU@Xas856-lRrL9i*JX9(BF|0P(WtkvL&{ zSb&HN-&Mnjoe#__u&$KV2+T#$hx@$T~*nZ!>Ci z=pq1cwUkmykEN^<_85WvXbO~#BuxfQy%jCn@Q<#f{2=4O_!wR2ABpTgFb`JC4r>ws ziF*RVgpX=!CWI!ABg^KSH=Zhjl$Qh>$qdt)Hu=30^tAdLIXiw@cz<7mgAYtll~avp zxz8(br3Y7sEUCTF70=T@C7&B$Gb2-F5T$Ad%2edE~+_1H+lJ3A72HT+fL! z{qbaFq`ZmMX_B>7Y}_VAY|IVe` u?49CYQ}_RKE+E}nBlAzsB2tCdTQ|3?P?G(bJi@dH_~9(=vG-2;UHvcT5uZl@ literal 91183 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 Module(1)(0)BeginEndSelectModuleSelectGroupSelectDomaininteractionPromptAIGenerationRemoveModuleCreateModuleChoiceGrantUserTranslateDomainNewScopeEndHomeisParamNoParam \ No newline at end of file +(0)(1)GenerateDelete Module(1)(0)BeginEndSelectModuleSelectGroupSelectDomaininteractionPromptAIGenerationRemoveModuleCreateModuleChoiceGrantUserTranslateDomainNewScopeEndHomeisParamNoParam \ No newline at end of file diff --git a/module-info.json b/module-info.json index 467327c..6b5c0ca 100644 --- a/module-info.json +++ b/module-info.json @@ -1,9 +1,9 @@ { - "date": "2024-10-01 18:14:51", + "date": "2024-10-15 18:33:07", "name": "AIBySimplicite", "format": "json", "files": ["AIBySimplicite.json"], "repository": {"origin": {"uri": "https://github.com/simplicitesoftware/module_ai.git"}}, "version": "0.23", - "platform": "6.1.8" + "platform": "6.1.10" } \ No newline at end of file diff --git a/resources/Disposition/default/AI_STYLE.less b/resources/Disposition/default/AI_STYLE.less index 92dc234..24e61e4 100644 --- a/resources/Disposition/default/AI_STYLE.less +++ b/resources/Disposition/default/AI_STYLE.less @@ -38,6 +38,7 @@ max-height: 55vh; resize: none; border: #e2e2e2; + min-height: 40px; } .chat-button { padding: 5px ; @@ -105,23 +106,46 @@ width: 1em; text-align: left; } - } - - @keyframes dots { +} +@keyframes dots { 0% { - content: ''; // Pas de point au début + content: ''; // Pas de point au début } 25% { - content: '.'; // Un seul point + content: '.'; // Un seul point } 50% { - content: '..'; // Deux points + content: '..'; // Deux points } 75% { - content: '...'; // Trois points + content: '...'; // Trois points } 100% { - content: ''; // Retour à vide pour boucler + content: ''; // Retour à vide pour boucler + } +} +.ai-user-input { + height: 40px; + display: flex; + padding: 5px; + min-height: 40px; +} +.ai-microphone-ellipsis{ + + display: inline-block; + color: red; // Couleur initiale de l'icône + animation: blink 1s steps(1, start) infinite; // Animation répétée en boucle + + @keyframes blink { + 0% { + color: red; // Icône rouge + } + 50% { + color: black; // Icône noire + } + 100% { + color: red; // Icône rouge + } } - } +} \ No newline at end of file diff --git a/resources/Disposition/default/AiJsTools.js b/resources/Disposition/default/AiJsTools.js index 9690598..3745508 100644 --- a/resources/Disposition/default/AiJsTools.js +++ b/resources/Disposition/default/AiJsTools.js @@ -4,9 +4,9 @@ var AiJsTools = AiJsTools || (function() { let app = $ui.getApp(); let isSpeechRecognitionSupported = null; - botName= "SimpliBot"; + let botName= "SimpliBot"; getBotName(); - userName = app.getGrant().login; + let userName = app.getGrant().login; if(app.getGrant().firstname ){ userName =app.getGrant().firstname; } @@ -24,42 +24,39 @@ var AiJsTools = AiJsTools || (function() { let url = Simplicite.ROOT+"/ext/AIRestAPI"; // authenticated webservice let postParams = {"reqType":"CHECK_SPEECH_RECOGNITION"}; await app._call(false, url, postParams, function callback(botResponse){ - console.log(botResponse+" && "+botResponse.isSpeechRecognitionSupported,(botResponse && botResponse.isSpeechRecognitionSupported)); - if (botResponse && botResponse.isSpeechRecognitionSupported) { - isSpeechRecognitionSupported = botResponse.isSpeechRecognitionSupported; - }else{ - isSpeechRecognitionSupported = false; - } - + isSpeechRecognitionSupported = botResponse?.isSpeechRecognitionSupported ?? false; }); } - function addButton(ctn, id) { - let htmlButton = document.createElement('button'); + function addButton(ctn, id,onclick, fa_icon, title) { + let htmlButton = document.createElement('button'); htmlButton.id = id; + htmlButton.className = "chat-icon-button fas "+fa_icon; + htmlButton.onclick = onclick; + htmlButton.title = title; + ctn.insertBefore(htmlButton, ctn.querySelector('.user-message')); + + } + function defaultButton(ctn, id) { switch (id) { case "add-img": - htmlButton.className = "chat-icon-button fas fa-upload"; - htmlButton.onclick = function() { + addButton(ctn,"add-img",function() { AiJsTools.addImage(this.parentElement); - }; - htmlButton.title =$T("AI_ICON_ADD_IMG"); + },"fa-upload",$T("AI_ICON_ADD_IMG")); break; case "take-img": - htmlButton.className = "chat-icon-button fas fa-camera"; - htmlButton.onclick = function() { + addButton(ctn,"take-img",function() { AiJsTools.takeImage(this.parentElement); - }; - htmlButton.title =$T("AI_ICON_TAKE_IMG"); + }, "fa-camera",$T("AI_ICON_TAKE_IMG")); break; case "speech": - htmlButton.className = "chat-icon-button fas fa-microphone"; - htmlButton.onclick = function() { + addButton(ctn,"speech",function() { AiJsTools.getSpeech(this); - }; - htmlButton.title =$T("AI_ICON_SPEECH"); + }, "fa-microphone",$T("AI_ICON_SPEECH")); break; + default: + + break; } - ctn.insertBefore(htmlButton, ctn.firstChild); } async function addChatOption(ctn,addImg,takeImg,Speech){ @@ -67,19 +64,19 @@ var AiJsTools = AiJsTools || (function() { console.log("ctn is null"); return; } + + ctn.querySelector(".chat-button").innerHTML = $T("AI_BUTTON_SEND"); - await checkSpeechRecognitionSupported(); - if(Speech && isSpeechRecognitionSupported){ - addButton(ctn,"speech"); - } - if(takeImg){ - addButton(ctn,"take-img"); + await checkSpeechRecognitionSupported(); + if(addImg){ + defaultButton(ctn,"add-img"); } - if(addImg){ - addButton(ctn,"add-img"); + if(takeImg){ + defaultButton(ctn,"take-img"); } - - + if(Speech && isSpeechRecognitionSupported){ + defaultButton(ctn,"speech"); + } $(window).resize(function() { resizeUp($(ctn).parent(),$(ctn).parent().parent().find(".chat-messages")); }); @@ -92,12 +89,12 @@ var AiJsTools = AiJsTools || (function() { inputCtn = $(inputCtn); let input = document.createElement('input'); input.type = 'file'; - input.accept = 'image/jpeg'; + input.accept = 'image/jpeg, image/png'; input.onchange = function(event) { let file = event.target.files[0]; let reader = new FileReader(); reader.onload = function(event) { - image_base64 = event.target.result; + let image_base64 = event.target.result; inputCtn.parent().find("#input-img img").attr("src", image_base64); inputCtn.parent().find("#input-img").show(); resizeUp(inputCtn.parent(),inputCtn.parent().parent().find(".chat-messages")); @@ -122,10 +119,8 @@ var AiJsTools = AiJsTools || (function() { function resizeUp(inputArea, messagesArea,maxbodyH) { if(!inputArea || !messagesArea){console.log("resizeUp: ctn is null");return;} let bodyH = messagesArea.closest(".card-body").height(); - console.log("resizeUp: bodyH: "+bodyH+" maxbodyH: "+maxbodyH); if (maxbodyH && bodyH > maxbodyH) { bodyH = maxbodyH; - console.log("resizeUp max exept: bodyH: "+bodyH+" maxbodyH: "+maxbodyH); } let container = messagesArea.parent(); if(!isContainerFollowedByDiv(container)){ @@ -139,22 +134,20 @@ var AiJsTools = AiJsTools || (function() { usermsg.css("height", minHeight); let textheight = usermsg.prop('scrollHeight'); let isScrollbarVisible = textheight > usermsg.innerHeight(); - console.log("scrollbar visible: "+isScrollbarVisible+": scorllH" + textheight + " innerH: "+usermsg.innerHeight()); if (!isScrollbarVisible) { textheight = usermsg.innerHeight(); } let areaheight = messagesArea.parent().height(); - imgCtn =inputArea.find("#input-img"); + let imgCtn =inputArea.find("#input-img"); let imgheight = imgCtn.is(':hidden')?0: (imgCtn.height()); - console.log("minH "+ minHeight+"> textheight: "+textheight+"< maxH: "+maxHeight+" - imgheight: "+imgheight); if(textheight >maxHeight-imgheight){ textheight = maxHeight-imgheight; }else if(textheight < minHeight){ textheight = minHeight; } usermsg.innerHeight(textheight); - for (butCtn of inputArea.find(".chat-icon-button")){ + for (let butCtn of inputArea.find(".chat-icon-button")){ $(butCtn).css("height", textheight); } inputArea.find("#send-button").css("height", textheight); @@ -164,18 +157,7 @@ var AiJsTools = AiJsTools || (function() { messagesArea.css("height", areaheight); } -/* function getdisplayUserMessage(ctn,userName,userTemplate){ - inputCtn=$(ctn).find(".ai-chat-input-area"); - let userMessage = inputCtn.find(".user-message").val(); - let userImage = inputCtn.find("#input-img img").attr("src"); - if(userImage){ - userImage = ""; - }else{ - userImage = ""; - } - params = {user:userName,msg:userMessage,img:userImage}; - return Mustache.render(userTemplate, params); - } */ + function resetInput(ctn){ ctn = $(ctn); ctn.find(".user-message").val(""); @@ -204,7 +186,7 @@ var AiJsTools = AiJsTools || (function() { historic.push(JSON.stringify(text)); }); - inputCtn=$(ctn).find(".ai-chat-input-area"); + let inputCtn=$(ctn).find(".ai-chat-input-area"); let userMessage = inputCtn.find(".user-message").val(); let userImage = inputCtn.find("#input-img img").attr("src"); let prompt =[]; @@ -237,18 +219,7 @@ var AiJsTools = AiJsTools || (function() { formData.append('file', audioBlob, 'audio.webm'); formData.append('reqType', 'audio'); convertBlobToBase64(audioBlob).then(function(audio64) { - audio64 = audio64.split(",")[1]; - const jsonData = { - file: audio64, - reqType: 'audio' - }; - app._call(useAsync, url, jsonData, function callback(botResponse){ - console.log(botResponse.msg); - let json = JSON.parse(botResponse.msg); - console.log(json.text); - messageCtn.val(json.text); - messageCtn.focus(); - }); + callSTTAi(messageCtn, audio64); }); @@ -261,6 +232,18 @@ var AiJsTools = AiJsTools || (function() { mediaRecorder.start(); } + function callSTTAi(messageCtn, audio64) { + audio64 = audio64.split(",")[1]; + const jsonData = { + file: audio64, + reqType: 'audio' + }; + app._call(useAsync, url, jsonData, function callback(botResponse){ + let json = JSON.parse(botResponse.msg); + messageCtn.val(json.text); + messageCtn.focus(); + }); + } function convertBlobToBase64(blob) { return new Promise((resolve, reject) => { const reader = new FileReader(); @@ -268,7 +251,7 @@ var AiJsTools = AiJsTools || (function() { resolve(reader.result); // Extraire la partie Base64 de la chaîne data URL }; reader.onerror = function(error) { - reject(error); + reject(new Error(error)); }; reader.readAsDataURL(blob); }); @@ -284,11 +267,50 @@ var AiJsTools = AiJsTools || (function() { } function getSpeech(inputCtn){ startRecording(inputCtn); - $ui.confirm({content:"", onOk:function(){stopRecording();}, onCancel:function(){cancelRecording();}}); + disableUi(inputCtn); + } + function removeimg(ctn){ + ctn = $(ctn).parent(); + ctn.find("img").removeAttr("src"); + ctn.hide(); + ctn = ctn.parent(); + resizeUp(ctn,ctn.parent().find(".chat-messages")); + } + function disableUi(inputCtn){ + let messageCtn = $(inputCtn).parent().find(".user-message"); + let sendButton = $(inputCtn).parent().find(".chat-button"); + $(sendButton).prop('disabled', true); + messageCtn.val( $T("AI_RECORDING_TITLE")); + messageCtn.prop('readonly', true); + inputCtn.className = "chat-icon-button fas fa-microphone ai-microphone-ellipsis"; + inputCtn.title = $T("AI_RECORDING_TITLE"); + addButton(inputCtn.parentElement,"cancel-recording",function() { + cancelRecording(); + resetButtons(inputCtn, messageCtn, sendButton); + },"fa-times",$T("AI_CANCEL_RECORDING")); + addButton(inputCtn.parentElement,"stop-recording",function() { + stopRecording(); + resetButtons(inputCtn, messageCtn, sendButton); + }, "fa-check",$T("AI_STOP_RECORDING")); + inputCtn.onclick = function() { + resetButtons(inputCtn, messageCtn, sendButton); + stopRecording(); + } + } + function resetButtons(inputCtn, messageCtn, sendButton){ + $(inputCtn.parentElement).find("#cancel-recording").remove(); + $(inputCtn.parentElement).find("#stop-recording").remove(); + messageCtn.prop('readonly', false); + messageCtn.val(""); + inputCtn.className = "chat-icon-button fas fa-microphone"; + inputCtn.onclick = function() { + getSpeech(inputCtn); + }; + sendButton.prop('disabled', false); } function loadResultInAceEditor(ctn,divId){ $ui.loadAceEditor(function(){ - var aceEditor = window.ace.edit(divId); + let aceEditor = window.ace.edit(divId); aceEditor.setOptions({ //enableBasicAutocomplete: true, // the editor completes the statement when you hit Ctrl + Space //enableLiveAutocomplete: true, // the editor completes the statement while you are typing @@ -312,7 +334,7 @@ var AiJsTools = AiJsTools || (function() { }); } function getDisplayUserMessage(ctn){ - inputCtn=$(ctn).find(".ai-chat-input-area"); + let inputCtn=$(ctn).find(".ai-chat-input-area"); let msg = inputCtn.find(".user-message").val(); let imgb64 = inputCtn.find("#input-img img").attr("src"); let div= document.createElement("div"); @@ -366,6 +388,7 @@ var AiJsTools = AiJsTools || (function() { getPostParams: getPostParams, getDisplayUserMessage: getDisplayUserMessage, getDisplayBotMessage: getDisplayBotMessage, - loadResultInAceEditor:loadResultInAceEditor + loadResultInAceEditor:loadResultInAceEditor, + removeimg:removeimg }; })(); diff --git a/resources/ObjectExternal/AIChatBot/HTML.html b/resources/ObjectExternal/AIChatBot/HTML.html index 469c838..385a2d1 100644 --- a/resources/ObjectExternal/AIChatBot/HTML.html +++ b/resources/ObjectExternal/AIChatBot/HTML.html @@ -5,8 +5,11 @@

- -
+ +
diff --git a/resources/ObjectExternal/AIChatBot/SCRIPT.js b/resources/ObjectExternal/AIChatBot/SCRIPT.js index 8a3d74b..4380487 100644 --- a/resources/ObjectExternal/AIChatBot/SCRIPT.js +++ b/resources/ObjectExternal/AIChatBot/SCRIPT.js @@ -19,7 +19,7 @@ var AIChatBot = AIChatBot || (function() { } }); - $ui.loadScript({url: $ui.getApp().dispositionResourceURL("AiJsTools", "JS"),onload: function(){ AiJsTools.addChatOption(ctn.querySelector('#user-input'),addImgVisible,takeImgVisible,SpeechVisible);}}); + $ui.loadScript({url: $ui.getApp().dispositionResourceURL("AiJsTools", "JS"),onload: function(){ AiJsTools.addChatOption(ctn.querySelector('.ai-user-input'),addImgVisible,takeImgVisible,SpeechVisible);}}); ctn.querySelector('#chatbot_send_button').onclick = function() { AIChatBot.chatbotSendMessage(ctn); }; @@ -110,16 +110,6 @@ var AIChatBot = AIChatBot || (function() { }; return text.replace(/[&<>"']/g, function(m) { return map[m]; }); } -/* function setBotName(){ - let url = Simplicite.ROOT+"/ext/AIRestAPI"; // authenticated webservice - let postParams = {"reqType":"BOT_NAME"}; - app._call(false, url, postParams, function callback(botResponse){ - let param = botResponse.botName; - botTemplate = Mustache.render(botTemplate, {botName:param}); - return true; - }); - return false; - } */ function desableChatbot(ctn){ $(ctn).find("#chatbot_send_button").prop("disabled", true); $(ctn).find("#chatbot_input_message").prop("disabled", true); diff --git a/resources/ObjectExternal/AIChatBot/STYLES.less b/resources/ObjectExternal/AIChatBot/STYLES.less index 5d7ebe9..a87c231 100644 --- a/resources/ObjectExternal/AIChatBot/STYLES.less +++ b/resources/ObjectExternal/AIChatBot/STYLES.less @@ -7,12 +7,6 @@ max-height: 70vh; height: calc(100% - 50px); } - #user-input { - height: 40px; - display: flex; - padding: 5px; - - } .warning { background-color: #ffeeba; border: 1px solid #ffc107; diff --git a/resources/ObjectExternal/AIMetricsChat/HTML.html b/resources/ObjectExternal/AIMetricsChat/HTML.html index 87b2ffc..f0d131f 100644 --- a/resources/ObjectExternal/AIMetricsChat/HTML.html +++ b/resources/ObjectExternal/AIMetricsChat/HTML.html @@ -4,10 +4,10 @@
- -
+ +
- +
diff --git a/resources/ObjectExternal/AIMetricsChat/SCRIPT.js b/resources/ObjectExternal/AIMetricsChat/SCRIPT.js index cdb41e7..0c7be87 100644 --- a/resources/ObjectExternal/AIMetricsChat/SCRIPT.js +++ b/resources/ObjectExternal/AIMetricsChat/SCRIPT.js @@ -2,7 +2,6 @@ var AIMetricsChat = AIMetricsChat || (function() { const app = $ui.getApp(); const histObj = app.getBusinessObject("AiMetricsHist"); let swagger=""; - let userName = "user"; let moduleName = ""; let lastScript = ""; let lastText =""; @@ -18,6 +17,7 @@ var AIMetricsChat = AIMetricsChat || (function() { let defaultSchemaDiv = document.createElement('div'); defaultSchemaDiv.className = "ai-default-schema-content"; defaultSchemaDiv.appendChild(defaultSchema); + let buttons = {}; function render(params,id,module,s) { let ctn = params[0]; let printicon = document.createElement('i'); @@ -26,46 +26,37 @@ var AIMetricsChat = AIMetricsChat || (function() { printicon.className = "fa fa-print icon"; printbutton.appendChild(printicon); printbutton.onclick = function(){ - console.log("Print"); + let canvas = document.querySelector('canvas'); + if (canvas) { + let link = document.createElement('a'); + link.href = canvas.toDataURL('image/png'); + link.download = 'chart.png'; + link.click(); + } else { + console.log("No chart found to print."); + } }; - let acts = $('.form-actionbar').find('.actions'); - acts.append(printbutton); + $("#work .actions").prepend(printbutton); displayHist(); moduleId = id; // set button text moduleName = module; - $('#metrics_user_text').click(function() { showWarn();}); + app.getTexts(function(textes){ let actLabel = textes?.AiSaveAsCrosstableAction||""; let sendText = textes?.AI_BUTTON_SEND ||"Send"; let cancelText = textes?.AI_BUTTON_CANCEL || "Cancel"; - let length = Math.max(sendText.length, cancelText.length); - let optionalButtonWidth =0; - $(ctn).find(".chat-icon-button").each(function(){ - console.log("Optional button: "+this); - optionalButtonWidth += $(this).outerWidth(); - }); - console.log("Optional button length: "+optionalButtonWidth); if(actLabel != "")$("#work .actions").prepend(''); - $('.chat-button').css('min-width', length + 'em'); - $('.user-message').css('width', 'calc(100% - ' + (length + 2) + 'em - '+optionalButtonWidth+'px)'); $('#metrics_send_button').text(sendText); $('#metrics_cancel_button').text(cancelText); },null); swagger=s; - if(app.getGrant().firstname ){ - userName =app.getGrant().firstname; - }else{ - userName =app.getGrant().login; - } - //userTemplateMetrics=userTemplateMetrics.replace('{{user}}', userName); - //setBotName(); - $ui.loadScript({url: $ui.getApp().dispositionResourceURL("AiJsTools", "JS"),onload: function(){ AiJsTools.addChatOption(ctn.querySelector('.user-input'),addImgVisible,takeImgVisible,SpeechVisible);}}); - $(ctn).find(".chat-icon-button").each(function(){ - $(this).mouseover(function() { showWarn();}); - }); + $ui.loadScript({url: $ui.getApp().dispositionResourceURL("AiJsTools", "JS"),onload: function(){ + AiJsTools.addChatOption(ctn.querySelector('.ai-user-input'),addImgVisible,takeImgVisible,SpeechVisible).then(() => {setShowWarn(ctn);}); + }}); resetChat(); + $('#metrics_user_text').keypress(function(e) { if (e.which === 13) { sendMetricsMessage(); @@ -73,6 +64,7 @@ var AIMetricsChat = AIMetricsChat || (function() { }); } + function sendMetricsMessage(){ let isCancelled = false; $('#metrics_cancel_button').show(); @@ -123,12 +115,20 @@ var AIMetricsChat = AIMetricsChat || (function() { reOpenChat(); } - function showWarn(){ + function setShowWarn(ctn){ + $(ctn).find(".chat-icon-button").each(function(but){ + buttons[but.id] = but.onclick; + but.onclick = function() { showWarn($(ctn).find('.chat-button'));}; + }); + $('#metrics_user_text').click(function() { showWarn($(ctn).find('.chat-button'));}); + } + function showWarn(ctn){ app.getTexts(function(textes){ $ui.alert(app.getText(textes?.AI_GRAPH_DISCLAIMER, false)); $('#metrics_user_text').unbind('click'); - $('.chat-icon-button').each(function(){ - $(this).unbind('mouseover'); + ctn.onclick = function() { sendMetricsMessage();}; + $('.chat-icon-button').each(function(but){ + but.onclick = buttons[but.id]; }); }); } @@ -259,6 +259,8 @@ var AIMetricsChat = AIMetricsChat || (function() { displayHistItem(res.aiMhPreview,res.aiMhMetrics); }; deleteicon.onclick = function(){ + $('#metrics_messages').html(''); + $('#ia_html').html(defaultSchemaDiv); let content = $T('AI_CONFIRM_DEL')+""; $ui.confirm({content:content,onOk:function(){ deleteObj(res.row_id); @@ -276,7 +278,6 @@ var AIMetricsChat = AIMetricsChat || (function() { histObj.resetFilters(); histObj.getForDelete(function(item){ histObj.del(function(res){ - console.log("Deleted: ",res); $("#hist_"+id).remove(); },item,{error:function(err){}}); },id,null); @@ -290,12 +291,12 @@ var AIMetricsChat = AIMetricsChat || (function() { histObj.select(function(item){ displayHistItem(item.aiMhPreview,item.aiMhMetrics,ctn); },id); - console.log("Display hist item by id: "+id); } return { render: render, sendMetricsMessage: sendMetricsMessage, + showWarn: showWarn, saveAsCrosstable: saveAsCrosstable, displayHistItemById: displayHistItemById }; diff --git a/resources/ObjectExternal/AIMetricsChat/STYLES.less b/resources/ObjectExternal/AIMetricsChat/STYLES.less index 7a9ed8f..65e2470 100644 --- a/resources/ObjectExternal/AIMetricsChat/STYLES.less +++ b/resources/ObjectExternal/AIMetricsChat/STYLES.less @@ -31,12 +31,9 @@ overflow-y: scroll; height: calc(100% - 40px); } - .chat-button { - width: 15%; - min-width: 4em; - } #metrics_cancel_button{ display: none; + background-color: orange; } canvas{ max-height: 100% @@ -44,8 +41,5 @@ .history_area{ margin-top: 10px; } - .user-input{ - padding: 5px; - } } \ No newline at end of file diff --git a/resources/ObjectExternal/AIProcessResource/CHAT_BOT_CSS.less b/resources/ObjectExternal/AIProcessResource/CHAT_BOT_CSS.less index ccb0cec..77ac8f0 100644 --- a/resources/ObjectExternal/AIProcessResource/CHAT_BOT_CSS.less +++ b/resources/ObjectExternal/AIProcessResource/CHAT_BOT_CSS.less @@ -10,12 +10,6 @@ .chat-messages { height: calc(60vh - 60px); } - #user-input { - height: 40px; - display: flex; - padding: 5px; - - } .big-icon{ font-size: 50px; diff --git a/resources/ObjectExternal/AIProcessResource/CHAT_BOT_MODEL.html b/resources/ObjectExternal/AIProcessResource/CHAT_BOT_MODEL.html index e4a432b..9e80da6 100644 --- a/resources/ObjectExternal/AIProcessResource/CHAT_BOT_MODEL.html +++ b/resources/ObjectExternal/AIProcessResource/CHAT_BOT_MODEL.html @@ -13,8 +13,8 @@ {{botMesage}}
- -
+ +
diff --git a/resources/ObjectExternal/AIProcessResource/CHAT_BOT_SCRIPT.js b/resources/ObjectExternal/AIProcessResource/CHAT_BOT_SCRIPT.js index 3a3d51f..d58a360 100644 --- a/resources/ObjectExternal/AIProcessResource/CHAT_BOT_SCRIPT.js +++ b/resources/ObjectExternal/AIProcessResource/CHAT_BOT_SCRIPT.js @@ -28,14 +28,9 @@ var AIWfChatBot = AIWfChatBot || (function() { $(window).resize(function() { resizeUp(); }); - if(app.getGrant().firstname ){ - userName =app.getGrant().firstname; - }else{ - userName =app.getGrant().login; - } maxbodyH = $('#AIchatbotProcess').parent().height() $ui.loadScript({url: $ui.getApp().dispositionResourceURL("AiJsTools", "JS"),onload: function(){ - AiJsTools.addChatOption(ctn.querySelector('#user-input'),addImgVisible,takeImgVisible,SpeechVisible); + AiJsTools.addChatOption(ctn.querySelector('.ai-user-input'),addImgVisible,takeImgVisible,SpeechVisible); let msgs = $('#module_chat_messages'); let initMsg; if(msgs.length == 0){ diff --git a/src/com/simplicite/commons/AIBySimplicite/AITools.java b/src/com/simplicite/commons/AIBySimplicite/AITools.java index bb224b1..2c83dc4 100644 --- a/src/com/simplicite/commons/AIBySimplicite/AITools.java +++ b/src/com/simplicite/commons/AIBySimplicite/AITools.java @@ -1,5 +1,4 @@ package com.simplicite.commons.AIBySimplicite; -import org.checkerframework.checker.units.qual.t; import org.json.JSONArray; import org.json.JSONObject; import org.json.JSONException; @@ -22,8 +21,6 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.simplicite.util.tools.*; -import ch.simschla.minify.cli.App; - /** * Shared code AITools @@ -76,6 +73,7 @@ public class AITools implements java.io.Serializable { private static final String ROW_MLD_ID = "row_module_id"; public static final String PING_SUCCESS = "200"; + private static final String STT_URL_ERROR = "STT url not set"; private static JSONObject aiApiParam =getOptAiApiParam(); private static final boolean IS_ENV_SETUP = !Tool.isEmpty(System.getenv(SYSPARAM_AI_API_PARAM)); @@ -1136,27 +1134,25 @@ public static int getHistDepth(){ return aiHistDepth; } public static boolean checkSpeechRecognition(){ - AppLog.info("Check STT",Grant.getSystemAdmin()); if(Tool.isEmpty(getAIParam("stt_url"))){ - AppLog.info("STT url not set",Grant.getSystemAdmin()); - AppLog.info("STT url not set"); + AppLog.info(STT_URL_ERROR,Grant.getSystemAdmin()); + AppLog.info(STT_URL_ERROR); return false; } - AppLog.info("STT url set",Grant.getSystemAdmin()); return true; } public static String speechToText(String audioBase64){ Grant g = Grant.getSystemAdmin(); String apiUrl = getAIParam("stt_url"); if(Tool.isEmpty(apiUrl)){ - AppLog.info("STT url not set", g); + AppLog.info(STT_URL_ERROR, g); return Message.formatWarning("Speach to text not set",null,null); } try{ URI url = new URI(apiUrl); HttpURLConnection connection = (HttpURLConnection) url.toURL().openConnection(); connection.setRequestMethod("POST"); - connection.setRequestProperty("Authorization", "Bearer " + apiKey); + connection.setRequestProperty(AUTH_PROPERTY, AUTH_PREFIX + apiKey); connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=---Boundary"); connection.setDoOutput(true); @@ -1191,9 +1187,7 @@ public static String speechToText(String audioBase64){ } int responseCode = connection.getResponseCode(); if (responseCode == HttpURLConnection.HTTP_OK) { - String res = readResponse(connection, g); - AppLog.info("STT success "+res , g); - return res; + return readResponse(connection, g); }else{ JSONObject error = readError(connection,responseCode,g); diff --git a/src/com/simplicite/commons/AIBySimplicite/AiMetrics.java b/src/com/simplicite/commons/AIBySimplicite/AiMetrics.java index fc84417..e37afae 100644 --- a/src/com/simplicite/commons/AIBySimplicite/AiMetrics.java +++ b/src/com/simplicite/commons/AIBySimplicite/AiMetrics.java @@ -354,12 +354,7 @@ public static String recallWithError(String prompt, String lang,JSONObject swagg hist.put(new JSONObject().put("role","user").put(AITools.CONTENT_KEY,arrayPrompts)); String response = "```javascript\n"+script+MD_BALISE+"\n```html\n"+html+MD_BALISE; response = AITools.normalize(response,true); - AppLog.info("response: "+response, null); response = response.replace("\\", "\\\\").replace("\n", "\\n"); - AppLog.info(response, null); - - - hist.put(new JSONObject().put("role","assistant").put(AITools.CONTENT_KEY,response)); String spe = " ```OpenAPI "+swagger+"```"; prompt = "this script is not valid, please correct it.I got this error: "+error+"\n correct only the script response in ```javascript```"; diff --git a/src/com/simplicite/extobjects/AIBySimplicite/AIChatBot.java b/src/com/simplicite/extobjects/AIBySimplicite/AIChatBot.java index 8d536c7..91b46f8 100644 --- a/src/com/simplicite/extobjects/AIBySimplicite/AIChatBot.java +++ b/src/com/simplicite/extobjects/AIBySimplicite/AIChatBot.java @@ -29,9 +29,7 @@ public Object display(Parameters params) { appendCSSInclude(HTMLTool.getResourceCSSURL(g, "AI_STYLE")); setTitle(false); String currentPage = ""; - AppLog.info("Scope "+getGrant().getHome(), g); String scopeDesc = getScopeDesc(getGrant().getHome()); - AppLog.info(scopeDesc, g); String specialisation = ""; String object = params.getParameter("object"); String rowId = params.getParameter("row_id"); //undefine or null with object context = list diff --git a/src/com/simplicite/extobjects/AIBySimplicite/AIExpTool.java b/src/com/simplicite/extobjects/AIBySimplicite/AIExpTool.java index 6233084..7556234 100644 --- a/src/com/simplicite/extobjects/AIBySimplicite/AIExpTool.java +++ b/src/com/simplicite/extobjects/AIBySimplicite/AIExpTool.java @@ -1,10 +1,6 @@ package com.simplicite.extobjects.AIBySimplicite; -import java.util.*; - -import com.mysql.cj.x.protobuf.MysqlxDatatypes.Scalar.String; import com.simplicite.util.*; -import com.simplicite.util.exceptions.ActionException; import com.simplicite.util.tools.*; /** * External object AIExpTool @@ -20,13 +16,8 @@ public class AIExpTool extends ExternalObject { // or com.simplicite.webapp.web. */ @Override public Object display(Parameters params) { - ObjectDB cli = getGrant().getTmpObject("TnnClient"); - - return javascript("let obj = $grant.getObject(null,'TnnClient');obj.displayList(null, obj, null, function(){$ui.doAction(obj.getAction('TnnOpenTv'),obj);});"); - - //return javascript("alert(\"not front object\")"); + return javascript("alert(\"not front object\")"); } } -//JS diff --git a/src/com/simplicite/extobjects/AIBySimplicite/AIMetricsChat.java b/src/com/simplicite/extobjects/AIBySimplicite/AIMetricsChat.java index 66cf91b..5f2621c 100644 --- a/src/com/simplicite/extobjects/AIBySimplicite/AIMetricsChat.java +++ b/src/com/simplicite/extobjects/AIBySimplicite/AIMetricsChat.java @@ -29,7 +29,6 @@ public Object display(Parameters params) { return javascript("$ui.alert("+Message.formatError("AI_MODULE_ERROR", null,null)+")"); } JSONObject swagger = AITools.getSimplifyedSwagger(moduleName, g); - AppLog.info("Module: "+moduleName+" swagger : "+swagger.toString(), g); String swaggerString = new JSONObject().put("components",new JSONObject().put("schemas",swagger.optJSONObject("components").optJSONObject("schemas"))).toString(); swaggerString = swaggerString.replace("\\", "\\\\").replace("\"", "\\\""); return javascript(getName() + ".render(ctn,'"+ModuleDB.getModuleId(moduleName)+"','"+moduleName+"','"+swaggerString+"');"); diff --git a/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java b/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java index 0fb7a93..4744ff4 100644 --- a/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java +++ b/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java @@ -66,7 +66,6 @@ public Object post(Parameters params) throws HTTPException { case "audio": String audio64 = params.getParameter("file"); String text = AITools.speechToText(audio64); - AppLog.info(params.toString(), getGrant()); return new JSONObject().put("msg",text); default: if(Tool.isEmpty(prompt) && !Tool.isEmpty(req) && req.has(PARAMS_PROMPT_KEY)){ diff --git a/src/com/simplicite/objects/AIBySimplicite/AIProvider.java b/src/com/simplicite/objects/AIBySimplicite/AIProvider.java index d5e9149..1b8e15c 100644 --- a/src/com/simplicite/objects/AIBySimplicite/AIProvider.java +++ b/src/com/simplicite/objects/AIBySimplicite/AIProvider.java @@ -90,7 +90,6 @@ public JSONObject getFieldJSON(String field,JSONObject param,String[] selectList break; default: fieldJSON.put("ClasicField", true); - AppLog.info(fieldsParam.optJSONObject(field,new JSONObject()).toString(1),null); if(fieldsParam.optJSONObject(field,new JSONObject()).optBoolean("private")){ fieldJSON.put("Type", "password"); }else{ diff --git a/src/com/simplicite/objects/AIBySimplicite/AiGroupGuiDesc.java b/src/com/simplicite/objects/AIBySimplicite/AiGroupGuiDesc.java index 3c30a0f..3a8cc9b 100644 --- a/src/com/simplicite/objects/AIBySimplicite/AiGroupGuiDesc.java +++ b/src/com/simplicite/objects/AIBySimplicite/AiGroupGuiDesc.java @@ -170,7 +170,6 @@ private JSONObject getDomainDescription(String dom,Grant g) { JSONObject item = getItemDesc(mi,g); if(!Tool.isEmpty(item))items.put(item); } - AppLog.info(menuItems.get(0).getDomainDisplay(g.getLang())+" "+items.toString(1),g); return new JSONObject().put("name",menuItems.get(0).getDomainDisplay(g.getLang())).put("items",items); } private JSONObject getItemDesc(MenuItem mi,Grant g){ @@ -202,7 +201,7 @@ private JSONObject getItemDesc(MenuItem mi,Grant g){ }else if(mi.isView()){ item.put("type","view"); }else{ - AppLog.info(mi.toJSON(g),g); + AppLog.info("Unknown type for "+mi.getObjectDisplay(g.getLang())+" "+mi.getType(),g); item.put("type","unknown"); } diff --git a/src/com/simplicite/workflows/AIBySimplicite/AIGenData.java b/src/com/simplicite/workflows/AIBySimplicite/AIGenData.java index 9c343ce..c7cbff7 100644 --- a/src/com/simplicite/workflows/AIBySimplicite/AIGenData.java +++ b/src/com/simplicite/workflows/AIBySimplicite/AIGenData.java @@ -52,7 +52,6 @@ public String callIA(Processus p, ActivityFile context, ObjectContextWeb ctx, Gr String divId = "ace_json_return"; String aceEditor ="$ui.loadScript({url: $ui.getApp().dispositionResourceURL(\"AiJsTools\", \"JS\"),onload: function(){ AiJsTools.loadResultInAceEditor($('#json_return'),'"+divId+"');}});"; String moduleId = getContext(getActivity("GGD_0100")).getDataValue("Field", "mdl_name"); - AppLog.info("moduleId : "+moduleId, getGrant()); if(Tool.isEmpty(moduleId)) return "
"+""; JSONObject response = AIData.genDataForModule(moduleId,getGrant()); if(response.has("error")) return response.getString("error"); diff --git a/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java b/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java index 23011d6..0fb9401 100644 --- a/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java +++ b/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java @@ -14,6 +14,7 @@ + /** * Process AIModuleCreate */ @@ -44,6 +45,8 @@ public class AIModuleCreate extends Processus { private static final String BEGIN_SCRIPT=""; private static final String DOMAIN="Domain"; + private static final String MODULE_NAME_FIELD="mdl_name"; + private static final String TSL_VALUE_FIELD="tsl_value"; private boolean displayPrefixWarning = false; /** @@ -404,11 +407,11 @@ public String noParam(Processus p, ActivityFile context, ObjectContextWeb ctx, G @Override public Message preValidate(ActivityFile context) { String step = context.getActivity().getStep(); + if("AIC_0050".equals(step)){ context.setDataFile("Return","Code", AITools.isAIParam()?"1":"0"); if(Boolean.TRUE.equals(AITools.AI_DEBUG_LOGS))AppLog.info(context.getDataValue("Return","Code"), getGrant()); - } - if(ACTIVITY_CREATE_MODULE.equals(step) && !displayPrefixWarning){ + }else if(ACTIVITY_CREATE_MODULE.equals(step) && !displayPrefixWarning){ Object prefix = getContext(getActivity(ACTIVITY_CREATE_MODULE)).getDataValue(FIELD, MDL_PREFIX_FIELD); ObjectDB obj = getGrant().getTmpObject("Module"); synchronized(obj.getLock()){ @@ -418,7 +421,7 @@ public Message preValidate(ActivityFile context) { if(!search.isEmpty()){ List modules = new ArrayList<>(); for(String[] el : search){ - modules.add(el[obj.getFieldIndex("mdl_name")]); + modules.add(el[obj.getFieldIndex(MODULE_NAME_FIELD)]); } Message m = new Message(); m.raiseError(Message.formatWarning("AI_WARN_PREFIX", String.join(", ",modules), MDL_PREFIX_FIELD)); @@ -429,54 +432,76 @@ public Message preValidate(ActivityFile context) { } - }else if(ACTIVITY_NEW_SCOPE.equals(step) && !context.getActivity().isUserDialog()){ - String moduleName = getContext(getActivity(ACTIVITY_CREATE_MODULE)).getDataValue(FIELD, "mdl_name"); - String moduleId = getContext(getActivity(ACTIVITY_SELECT_MODULE)).getDataValue(FIELD, ROW_ID); + } + if(!context.getActivity().isUserDialog()){ + automaticDataFile(context); + } + return super.preValidate(context); + } + private void automaticDataFile(ActivityFile context){ + String step = context.getActivity().getStep(); + switch (step) { + case ACTIVITY_NEW_SCOPE: + String moduleName = getContext(getActivity(ACTIVITY_CREATE_MODULE)).getDataValue(FIELD, MODULE_NAME_FIELD); + String moduleId = getContext(getActivity(ACTIVITY_CREATE_MODULE)).getDataValue(FIELD, ROW_ID); context.setDataFile(FIELD, "viw_name", "Scope"+moduleName); context.setDataFile(FIELD, "viw_type", "H"); context.setDataFile(FIELD, ROW_MODULE_ID_FIELD, moduleId); - - }else if(ACTIVITY_TRL_DOMAIN.equals(step) && !context.getActivity().isUserDialog()){ - automaticTrlDom(context, getGrant()); + break; + + case ACTIVITY_TRL_DOMAIN: + automaticTrlDom(context, getGrant()); + break; + + default: + break; } - return super.preValidate(context); } @Override public void postValidate(ActivityFile context) { String step = context.getActivity().getStep(); - if(ACTIVITY_CREATE_MODULE.equals(step)){ - getContext(getActivity(ACTIVITY_SELECT_MODULE)).setDataFile(FIELD,ROW_ID, context.getDataValue(FIELD, ROW_ID)); - String groupId = createGroup(context); - if(!Tool.isEmpty(groupId)){ - getContext(getActivity(ACTIVITY_SELECT_GROUP)).setDataFile(FIELD, ROW_ID, groupId); - } - String domainId = createDomain(context); - if(!Tool.isEmpty(domainId)){ - getContext(getActivity(ACTIVITY_SELECT_DOMAIN)).setDataFile(FIELD, ROW_ID, domainId); - } - grantGroupToDomain(domainId,groupId,context.getDataValue(FIELD, ROW_ID)); - displayPrefixWarning = false; - - }else if(ACTIVITY_GRANT_USER.equals(step)){ - boolean isGrantUser =true; - if(context.getActivity().isUserDialog())isGrantUser = "1".equals(context.getDataValue("Data", "AREA:1")); - if(isGrantUser){ - String groupName = getContext(getActivity(ACTIVITY_SELECT_GROUP)).getDataValue(FIELD, "grp_name"); - if(Tool.isEmpty(groupName)){ - groupName = SyntaxTool.join(SyntaxTool.UPPER, new String[]{getContext(getActivity(ACTIVITY_CREATE_MODULE)).getDataValue(FIELD,MDL_PREFIX_FIELD),"GROUP"}); + switch (step) { + case ACTIVITY_CREATE_MODULE: + getContext(getActivity(ACTIVITY_SELECT_MODULE)).setDataFile(FIELD,ROW_ID, context.getDataValue(FIELD, ROW_ID)); + String groupId = createGroup(context); + if(!Tool.isEmpty(groupId)){ + getContext(getActivity(ACTIVITY_SELECT_GROUP)).setDataFile(FIELD, ROW_ID, groupId); + } + String domainId = createDomain(context); + if(!Tool.isEmpty(domainId)){ + getContext(getActivity(ACTIVITY_SELECT_DOMAIN)).setDataFile(FIELD, ROW_ID, domainId); + } + grantGroupToDomain(domainId,groupId,context.getDataValue(FIELD, ROW_ID)); + displayPrefixWarning = false; + + break; + case ACTIVITY_GRANT_USER: + boolean isGrantUser =true; + if(context.getActivity().isUserDialog())isGrantUser = "1".equals(context.getDataValue("Data", "AREA:1")); + if(isGrantUser){ + String groupName = getContext(getActivity(ACTIVITY_SELECT_GROUP)).getDataValue(FIELD, "grp_name"); + if(Tool.isEmpty(groupName)){ + groupName = SyntaxTool.join(SyntaxTool.UPPER, new String[]{getContext(getActivity(ACTIVITY_CREATE_MODULE)).getDataValue(FIELD,MDL_PREFIX_FIELD),"GROUP"}); + } + String moduleName = getContext(getActivity(ACTIVITY_CREATE_MODULE)).getDataValue(FIELD, MODULE_NAME_FIELD); + Grant.addResponsibility(Grant.getUserId(getGrant().getLogin()),groupName,null,null,true, moduleName); + } + + break; + case ACTIVITY_TRL_DOMAIN: + saveTranslate(context); + break; + case ACTIVITY_NEW_SCOPE: + scopeGrant(context.getDataValue(FIELD, ROW_ID)); + if(!context.getActivity().isUserDialog()){ + String moduleName = getContext(getActivity(ACTIVITY_CREATE_MODULE)).getDataValue(FIELD, MODULE_NAME_FIELD); + trlScope(context.getDataValue(FIELD, ROW_ID),moduleName); } - String moduleName = getContext(getActivity(ACTIVITY_CREATE_MODULE)).getDataValue(FIELD, "mdl_name"); - Grant.addResponsibility(Grant.getUserId(getGrant().getLogin()),groupName,null,null,true, moduleName); - } - }else if(ACTIVITY_TRL_DOMAIN.equals(step)){ - saveTranslate(context); - }else if(ACTIVITY_NEW_SCOPE.equals(step)){ - scopeGrant(context.getDataValue(FIELD, ROW_ID)); - if(!context.getActivity().isUserDialog()){ - String moduleName = getContext(getActivity(ACTIVITY_CREATE_MODULE)).getDataValue(FIELD, "mdl_name"); - trlScope(context.getDataValue(FIELD, ROW_ID),moduleName); - } + break; + + default: + break; } super.postValidate(context); } @@ -490,9 +515,9 @@ private void trlScope(String scopeId,String moduleName){ for(String[] row : obj.search()){ objTool.selectForUpdate(row[obj.getRowIdFieldIndex()]); if("FRA".equals(row[obj.getFieldIndex("tsl_lang")])){ - obj.setFieldValue("tsl_value", "Vue "+moduleName); + obj.setFieldValue(TSL_VALUE_FIELD, "Vue "+moduleName); }else{ - obj.setFieldValue("tsl_value", "Scope "+moduleName); + obj.setFieldValue(TSL_VALUE_FIELD, "Scope "+moduleName); } } objTool.validateAndUpdate(); @@ -502,8 +527,8 @@ private void trlScope(String scopeId,String moduleName){ } } private void automaticTrlDom(ActivityFile af, Grant g){ - String moduleId = getContext(getActivity(ACTIVITY_SELECT_MODULE)).getDataValue(FIELD, ROW_ID); - String moduleName = getContext(getActivity(ACTIVITY_SELECT_MODULE)).getDataValue(FIELD, "mdl_name"); + String moduleId = getContext(getActivity(ACTIVITY_CREATE_MODULE)).getDataValue(FIELD, ROW_ID); + String moduleName = getContext(getActivity(ACTIVITY_CREATE_MODULE)).getDataValue(FIELD, MODULE_NAME_FIELD); String[] langCodes = g.getLangsCodes(); // Domains translations ObjectDB dom = g.getTmpObject(DOMAIN); @@ -521,7 +546,7 @@ private void automaticTrlDom(ActivityFile af, Grant g){ "where tsl_object='Domain:"+dom.getRowId()+"' and tsl_lang='"+lang+"'"); val+= " "+moduleName; String name = "tsl"+lang+dom.getRowId(); - addDynamicData(af, name, val); + af.addDataFile("Data", name,val); } } } @@ -671,7 +696,7 @@ public void saveTranslate(ActivityFile context){ if (!v.isEmpty()) { tsl.setValues(v.get(0), true); - tsl.setFieldValue("tsl_value", val); + tsl.setFieldValue(TSL_VALUE_FIELD, val); tsl.update(); } } @@ -706,4 +731,5 @@ private void scopeGrant(String scopeId){ } } + } \ No newline at end of file From 4fe70d17528c2c67202bf5b632cb948ef3b415fe Mon Sep 17 00:00:00 2001 From: "cbi (Candice Bimont)" Date: Tue, 15 Oct 2024 18:35:08 +0200 Subject: [PATCH 49/74] sonar --- AIBySimplicite-openapi-3.0.2.yml | 4 ++-- AIBySimplicite-swagger-2.0.yml | 4 ++-- AIBySimplicite.json | 2 +- module-info.json | 2 +- pom.xml | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/AIBySimplicite-openapi-3.0.2.yml b/AIBySimplicite-openapi-3.0.2.yml index 6fa04ec..8ab27d5 100644 --- a/AIBySimplicite-openapi-3.0.2.yml +++ b/AIBySimplicite-openapi-3.0.2.yml @@ -2,7 +2,7 @@ # / __(_)_ __ _ __| (_)__(_) |_ /_/ # \__ \ | ' \| '_ \ | / _| | _/ -_) # |___/_|_|_|_| .__/_|_\__|_|\__\___| -# |_| Module: AIBySimplicite 0.23 +# |_| Module: AIBySimplicite 0.24 components: schemas: Error404: @@ -1571,7 +1571,7 @@ info: email: contact@simplicitesoftware.com description: API for module AIBySimplicite title: AIBySimplicite - version: '0.23' + version: '0.24' tags: - name: AiGroupGuiDesc description: Group gui description diff --git a/AIBySimplicite-swagger-2.0.yml b/AIBySimplicite-swagger-2.0.yml index 94f5466..0391740 100644 --- a/AIBySimplicite-swagger-2.0.yml +++ b/AIBySimplicite-swagger-2.0.yml @@ -2,7 +2,7 @@ # / __(_)_ __ _ __| (_)__(_) |_ /_/ # \__ \ | ' \| '_ \ | / _| | _/ -_) # |___/_|_|_|_| .__/_|_\__|_|\__\___| -# |_| Module: AIBySimplicite 0.23 +# |_| Module: AIBySimplicite 0.24 basePath: /api paths: /rest/AiMetricsHist: @@ -1355,7 +1355,7 @@ info: email: contact@simplicitesoftware.com description: API for module AIBySimplicite title: AIBySimplicite - version: '0.23' + version: '0.24' tags: - name: AiGroupGuiDesc description: Group gui description diff --git a/AIBySimplicite.json b/AIBySimplicite.json index 5ae682c..9ea3f03 100644 --- a/AIBySimplicite.json +++ b/AIBySimplicite.json @@ -4,7 +4,7 @@ "item": { "mdl_name": "AIBySimplicite", "mdl_prefix": "ai", - "mdl_version": "0.23", + "mdl_version": "0.24", "mdl_type": "T", "mdl_icon": null, "mdl_url": "{\n \"origin\": {\"uri\": \"https://github.com/simplicitesoftware/module_ai.git\"},\n \"type\": \"git\",\n \"branch\": \"6.1\"\n}", diff --git a/module-info.json b/module-info.json index 6b5c0ca..f641444 100644 --- a/module-info.json +++ b/module-info.json @@ -4,6 +4,6 @@ "format": "json", "files": ["AIBySimplicite.json"], "repository": {"origin": {"uri": "https://github.com/simplicitesoftware/module_ai.git"}}, - "version": "0.23", + "version": "0.24", "platform": "6.1.10" } \ No newline at end of file diff --git a/pom.xml b/pom.xml index cc9af32..21829f5 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 4.0.0 com.simplicite.modules - 0.23-SNAPSHOT + 0.24-SNAPSHOT AIBySimplicite AIBySimplicite Simplicite module: AIBySimplicite @@ -19,7 +19,7 @@ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 11 simplicite-modules-AIBySimplicite AIBySimplicite - 0.23 + 0.24 src,resources AIBySimplicite.xml,AIBySimplicite.json,AIBySimplicite-*.yml,configuration/**,**.min.js,**.min.css resources/**.js,src/**.java From b43ddf0363366075ca7c68c0544efcdb3c4545e4 Mon Sep 17 00:00:00 2001 From: "designer (Designer)" <> Date: Wed, 16 Oct 2024 11:42:16 +0200 Subject: [PATCH 50/74] add shortcut to header step --- AIBySimplicite.json | 257 +++++++++++++++++- README.md | 1 + files/Model/Model-AiSettingsProcess.png | Bin 28488 -> 32758 bytes files/Model/Model-AiSettingsProcess.svg | 2 +- module-info.json | 2 +- .../AIBySimplicite/AiSettingsProcess.java | 67 +++-- 6 files changed, 296 insertions(+), 33 deletions(-) diff --git a/AIBySimplicite.json b/AIBySimplicite.json index 9ea3f03..bebe709 100644 --- a/AIBySimplicite.json +++ b/AIBySimplicite.json @@ -1355,6 +1355,55 @@ "fld_incrementsyntax": null } }, + { + "object": "Field", + "userkey": "aiAddShortCut", + "item": { + "fld_name": { + "value": "aiAddShortCut", + "oldvalue": "AIAddShortCut" + }, + "fld_dbname": null, + "fld_visible": "3", + "fld_updatable": [ + "2", + "3" + ], + "fld_required": true, + "fld_fonctid": false, + "fld_research": null, + "fld_researchreq": "0", + "fld_sort": "C", + "fld_more": false, + "fld_listmore": false, + "fld_listsum": null, + "fld_exportable": true, + "fld_tray": null, + "fld_type": "8", + "fld_type_id__flt_code": null, + "fld_list_id__lov_name": null, + "fld_copy": true, + "fld_size": 1, + "fld_minsize": null, + "fld_precision": null, + "fld_fromdate_id__fld_name": null, + "fld_dfault": "true", + "fld_indexable": false, + "fld_autocomp": "0", + "fld_groupby": false, + "fld_updall": true, + "fld_case": null, + "fld_righttoleft": false, + "fld_rendering": null, + "fld_speech": null, + "fld_calc": null, + "fld_objlist": null, + "fld_comment": null, + "fld_classification": null, + "row_module_id__mdl_name": "AIBySimplicite", + "fld_incrementsyntax": null + } + }, { "object": "Field", "userkey": "aiAigroupviewUsed", @@ -5753,7 +5802,7 @@ "acy_max_duration": null, "acy_duration_unit": null, "acy_alert_id__alt_name": null, - "acy_user_dlg": false, + "acy_user_dlg": true, "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -5772,7 +5821,7 @@ "acy_max_duration": null, "acy_duration_unit": null, "acy_alert_id__alt_name": null, - "acy_user_dlg": false, + "acy_user_dlg": true, "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -5791,7 +5840,7 @@ "acy_max_duration": null, "acy_duration_unit": null, "acy_alert_id__alt_name": null, - "acy_user_dlg": false, + "acy_user_dlg": true, "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -6080,6 +6129,25 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, + { + "object": "BPMActivity", + "userkey": "AiSettingsProcess ASP-0500", + "item": { + "acy_process_id__pcs_name": "AiSettingsProcess", + "acy_step": "ASP-0500", + "acy_name": "AddShortCut", + "acy_comment": null, + "acy_type": "I", + "acy_posx": null, + "acy_posy": null, + "acy_reversible": "N", + "acy_max_duration": null, + "acy_duration_unit": null, + "acy_alert_id__alt_name": null, + "acy_user_dlg": true, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "BPMActivity", "userkey": "AiSettingsProcess ASP-BEG", @@ -6655,12 +6723,29 @@ }, { "object": "BPMTransition", - "userkey": "AiSettingsProcess AiSettingsProcess ASP-0400 AiSettingsProcess ASP-END", + "userkey": "AiSettingsProcess AiSettingsProcess ASP-0400 AiSettingsProcess ASP-0500", "item": { "trs_process_id__pcs_name": "AiSettingsProcess", "trs_from_id__acy_process_id__pcs_name": "AiSettingsProcess", "trs_from_id__acy_step": "ASP-0400", "trs_to_id__acy_process_id__pcs_name": "AiSettingsProcess", + "trs_to_id__acy_step": "ASP-0500", + "trs_name": null, + "trs_action_id__act_name": null, + "trs_condition": null, + "trs_callback": null, + "trs_alert_id__alt_name": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "BPMTransition", + "userkey": "AiSettingsProcess AiSettingsProcess ASP-0500 AiSettingsProcess ASP-END", + "item": { + "trs_process_id__pcs_name": "AiSettingsProcess", + "trs_from_id__acy_process_id__pcs_name": "AiSettingsProcess", + "trs_from_id__acy_step": "ASP-0500", + "trs_to_id__acy_process_id__pcs_name": "AiSettingsProcess", "trs_to_id__acy_step": "ASP-END", "trs_name": null, "trs_action_id__act_name": null, @@ -7493,6 +7578,34 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, + { + "object": "BPMData", + "userkey": "AiSettingsProcess ASP-0500 Data AREA:1", + "item": { + "dta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", + "dta_activity_id__acy_step": "ASP-0500", + "dta_group": "Data", + "dta_name": "AREA:1", + "dta_order": 1, + "dta_value": "1", + "dta_field_id__fld_name": "aiAddShortCut", + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "BPMData", + "userkey": "AiSettingsProcess ASP-0500 Data Template", + "item": { + "dta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", + "dta_activity_id__acy_step": "ASP-0500", + "dta_group": "Data", + "dta_name": "Template", + "dta_order": 1, + "dta_value": "Base", + "dta_field_id__fld_name": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "BPMData", "userkey": "AiSettingsProcess ASP-END Forward Page", @@ -7538,6 +7651,30 @@ "hlp_content": "

Exprimez votre besoin de la manière la plus concise possible<\/p>", "row_module_id__mdl_name": "AIBySimplicite" } + }, + { + "object": "BPMHelp", + "userkey": "AiSettingsProcess ASP-0500 French", + "item": { + "hlp_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", + "hlp_activity_id__acy_step": "ASP-0500", + "hlp_lang": "FRA", + "hlp_abstract": "

Veuillez vider le cache pour que cette modification prenne effet.<\/p>", + "hlp_content": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "BPMHelp", + "userkey": "AiSettingsProcess ASP-0500 English", + "item": { + "hlp_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", + "hlp_activity_id__acy_step": "ASP-0500", + "hlp_lang": "ENU", + "hlp_abstract": "

Please clear the cache for this change to take effect.<\/p>", + "hlp_content": null, + "row_module_id__mdl_name": "AIBySimplicite" + } } ] }, @@ -7832,6 +7969,21 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, + { + "object": "BPMGrantActivity", + "userkey": "AI_ADMIN AiSettingsProcess ASP-0500", + "item": { + "gta_group_id__grp_name": "AI_ADMIN", + "gta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", + "gta_activity_id__acy_step": "ASP-0500", + "gta_grant": [ + "R", + "W", + "C" + ], + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "BPMGrantActivity", "userkey": "AI_DESIGNER AIGenData GDD_END2", @@ -8156,6 +8308,21 @@ ], "row_module_id__mdl_name": "AIBySimplicite" } + }, + { + "object": "BPMGrantActivity", + "userkey": "AI_DESIGNER AiSettingsProcess ASP-0500", + "item": { + "gta_group_id__grp_name": "AI_DESIGNER", + "gta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", + "gta_activity_id__acy_step": "ASP-0500", + "gta_grant": [ + "R", + "W", + "C" + ], + "row_module_id__mdl_name": "AIBySimplicite" + } } ] }, @@ -10985,6 +11152,50 @@ "tsl_tooltip": null, "row_module_id__mdl_name": "AIBySimplicite" } + }, + { + "object": "TranslateField", + "userkey": "aiAddShortCut English", + "item": { + "tsl_object": { + "item": {"fld_name": "aiAddShortCut"}, + "icon": "img/system/field", + "label": "Field", + "userkeylabel": "aiAddShortCut", + "object": "Field" + }, + "tsl_lang": "ENU", + "tsl_value": "Add the chatbot to your header ?", + "tsl_simplehelp": null, + "tsl_plural_value": null, + "tsl_short_value": null, + "tsl_placeholder": null, + "tsl_listhelp": null, + "tsl_tooltip": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "TranslateField", + "userkey": "aiAddShortCut French", + "item": { + "tsl_object": { + "item": {"fld_name": "aiAddShortCut"}, + "icon": "img/system/field", + "label": "Field", + "userkeylabel": "aiAddShortCut", + "object": "Field" + }, + "tsl_lang": "FRA", + "tsl_value": "Ajoutez le chatbot à votre en-tête ?", + "tsl_simplehelp": null, + "tsl_plural_value": null, + "tsl_short_value": null, + "tsl_placeholder": null, + "tsl_listhelp": null, + "tsl_tooltip": null, + "row_module_id__mdl_name": "AIBySimplicite" + } } ] }, @@ -13275,6 +13486,44 @@ "tsl_value": "Authentification", "row_module_id__mdl_name": "AIBySimplicite" } + }, + { + "object": "TranslateActivity", + "userkey": "AiSettingsProcess ASP-0500 English", + "item": { + "tsl_object": { + "item": { + "acy_process_id__pcs_name": "AiSettingsProcess", + "acy_step": "ASP-0500" + }, + "icon": "img/system/activity", + "label": "Activity", + "userkeylabel": "AiSettingsProcess ASP-0500", + "object": "BPMActivity" + }, + "tsl_lang": "ENU", + "tsl_value": "Add the chatbot to your header ?", + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "TranslateActivity", + "userkey": "AiSettingsProcess ASP-0500 French", + "item": { + "tsl_object": { + "item": { + "acy_process_id__pcs_name": "AiSettingsProcess", + "acy_step": "ASP-0500" + }, + "icon": "img/system/activity", + "label": "Activity", + "userkeylabel": "AiSettingsProcess ASP-0500", + "object": "BPMActivity" + }, + "tsl_lang": "FRA", + "tsl_value": "Ajoutez le chatbot à votre en-tête ?", + "row_module_id__mdl_name": "AIBySimplicite" + } } ] }, diff --git a/README.md b/README.md index ee35f63..f23af56 100644 --- a/README.md +++ b/README.md @@ -232,6 +232,7 @@ Auomatic model generation process * `SelectProvider`: * `Auth`: * `OtherParam`: +* `AddShortCut`: * `Begin`: * `End`: diff --git a/files/Model/Model-AiSettingsProcess.png b/files/Model/Model-AiSettingsProcess.png index a4bc4fff92aee7288a545561568c22560e6b4661..2ee023b28ce61252ff8c20ea085400e485c471bc 100644 GIT binary patch literal 32758 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 TI#>mt#zRw<*O04_u?+q{RFoVv diff --git a/files/Model/Model-AiSettingsProcess.svg b/files/Model/Model-AiSettingsProcess.svg index 2029916..1658d04 100644 --- a/files/Model/Model-AiSettingsProcess.svg +++ b/files/Model/Model-AiSettingsProcess.svg @@ -1 +1 @@ -(0)(1)SelectProviderAuthOtherParamBeginEndisGlobalParamGlobal \ No newline at end of file +(0)(1)SelectProviderAuthOtherParamBeginEndisGlobalParamGlobalAddShortCut \ No newline at end of file diff --git a/module-info.json b/module-info.json index f641444..5e916c5 100644 --- a/module-info.json +++ b/module-info.json @@ -1,5 +1,5 @@ { - "date": "2024-10-15 18:33:07", + "date": "2024-10-16 11:40:59", "name": "AIBySimplicite", "format": "json", "files": ["AIBySimplicite.json"], diff --git a/src/com/simplicite/workflows/AIBySimplicite/AiSettingsProcess.java b/src/com/simplicite/workflows/AIBySimplicite/AiSettingsProcess.java index f70288c..e64bcab 100644 --- a/src/com/simplicite/workflows/AIBySimplicite/AiSettingsProcess.java +++ b/src/com/simplicite/workflows/AIBySimplicite/AiSettingsProcess.java @@ -10,6 +10,7 @@ import com.simplicite.commons.AIBySimplicite.AITools; import com.simplicite.util.*; import com.simplicite.util.exceptions.*; +import com.simplicite.util.tools.BusinessObjectTool; import com.simplicite.webapp.ObjectContextWeb; /** @@ -143,36 +144,48 @@ public Message preValidate(ActivityFile context) { @Override public void postValidate(ActivityFile context) { - if(PARAM_ACT.equals(context.getActivity().getStep())){ - ObjectDB obj = getGrant().getTmpObject(PROVIDER_OBJECT); - JSONObject param = new JSONObject(); - synchronized(obj.getLock()){ - String providerid = getContext(getActivity(PROVIDER_ACT)).getDataValue(FIELD_DATA, ROW_ID); - obj.select(providerid); - - JSONObject defaultParam = new JSONObject(getGrant().T(AI_DEFAULT_PARAM)); - JSONObject sepParam = new JSONObject(obj.getFieldValue("aiPrvDataModel")); - - for(String k : defaultParam.keySet()){ + String step = context.getActivity().getStep(); + Grant g = getGrant(); + switch (step) { + case PARAM_ACT: + ObjectDB obj = g.getTmpObject(PROVIDER_OBJECT); + JSONObject param = new JSONObject(); + synchronized(obj.getLock()){ + String providerid = getContext(getActivity(PROVIDER_ACT)).getDataValue(FIELD_DATA, ROW_ID); + obj.select(providerid); - String val = context.getDataValue("Data", k); - param.put(k, "showDataDisclaimer".equals(k)?("1".equals(val)):val); - } - for(String k : sepParam.keySet()){ - String val = context.getDataValue("Data", k); - param.put(k, val); + JSONObject defaultParam = new JSONObject(g.T(AI_DEFAULT_PARAM)); + JSONObject sepParam = new JSONObject(obj.getFieldValue("aiPrvDataModel")); + + for(String k : defaultParam.keySet()){ + + String val = context.getDataValue("Data", k); + param.put(k, "showDataDisclaimer".equals(k)?("1".equals(val)):val); + } + for(String k : sepParam.keySet()){ + String val = context.getDataValue("Data", k); + param.put(k, val); + } } - } - param.put("ping_url",getContext(getActivity(AUTH_ACT)).getDataValue("Data","aiPrvPingUrl")); - param.put("stt_url",getContext(getActivity(AUTH_ACT)).getDataValue("Data",STT_URL_FLD)); - String url = getContext(getActivity(AUTH_ACT)).getDataValue("Data", COMPLETION_URL_FLD); - param.put("completion_url",url); - String key = getContext(getActivity(AUTH_ACT)).getDataValue("Data", "key"); - param.put("api_key", key); - AITools.setParameters(param); - - + param.put("ping_url",getContext(getActivity(AUTH_ACT)).getDataValue("Data","aiPrvPingUrl")); + param.put("stt_url",getContext(getActivity(AUTH_ACT)).getDataValue("Data",STT_URL_FLD)); + String url = getContext(getActivity(AUTH_ACT)).getDataValue("Data", COMPLETION_URL_FLD); + param.put("completion_url",url); + String key = getContext(getActivity(AUTH_ACT)).getDataValue("Data", "key"); + param.put("api_key", key); + AITools.setParameters(param); + break; + case "ASP-0500": + if(!"1".equals(context.getDataValue("Data", "AREA:1"))) break; + String value = g.getUserSystemParam("SHORTCUT_PREFS"); + JSONObject paramObj = Tool.isEmpty(value)?new JSONObject():new JSONObject(value); + paramObj.put("AIBot",paramObj.optJSONObject("AIBot",new JSONObject()).put("header", true)); + g.setUserSystemParam("SHORTCUT_PREFS", paramObj.toString(), true); + break; + default: + break; } + super.postValidate(context); } From 56292bf1a494c74e7ffa8989137b7946ad47e3df Mon Sep 17 00:00:00 2001 From: "designer (Designer)" <> Date: Wed, 16 Oct 2024 11:44:33 +0200 Subject: [PATCH 51/74] fix --- AIBySimplicite.json | 59 +++++++++++++++++++++++++++++++++++++++++++++ module-info.json | 2 +- 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/AIBySimplicite.json b/AIBySimplicite.json index bebe709..856bb98 100644 --- a/AIBySimplicite.json +++ b/AIBySimplicite.json @@ -4233,6 +4233,41 @@ "obf_joined_id__obf_field_id__fld_name": null, "obf_joined_id__obf_order": null } + }, + { + "object": "ObjectFieldSystem", + "userkey": "Group aiGroupGuiVirtual 1", + "item": { + "obf_object_id__obo_name": "Group", + "obf_field_id__fld_name": "aiGroupGuiVirtual", + "obf_order": 1, + "obf_group_by": null, + "obf_dfault_order": null, + "obf_input": null, + "obf_ref_field_id__fld_name": null, + "obf_ref_object_id__obo_name": "AiGroupGuiDesc", + "obf_cascad": "Z", + "obf_card": "0,n", + "obf_visible": true, + "obf_ref_export": true, + "obf_copy": false, + "obf_ref_order": null, + "obf_fld_visible": "1", + "obf_fld_required": null, + "obf_fld_updatable": ["0"], + "obf_fld_research": null, + "obf_fld_more": null, + "obf_fld_listmore": null, + "obf_fld_researchreq": null, + "obf_fld_dfault": null, + "obf_fld_exportable": null, + "obf_fld_uk": null, + "obf_area_id__ofa_name": null, + "row_module_id__mdl_name": "AIBySimplicite", + "obf_joined_id__obf_object_id__obo_name": null, + "obf_joined_id__obf_field_id__fld_name": null, + "obf_joined_id__obf_order": null + } } ] }, @@ -4266,6 +4301,30 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, + { + "object": "Link", + "userkey": "1 Group aiGroupGuiVirtual", + "item": { + "obf_ref_object_id__obo_name": "AiGroupGuiDesc", + "obf_order": 1, + "obf_ref_order": null, + "obf_object_id__obj_name": "Group", + "obf_field_id__fld_name": "aiGroupGuiVirtual", + "obf_cascad": "Z", + "obf_card": "0,n", + "obf_query": "t.row_id in (select v.vig_group_id from m_view_group v join ai_group_gui_desc d on d.ai_ggd_viewhome_id = v.vig_view_id where d.row_id = [row_id] ) \nOR t.row_id in (select g.row_id FROM m_group g JOIN ai_group_gui_desc d ON d.ai_ggd_viewhome_id=g.grp_home_id WHERE d.row_id = [row_id] )", + "obf_filters": null, + "obf_visible": true, + "obf_ref_export": true, + "obf_copy": false, + "obf_associate": null, + "obf_inline": false, + "obf_rendering": null, + "obf_treedepth": null, + "obf_area_id__ofa_name": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "Link", "userkey": "200 AiGroupView aiGroupId", diff --git a/module-info.json b/module-info.json index 5e916c5..c929a0e 100644 --- a/module-info.json +++ b/module-info.json @@ -1,5 +1,5 @@ { - "date": "2024-10-16 11:40:59", + "date": "2024-10-16 11:44:15", "name": "AIBySimplicite", "format": "json", "files": ["AIBySimplicite.json"], From c1487d627c54809b7e618751cf5706d046484f39 Mon Sep 17 00:00:00 2001 From: "designer (Designer)" <> Date: Wed, 16 Oct 2024 15:02:29 +0200 Subject: [PATCH 52/74] new dataset and fix --- AIBySimplicite-openapi-3.0.2.yml | 4 +-- AIBySimplicite-swagger-2.0.yml | 4 +-- AIBySimplicite.json | 34 ++++++++++++------ data/AIBySimplicite-data-20241016140316.zip | Bin 0 -> 1413 bytes ...lAI_Povider.xml => MistralAI_Provider.xml} | 4 ++- data/OpenAI_Provider.xml | 1 + module-info.json | 2 +- .../objects/AIBySimplicite/AIProvider.java | 27 +++++++++++--- 8 files changed, 55 insertions(+), 21 deletions(-) create mode 100644 data/AIBySimplicite-data-20241016140316.zip rename data/{MistralAI_Povider.xml => MistralAI_Provider.xml} (95%) diff --git a/AIBySimplicite-openapi-3.0.2.yml b/AIBySimplicite-openapi-3.0.2.yml index 8ab27d5..75053a9 100644 --- a/AIBySimplicite-openapi-3.0.2.yml +++ b/AIBySimplicite-openapi-3.0.2.yml @@ -172,7 +172,7 @@ components: description: Default url type: string aiPrvSttUrl: - description: Speech to text endpoint url + description: Speech to text url type: string aiPrvPingUrl: description: Ping url @@ -1557,7 +1557,7 @@ paths: type: string in: query name: aiPrvSttUrl - description: Search filter for Speech to text endpoint url + description: Search filter for Speech to text url required: false tags: - AIProvider diff --git a/AIBySimplicite-swagger-2.0.yml b/AIBySimplicite-swagger-2.0.yml index 0391740..8b6c711 100644 --- a/AIBySimplicite-swagger-2.0.yml +++ b/AIBySimplicite-swagger-2.0.yml @@ -1095,7 +1095,7 @@ paths: required: false - in: query name: aiPrvSttUrl - description: Search filter for Speech to text endpoint url + description: Search filter for Speech to text url type: string required: false tags: @@ -1275,7 +1275,7 @@ definitions: description: Default url type: string aiPrvSttUrl: - description: Speech to text endpoint url + description: Speech to text url type: string aiPrvPingUrl: description: Ping url diff --git a/AIBySimplicite.json b/AIBySimplicite.json index 856bb98..98d3483 100644 --- a/AIBySimplicite.json +++ b/AIBySimplicite.json @@ -2072,7 +2072,7 @@ "fld_minsize": null, "fld_precision": null, "fld_fromdate_id__fld_name": null, - "fld_dfault": "[VALUE:aiPrvDefaultUrl]+\"v1/chat/completions\"", + "fld_dfault": null, "fld_indexable": false, "fld_autocomp": "0", "fld_groupby": false, @@ -2256,7 +2256,7 @@ "fld_minsize": null, "fld_precision": null, "fld_fromdate_id__fld_name": null, - "fld_dfault": "[VALUE:aiPrvDefaultUrl]+\"v1/models\"", + "fld_dfault": null, "fld_indexable": false, "fld_autocomp": "0", "fld_groupby": false, @@ -2302,7 +2302,7 @@ "fld_minsize": null, "fld_precision": null, "fld_fromdate_id__fld_name": null, - "fld_dfault": "[VALUE:aiPrvDefaultUrl]+\"v1/ping\"", + "fld_dfault": null, "fld_indexable": false, "fld_autocomp": "0", "fld_groupby": false, @@ -2391,7 +2391,7 @@ "fld_minsize": null, "fld_precision": null, "fld_fromdate_id__fld_name": null, - "fld_dfault": "[VALUE:aiPrvDefaultUrl]+\"v1/audio/transcriptions\"", + "fld_dfault": null, "fld_indexable": false, "fld_autocomp": "0", "fld_groupby": false, @@ -11180,7 +11180,7 @@ "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Speech to text endpoint url", + "tsl_value": "Speech to text url", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11202,7 +11202,7 @@ "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Prv stt url", + "tsl_value": "URL de la synthèse vocale", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -13698,14 +13698,28 @@ "list": [ { "object": "Dataset", - "userkey": "AIBySimplicite MistralAI_Povider", + "userkey": "AIBySimplicite AIBySimplicite-data-20241016140316", + "item": { + "row_module_id__mdl_name": "AIBySimplicite", + "dt_name": "AIBySimplicite-data-20241016140316", + "dt_file": { + "path": "data/AIBySimplicite-data-20241016140316.zip", + "mime": "application/zip", + "name": "AIBySimplicite-data-20241016140316.zip" + }, + "dt_desc": "Created by module's data export on 2024-10-16 14:03:16" + } + }, + { + "object": "Dataset", + "userkey": "AIBySimplicite MistralAI_Provider", "item": { "row_module_id__mdl_name": "AIBySimplicite", - "dt_name": "MistralAI_Povider", + "dt_name": "MistralAI_Provider", "dt_file": { - "path": "data/MistralAI_Povider.xml", + "path": "data/MistralAI_Provider.xml", "mime": "text/xml", - "name": "MistralAI_Povider.xml" + "name": "MistralAI_Provider.xml" }, "dt_desc": "Mistral AI_ provider default parameters" } diff --git a/data/AIBySimplicite-data-20241016140316.zip b/data/AIBySimplicite-data-20241016140316.zip new file mode 100644 index 0000000000000000000000000000000000000000..59fa934107d0a9cb30aa900fd3a90fde6e220342 GIT binary patch literal 1413 zcmZ{kc{~#g7{}*om@9;dSM*A}3#GiS9Lw1xk#~;0TFEgsM?>zE8QRi?z025W6UB0` ziB?Evj^y|_UN^a~i7?e$f4#kbyx-@K=lA%Rgj+@)M}q~yND(4qkZ6p#ck&?K z#2Ph^#uhkv&?zx?Uj-|UXLHmH!muDk!PS&{(rmu@Xr4Z&UU)93qPer&NR_G-plt*( zJ8h{{^3cA=j_d*@+PzwE7C2F{ZZ3jj@2sr4R@=100x(LFi~J!Q%=<)r()Ua zGW)bh+!L)jP?;gg>6zxMt^7+X-teyjmO;UrQ^-&`HMFt*)q?QieJ<1eIA!f%*o+8 zUsqyEChY6PN(ZC7k@z8}0<`?z-4BXoWrl-uI}M&(cDSctRuEDLBv?Ah#_2@wLYxhW zGMPq~mE8~DhOFN#Xt~t^dLJXwZPE$`oeB690t8h+-QNA8(um!T$36Uo|9 zx$#1#o`U)7UT%2IB2o_$Krt4=vZ2zkHf{P>O#Sg&j?M2XSr5RxT>SkzlJ-5uCGTG$VNlvH>xSe-Jc;>q)r z*L%R*Q|qZj3N-vzV3dqR!e1jd~-P+IA=OG;;Z60TEM@jR#Dssn>4+dle;V zUK`3a7K^6Mh2|Ovzn6h&vR@niSCbP=)9ogKnXtA2^Mdh0{NlSppu0+}P zwTzF143>rJXFpY)Jk923;SDr!N7}>A)Ep{Ibe_8H{Gn$mVOLMW_ywW-4vwlqhl+Td zX*oxGT2xCJk!sLHw7h&u885CI&Wd2-4pVsn$x7}6?$rzC(oxrLCOCUG1?(@U72NBDG!!p~eVME86@jhG3(!{1y@uc|sMMb^LQI;&H zYG&6|FwNXs#ZZZ+91g67Ac&v7{?gKN75foYdZVw4Y>Ydd$lZGmpNmUL>Wpr;^{svM zrCE{5bP zoseZty-M1Yb%g=Nk9?VhO^E^kF$w^HD@;gO5%8}nf4==t<$w7AIProvider upsert - Mistral AI_ + Mistral AI + + diff --git a/data/OpenAI_Provider.xml b/data/OpenAI_Provider.xml index d5b0dc7..61d4327 100644 --- a/data/OpenAI_Provider.xml +++ b/data/OpenAI_Provider.xml @@ -62,6 +62,7 @@ For standard deployments, use the following endpoints: - **Set Limits for Projects:** Define usage limits and quotas for each project or application using the API to prevent unexpected usage spikes and ensure budget control.]]> + diff --git a/module-info.json b/module-info.json index c929a0e..51dd8b4 100644 --- a/module-info.json +++ b/module-info.json @@ -1,5 +1,5 @@ { - "date": "2024-10-16 11:44:15", + "date": "2024-10-16 15:01:23", "name": "AIBySimplicite", "format": "json", "files": ["AIBySimplicite.json"], diff --git a/src/com/simplicite/objects/AIBySimplicite/AIProvider.java b/src/com/simplicite/objects/AIBySimplicite/AIProvider.java index 1b8e15c..056f7ac 100644 --- a/src/com/simplicite/objects/AIBySimplicite/AIProvider.java +++ b/src/com/simplicite/objects/AIBySimplicite/AIProvider.java @@ -17,16 +17,21 @@ */ public class AIProvider extends ObjectDB { private static final long serialVersionUID = 1L; + private static final String MODELS_ENDPOINT = "aiPrvModelsUrl"; + private static final String COMPLETION_ENDPOINT = "aiPrvCompletionUrl"; + private static final String PING_ENDPOINT = "aiPrvPingUrl"; + private static final String STT_ENDPOINT = "aiPrvSttUrl"; + private static final Map DEFAULT_EDNPOINT = Map.of(MODELS_ENDPOINT, "v1/models", COMPLETION_ENDPOINT, "v1/chat/completions", PING_ENDPOINT, "v1/ping", STT_ENDPOINT, "v1/audio/transcriptions"); private JSONObject getDefaultFields(){ return new JSONObject(getGrant().T("AI_DEFAULT_PARAM")); } public String getConfigurationPage(){ JSONObject datas = new JSONObject(); datas.put("fields", new JSONArray() - .put(getUrlJSON("aiPrvPingUrl",false)) - .put(getUrlJSON("aiPrvCompletionUrl",true)) - .put(getUrlJSON("aiPrvModelsUrl",true)) - .put(getUrlJSON("aiPrvSttUrl", false)) + .put(getUrlJSON(PING_ENDPOINT,false)) + .put(getUrlJSON(COMPLETION_ENDPOINT,true)) + .put(getUrlJSON(MODELS_ENDPOINT,true)) + .put(getUrlJSON(STT_ENDPOINT, false)) ); datas.put("help",MarkdownTool.toHTML(getFieldValue("aiPrvHelp"))); String html = HTMLTool.getResourceHTMLContent(this,"AISettingsKeyAndEPTemplate"); @@ -107,7 +112,19 @@ private String optHelp(String key,JSONObject fieldsParam){ return MarkdownTool.toHTML(help).replaceAll(" preValidate() { + if(!"0".equals(getRowId()) || isBatchInstance()) return super.preValidate(); + String defaultUrl = getFieldValue("aiPrvDefaultUrl"); + for (Map.Entry entry : DEFAULT_EDNPOINT.entrySet()) { + String key = entry.getKey(); + if(Tool.isEmpty(getFieldValue(key))){ + setFieldValue(entry.getKey(), defaultUrl + entry.getValue()); + } + } + return super.preValidate(); + } } \ No newline at end of file From a8216024de1c0f4f09f5bd8269859c3fe258560b Mon Sep 17 00:00:00 2001 From: "cbi (Candice Bimont)" Date: Mon, 21 Oct 2024 10:49:34 +0200 Subject: [PATCH 53/74] workflow style --- AIBySimplicite.json | 4 +- module-info.json | 4 +- .../ObjectExternal/AIMetricsChat/HTML.html | 4 +- .../ObjectExternal/AIMetricsChat/SCRIPT.js | 40 +++++++++++++++---- .../AIProcessResource/AI_GEN_MODEL.js | 15 ++++++- .../AIProcessResource/CHAT_BOT_SCRIPT.js | 10 +++-- .../AIBySimplicite/AIModuleCreate.java | 2 +- 7 files changed, 59 insertions(+), 20 deletions(-) diff --git a/AIBySimplicite.json b/AIBySimplicite.json index 98d3483..25d06de 100644 --- a/AIBySimplicite.json +++ b/AIBySimplicite.json @@ -4774,7 +4774,7 @@ "act_count": null, "act_order": null, "act_color": null, - "act_color_bg": null, + "act_color_bg": "#3a77bb", "act_image": null, "act_group_id__acg_name": null, "act_queue_id__acq_name": null @@ -4866,7 +4866,7 @@ { "object": "ActionField", "label": "Action field", - "icon": "object", + "icon": "img/system/object_field", "field": "row_module_id", "list": [ { diff --git a/module-info.json b/module-info.json index 51dd8b4..6d70834 100644 --- a/module-info.json +++ b/module-info.json @@ -1,9 +1,9 @@ { - "date": "2024-10-16 15:01:23", + "date": "2024-10-21 10:20:33", "name": "AIBySimplicite", "format": "json", "files": ["AIBySimplicite.json"], "repository": {"origin": {"uri": "https://github.com/simplicitesoftware/module_ai.git"}}, "version": "0.24", - "platform": "6.1.10" + "platform": "6.1.11" } \ No newline at end of file diff --git a/resources/ObjectExternal/AIMetricsChat/HTML.html b/resources/ObjectExternal/AIMetricsChat/HTML.html index f0d131f..7c75120 100644 --- a/resources/ObjectExternal/AIMetricsChat/HTML.html +++ b/resources/ObjectExternal/AIMetricsChat/HTML.html @@ -4,10 +4,10 @@

- +
- +
diff --git a/resources/ObjectExternal/AIMetricsChat/SCRIPT.js b/resources/ObjectExternal/AIMetricsChat/SCRIPT.js index 0c7be87..2ae0b7e 100644 --- a/resources/ObjectExternal/AIMetricsChat/SCRIPT.js +++ b/resources/ObjectExternal/AIMetricsChat/SCRIPT.js @@ -18,6 +18,7 @@ var AIMetricsChat = AIMetricsChat || (function() { defaultSchemaDiv.className = "ai-default-schema-content"; defaultSchemaDiv.appendChild(defaultSchema); let buttons = {}; + let hasbeenShown = false; function render(params,id,module,s) { let ctn = params[0]; let printicon = document.createElement('i'); @@ -116,19 +117,27 @@ var AIMetricsChat = AIMetricsChat || (function() { } function setShowWarn(ctn){ - $(ctn).find(".chat-icon-button").each(function(but){ - buttons[but.id] = but.onclick; - but.onclick = function() { showWarn($(ctn).find('.chat-button'));}; + ctn.querySelectorAll('.chat-icon-button').forEach(button => { + buttons[button.id] = button.onclick; + button.onclick = function(){ + showWarn(); + }; }); - $('#metrics_user_text').click(function() { showWarn($(ctn).find('.chat-button'));}); + + $("#metrics_send_button").click(function() { AIMetricsChat.showWarn()}); + $('#metrics_user_text').click(function() { showWarn();}); } - function showWarn(ctn){ + function showWarn(){ + console.log("showwarn") app.getTexts(function(textes){ $ui.alert(app.getText(textes?.AI_GRAPH_DISCLAIMER, false)); $('#metrics_user_text').unbind('click'); - ctn.onclick = function() { sendMetricsMessage();}; - $('.chat-icon-button').each(function(but){ - but.onclick = buttons[but.id]; + $('#metrics_send_button').unbind('click'); + $("#metrics_send_button").click(function() { sendMetricsMessage();}); + + document.getElementById("aimetricschat").querySelectorAll('.chat-icon-button').forEach(button => { + button.onclick = buttons[button.id]; + console.log(button,button.onclick); }); }); } @@ -241,6 +250,21 @@ var AIMetricsChat = AIMetricsChat || (function() { },filters); }); + let purgeButton = document.createElement('button'); + purgeButton.className = "btn btn-secondary"; + purgeButton.textContent = "Purge History"; + purgeButton.onclick = function() { + $ui.confirm({ + content: "Are you sure you want to purge the history?", + onOk: function() { + for(const item of histList.children){ + let id = item.id.split("_")[1]; + deleteObj(id); + } + } + }); + }; + histList.parentNode.appendChild(purgeButton); } function addHist(res,histList){ diff --git a/resources/ObjectExternal/AIProcessResource/AI_GEN_MODEL.js b/resources/ObjectExternal/AIProcessResource/AI_GEN_MODEL.js index 17a62c4..52f529a 100644 --- a/resources/ObjectExternal/AIProcessResource/AI_GEN_MODEL.js +++ b/resources/ObjectExternal/AIProcessResource/AI_GEN_MODEL.js @@ -3,6 +3,17 @@ var aiGenModel = aiGenModel || (function() { const data = app.getBusinessProcess("AIModuleCreate").activity.data.Data; const moduleID = data.moduleId.values[0]; function AINewModel() { + let deletebutton = $(".btn[data-action='AIDeleteModule']"); + let nextbutton = $(".btn[data-action='validate']"); + deletebutton.removeClass("btn-action"); + deletebutton.addClass("btn-secondary"); + let parentDiv = $(".btn[data-action='AIDeleteModule']").parent(); + parentDiv.css("flex-direction", "row-reverse"); + deletebutton.css("border-top-right-radius", "0px"); + deletebutton.css("border-bottom-right-radius", "0px"); + nextbutton.css("border-top-right-radius", ".25rem"); + nextbutton.css("border-bottom-right-radius", ".25rem"); + let idsData = data.allIds; let ids = null; if (idsData != null){ @@ -35,7 +46,7 @@ var aiGenModel = aiGenModel || (function() { { row_module_id: moduleID, }, - null) + null); } @@ -139,7 +150,7 @@ var aiGenModel = aiGenModel || (function() { popup: false }); },true); - } + }; } function construcNodesList(ids){ let list = []; diff --git a/resources/ObjectExternal/AIProcessResource/CHAT_BOT_SCRIPT.js b/resources/ObjectExternal/AIProcessResource/CHAT_BOT_SCRIPT.js index d58a360..d8739b4 100644 --- a/resources/ObjectExternal/AIProcessResource/CHAT_BOT_SCRIPT.js +++ b/resources/ObjectExternal/AIProcessResource/CHAT_BOT_SCRIPT.js @@ -22,7 +22,11 @@ var AIWfChatBot = AIWfChatBot || (function() { } function render() { console.log("render"); - $('.btn-action[data-action="AIGenerate"]').attr("disabled", "disabled"); + let actionBtn = $('.btn[data-action="AIGenerate"]'); + actionBtn.attr("disabled", "disabled"); + actionBtn.removeClass("btn-action"); + actionBtn.addClass("btn-primary"); + let ctn = document.getElementById('AIchatbotProcess'); $(".btn-validate").remove(); $(window).resize(function() { @@ -94,8 +98,8 @@ var AIWfChatBot = AIWfChatBot || (function() { // Faites défiler vers le bas pour afficher les messages les plus récents chatMessages.scrollTop = chatMessages.scrollHeight; + $('.btn[data-action="AIGenerate"]').attr("disabled", "disabled"); // Call Webservice (POST requests only) - $('.btn-action[data-action="AIGenerate"]').attr("disabled", "disabled"); app._call(useAsync, url, postParams, function callback(botResponse){ let text ={}; text.role = "user"; @@ -122,7 +126,7 @@ var AIWfChatBot = AIWfChatBot || (function() { } $("#AI_data").html(JSON.stringify(historic)); $("#send-button").removeAttr("disabled"); - $('.btn-action[data-action="AIGenerate"]').removeAttr('disabled', true); + $('.btn[data-action="AIGenerate"]').removeAttr('disabled', true); chatMessages.scrollTop = chatMessages.scrollHeight; }); diff --git a/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java b/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java index 0fb9401..e1dcf4a 100644 --- a/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java +++ b/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java @@ -432,7 +432,7 @@ public Message preValidate(ActivityFile context) { } - } + } if(!context.getActivity().isUserDialog()){ automaticDataFile(context); } From 27453eb7394f7f0471b3dda28d3e1d48ca768cc0 Mon Sep 17 00:00:00 2001 From: "cbi (Candice Bimont)" Date: Mon, 21 Oct 2024 10:54:56 +0200 Subject: [PATCH 54/74] fix From 70a31baf0e388ee215ad4be8f181105c66775c50 Mon Sep 17 00:00:00 2001 From: "cbi (Candice Bimont)" Date: Mon, 21 Oct 2024 13:53:45 +0200 Subject: [PATCH 55/74] fix sonar --- AIBySimplicite-openapi-3.0.2.yml | 4 ++-- AIBySimplicite-swagger-2.0.yml | 4 ++-- AIBySimplicite.json | 2 +- module-info.json | 4 ++-- pom.xml | 4 ++-- resources/ObjectExternal/AIMetricsChat/HTML.html | 2 +- resources/ObjectExternal/AIMetricsChat/SCRIPT.js | 1 - .../workflows/AIBySimplicite/AiSettingsProcess.java | 1 - 8 files changed, 10 insertions(+), 12 deletions(-) diff --git a/AIBySimplicite-openapi-3.0.2.yml b/AIBySimplicite-openapi-3.0.2.yml index 75053a9..0b201ea 100644 --- a/AIBySimplicite-openapi-3.0.2.yml +++ b/AIBySimplicite-openapi-3.0.2.yml @@ -2,7 +2,7 @@ # / __(_)_ __ _ __| (_)__(_) |_ /_/ # \__ \ | ' \| '_ \ | / _| | _/ -_) # |___/_|_|_|_| .__/_|_\__|_|\__\___| -# |_| Module: AIBySimplicite 0.24 +# |_| Module: AIBySimplicite 0.25 components: schemas: Error404: @@ -1571,7 +1571,7 @@ info: email: contact@simplicitesoftware.com description: API for module AIBySimplicite title: AIBySimplicite - version: '0.24' + version: '0.25' tags: - name: AiGroupGuiDesc description: Group gui description diff --git a/AIBySimplicite-swagger-2.0.yml b/AIBySimplicite-swagger-2.0.yml index 8b6c711..2c75e35 100644 --- a/AIBySimplicite-swagger-2.0.yml +++ b/AIBySimplicite-swagger-2.0.yml @@ -2,7 +2,7 @@ # / __(_)_ __ _ __| (_)__(_) |_ /_/ # \__ \ | ' \| '_ \ | / _| | _/ -_) # |___/_|_|_|_| .__/_|_\__|_|\__\___| -# |_| Module: AIBySimplicite 0.24 +# |_| Module: AIBySimplicite 0.25 basePath: /api paths: /rest/AiMetricsHist: @@ -1355,7 +1355,7 @@ info: email: contact@simplicitesoftware.com description: API for module AIBySimplicite title: AIBySimplicite - version: '0.24' + version: '0.25' tags: - name: AiGroupGuiDesc description: Group gui description diff --git a/AIBySimplicite.json b/AIBySimplicite.json index 25d06de..f142fb6 100644 --- a/AIBySimplicite.json +++ b/AIBySimplicite.json @@ -4,7 +4,7 @@ "item": { "mdl_name": "AIBySimplicite", "mdl_prefix": "ai", - "mdl_version": "0.24", + "mdl_version": "0.25", "mdl_type": "T", "mdl_icon": null, "mdl_url": "{\n \"origin\": {\"uri\": \"https://github.com/simplicitesoftware/module_ai.git\"},\n \"type\": \"git\",\n \"branch\": \"6.1\"\n}", diff --git a/module-info.json b/module-info.json index 6d70834..7f7ea5b 100644 --- a/module-info.json +++ b/module-info.json @@ -1,9 +1,9 @@ { - "date": "2024-10-21 10:20:33", + "date": "2024-10-21 13:52:54", "name": "AIBySimplicite", "format": "json", "files": ["AIBySimplicite.json"], "repository": {"origin": {"uri": "https://github.com/simplicitesoftware/module_ai.git"}}, - "version": "0.24", + "version": "0.25", "platform": "6.1.11" } \ No newline at end of file diff --git a/pom.xml b/pom.xml index 21829f5..6e67eb1 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 4.0.0 com.simplicite.modules - 0.24-SNAPSHOT + 0.25-SNAPSHOT AIBySimplicite AIBySimplicite Simplicite module: AIBySimplicite @@ -19,7 +19,7 @@ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 11 simplicite-modules-AIBySimplicite AIBySimplicite - 0.24 + 0.25 src,resources AIBySimplicite.xml,AIBySimplicite.json,AIBySimplicite-*.yml,configuration/**,**.min.js,**.min.css resources/**.js,src/**.java diff --git a/resources/ObjectExternal/AIMetricsChat/HTML.html b/resources/ObjectExternal/AIMetricsChat/HTML.html index 7c75120..553167d 100644 --- a/resources/ObjectExternal/AIMetricsChat/HTML.html +++ b/resources/ObjectExternal/AIMetricsChat/HTML.html @@ -4,7 +4,7 @@
- +
diff --git a/resources/ObjectExternal/AIMetricsChat/SCRIPT.js b/resources/ObjectExternal/AIMetricsChat/SCRIPT.js index 2ae0b7e..1bd235a 100644 --- a/resources/ObjectExternal/AIMetricsChat/SCRIPT.js +++ b/resources/ObjectExternal/AIMetricsChat/SCRIPT.js @@ -18,7 +18,6 @@ var AIMetricsChat = AIMetricsChat || (function() { defaultSchemaDiv.className = "ai-default-schema-content"; defaultSchemaDiv.appendChild(defaultSchema); let buttons = {}; - let hasbeenShown = false; function render(params,id,module,s) { let ctn = params[0]; let printicon = document.createElement('i'); diff --git a/src/com/simplicite/workflows/AIBySimplicite/AiSettingsProcess.java b/src/com/simplicite/workflows/AIBySimplicite/AiSettingsProcess.java index e64bcab..011abdf 100644 --- a/src/com/simplicite/workflows/AIBySimplicite/AiSettingsProcess.java +++ b/src/com/simplicite/workflows/AIBySimplicite/AiSettingsProcess.java @@ -10,7 +10,6 @@ import com.simplicite.commons.AIBySimplicite.AITools; import com.simplicite.util.*; import com.simplicite.util.exceptions.*; -import com.simplicite.util.tools.BusinessObjectTool; import com.simplicite.webapp.ObjectContextWeb; /** From c52b534ee0ad703f4cf3aa9398615b97408b0490 Mon Sep 17 00:00:00 2001 From: "cbi (Candice Bimont)" Date: Mon, 21 Oct 2024 13:53:58 +0200 Subject: [PATCH 56/74] Updated From de8f56c5efa9a74d3361e9ec28097243d7d532ac Mon Sep 17 00:00:00 2001 From: "cbi (Candice Bimont)" Date: Wed, 30 Oct 2024 15:12:32 +0100 Subject: [PATCH 57/74] management generation by API and parameter number of data --- AIBySimplicite-openapi-3.0.2.yml | 4 +- AIBySimplicite-swagger-2.0.yml | 4 +- AIBySimplicite.json | 53 ++- files/Model/Model-AIGenData.png | Bin 35263 -> 34592 bytes files/Model/Model-AIGenData.svg | 2 +- files/Model/Model-AIModuleCreate.png | Bin 91397 -> 91431 bytes files/Model/Model-AIModuleCreate.svg | 2 +- files/Model/Model-AiSettingsProcess.png | Bin 32758 -> 32762 bytes module-info.json | 6 +- pom.xml | 4 +- .../commons/AIBySimplicite/AIData.java | 55 ++- .../commons/AIBySimplicite/AIModel.java | 11 +- .../commons/AIBySimplicite/AITools.java | 33 +- .../objects/AIBySimplicite/AIProvider.java | 2 +- .../workflows/AIBySimplicite/AIGenData.java | 82 +++- .../AIBySimplicite/AIModuleCreate.java | 407 ++++++++++++------ 16 files changed, 496 insertions(+), 169 deletions(-) diff --git a/AIBySimplicite-openapi-3.0.2.yml b/AIBySimplicite-openapi-3.0.2.yml index 0b201ea..4fba9b7 100644 --- a/AIBySimplicite-openapi-3.0.2.yml +++ b/AIBySimplicite-openapi-3.0.2.yml @@ -2,7 +2,7 @@ # / __(_)_ __ _ __| (_)__(_) |_ /_/ # \__ \ | ' \| '_ \ | / _| | _/ -_) # |___/_|_|_|_| .__/_|_\__|_|\__\___| -# |_| Module: AIBySimplicite 0.25 +# |_| Module: AIBySimplicite 0.26 components: schemas: Error404: @@ -1571,7 +1571,7 @@ info: email: contact@simplicitesoftware.com description: API for module AIBySimplicite title: AIBySimplicite - version: '0.25' + version: '0.26' tags: - name: AiGroupGuiDesc description: Group gui description diff --git a/AIBySimplicite-swagger-2.0.yml b/AIBySimplicite-swagger-2.0.yml index 2c75e35..9ac1655 100644 --- a/AIBySimplicite-swagger-2.0.yml +++ b/AIBySimplicite-swagger-2.0.yml @@ -2,7 +2,7 @@ # / __(_)_ __ _ __| (_)__(_) |_ /_/ # \__ \ | ' \| '_ \ | / _| | _/ -_) # |___/_|_|_|_| .__/_|_\__|_|\__\___| -# |_| Module: AIBySimplicite 0.25 +# |_| Module: AIBySimplicite 0.26 basePath: /api paths: /rest/AiMetricsHist: @@ -1355,7 +1355,7 @@ info: email: contact@simplicitesoftware.com description: API for module AIBySimplicite title: AIBySimplicite - version: '0.25' + version: '0.26' tags: - name: AiGroupGuiDesc description: Group gui description diff --git a/AIBySimplicite.json b/AIBySimplicite.json index f142fb6..766a441 100644 --- a/AIBySimplicite.json +++ b/AIBySimplicite.json @@ -4,7 +4,7 @@ "item": { "mdl_name": "AIBySimplicite", "mdl_prefix": "ai", - "mdl_version": "0.25", + "mdl_version": "0.26", "mdl_type": "T", "mdl_icon": null, "mdl_url": "{\n \"origin\": {\"uri\": \"https://github.com/simplicitesoftware/module_ai.git\"},\n \"type\": \"git\",\n \"branch\": \"6.1\"\n}", @@ -99,7 +99,7 @@ "mod_doc": { "path": "files/Model/Model-AIGenData.svg", "mime": "image/svg+xml", - "name": "Model-AIGenData.svg" + "name": "model.svg" }, "mod_image": { "path": "files/Model/Model-AIGenData.png", @@ -272,6 +272,15 @@ "icon": "img/system/profile", "field": "row_module_id", "list": [ + { + "object": "Profile", + "userkey": "AI_ADMIN AI_DESIGNER", + "item": { + "prf_profile_id__grp_name": "AI_ADMIN", + "prf_group_id__grp_name": "AI_DESIGNER", + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "Profile", "userkey": "AI_DESIGNER AI_BUSINESS", @@ -334,7 +343,7 @@ "lov_name": "TEXT", "lov_code": "AI_DEFAULT_PARAM", "lov_lang": "ANY", - "lov_value": "{\n \"bot_name\": {\n \"type\": \"text\",\n \"defaultValue\": \"George\",\n \"help\": \"The name of the bot that will be displayed to users.\",\n \"label\": {\n \"FRA\": \"Nom du bot\",\n \"ENU\": \"Bot Name\"\n },\n \"left_column\": true\n },\n \"code_max_token\": {\n \"type\": \"text\",\n \"defaultValue\": \"2000\",\n \"help\": \"The maximum number of tokens the bot can handle for all technical calls, including chart and modules generation.\",\n \"label\": {\n \"FRA\": \"Nombre maximum de jetons pour appels techniques\",\n \"ENU\": \"Max Token for Technical Calls\"\n }\n },\n \"default_max_token\": {\n \"type\": \"text\",\n \"defaultValue\": \"1500\",\n \"help\": \"The maximum number of tokens the bot can handle by default for each interaction.\",\n \"label\": {\n \"FRA\": \"Nombre maximum de jetons par défaut\",\n \"ENU\": \"Default Max Token\"\n }\n },\n \"hist_depth\": {\n \"type\": \"text\",\n \"defaultValue\": \"3\",\n \"help\": \"The number of previous messages the bot will consider when generating a new response.\",\n \"label\": {\n \"FRA\": \"Profondeur de l'historique\",\n \"ENU\": \"History Depth\"\n },\n \"left_column\": true\n },\n \"provider\": {\n \"type\": \"text\",\n \"defaultValue\": \"\",\n \"help\": \"Name of the model provider, used in the data disclaimer.\",\n \"label\": {\n \"FRA\": \"Fournisseur\",\n \"ENU\": \"Provider\"\n },\n \"left_column\": true\n },\n \"showDataDisclaimer\": {\n \"type\": \"boolean\",\n \"defaultValue\": true,\n \"help\": \"Indicates whether the data disclaimer should be shown to users.\",\n \"label\": {\n \"FRA\": \"Afficher la clause de non-responsabilité des données\",\n \"ENU\": \"Show Data Disclaimer\"\n },\n \"left_column\": true\n },\n \"model\": {\n \"type\": \"select\",\n \"defaultValue\": \"\",\n \"help\": \"Select the AI model to use for interactions.\",\n \"label\": {\n \"FRA\": \"Modèle\",\n \"ENU\": \"Model\"\n },\n \"left_column\": true\n },\n \"api_key\": {\n \"type\": \"text\",\n \"defaultValue\": \"\",\n \"help\": \"API key used to authenticate requests to the AI server.\",\n \"label\": {\n \"FRA\": \"Clé API\",\n \"ENU\": \"API Key\"\n }\n },\n \"completion_url\": {\n \"type\": \"url\",\n \"defaultValue\": \"\",\n \"help\": \"URL where text completion requests will be sent.\",\n \"label\": {\n \"FRA\": \"URL de complétion\",\n \"ENU\": \"Completion URL\"\n }\n },\n \"stt_url\": {\n \"type\": \"url\",\n \"defaultValue\": \"\",\n \"help\": \"URL used for speech recognition.\",\n \"label\": {\n \"FRA\": \"URL de la synthèse vocale \",\n \"ENU\": \"Speech to text URL\"\n }\n },\n \"ping_url\": {\n \"type\": \"url\",\n \"defaultValue\": \"\",\n \"help\": \"URL used to check the availability of the AI server.\",\n \"label\": {\n \"FRA\": \"URL de ping\",\n \"ENU\": \"Ping URL\"\n }\n }\n\n}", + "lov_value": "{\n \"bot_name\": {\n \"type\": \"text\",\n \"defaultValue\": \"George\",\n \"help\": \"The name of the bot that will be displayed to users.\",\n \"label\": {\n \"FRA\": \"Nom du bot\",\n \"ENU\": \"Bot Name\"\n },\n \"left_column\": true\n },\n \"data_number\": {\n \"type\": \"text\",\n \"defaultValue\": \"5\",\n \"help\": \"The amount of data per object requested from the AI.\",\n \"label\": {\n \"FRA\": \"Nombre de données à générer\",\n \"ENU\": \"Number of data to generate\"\n },\n \"left_column\": true\n },\n \"code_max_token\": {\n \"type\": \"text\",\n \"defaultValue\": \"2000\",\n \"help\": \"The maximum number of tokens the bot can handle for all technical calls, including chart and modules generation.\",\n \"label\": {\n \"FRA\": \"Nombre maximum de jetons pour appels techniques\",\n \"ENU\": \"Max Token for Technical Calls\"\n }\n },\n \"default_max_token\": {\n \"type\": \"text\",\n \"defaultValue\": \"1500\",\n \"help\": \"The maximum number of tokens the bot can handle by default for each interaction.\",\n \"label\": {\n \"FRA\": \"Nombre maximum de jetons par défaut\",\n \"ENU\": \"Default Max Token\"\n }\n },\n \"hist_depth\": {\n \"type\": \"text\",\n \"defaultValue\": \"3\",\n \"help\": \"The number of previous messages the bot will consider when generating a new response.\",\n \"label\": {\n \"FRA\": \"Profondeur de l'historique\",\n \"ENU\": \"History Depth\"\n },\n \"left_column\": true\n },\n \"provider\": {\n \"type\": \"text\",\n \"defaultValue\": \"\",\n \"help\": \"Name of the model provider, used in the data disclaimer.\",\n \"label\": {\n \"FRA\": \"Fournisseur\",\n \"ENU\": \"Provider\"\n },\n \"left_column\": true\n },\n \"showDataDisclaimer\": {\n \"type\": \"boolean\",\n \"defaultValue\": true,\n \"help\": \"Indicates whether the data disclaimer should be shown to users.\",\n \"label\": {\n \"FRA\": \"Afficher la clause de non-responsabilité des données\",\n \"ENU\": \"Show Data Disclaimer\"\n },\n \"left_column\": true\n },\n \"model\": {\n \"type\": \"select\",\n \"defaultValue\": \"\",\n \"help\": \"Select the AI model to use for interactions.\",\n \"label\": {\n \"FRA\": \"Modèle\",\n \"ENU\": \"Model\"\n },\n \"left_column\": true\n },\n \"api_key\": {\n \"type\": \"text\",\n \"defaultValue\": \"\",\n \"help\": \"API key used to authenticate requests to the AI server.\",\n \"label\": {\n \"FRA\": \"Clé API\",\n \"ENU\": \"API Key\"\n }\n },\n \"completion_url\": {\n \"type\": \"url\",\n \"defaultValue\": \"\",\n \"help\": \"URL where text completion requests will be sent.\",\n \"label\": {\n \"FRA\": \"URL de complétion\",\n \"ENU\": \"Completion URL\"\n }\n },\n \"stt_url\": {\n \"type\": \"url\",\n \"defaultValue\": \"\",\n \"help\": \"URL used for speech recognition.\",\n \"label\": {\n \"FRA\": \"URL de la synthèse vocale \",\n \"ENU\": \"Speech to text URL\"\n }\n },\n \"ping_url\": {\n \"type\": \"url\",\n \"defaultValue\": \"\",\n \"help\": \"URL used to check the availability of the AI server.\",\n \"label\": {\n \"FRA\": \"URL de ping\",\n \"ENU\": \"Ping URL\"\n }\n }\n\n}", "lov_order_by": 1, "lov_event_id__lev_code": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -574,6 +583,19 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, + { + "object": "ListOfValue", + "userkey": "TEXT AI_JSON_EMPTY_ERROR English", + "item": { + "lov_name": "TEXT", + "lov_code": "AI_JSON_EMPTY_ERROR", + "lov_lang": "ENU", + "lov_value": "Empty field. Please try again.", + "lov_order_by": 1, + "lov_event_id__lev_code": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "ListOfValue", "userkey": "TEXT AI_JSON_ERROR English", @@ -581,7 +603,7 @@ "lov_name": "TEXT", "lov_code": "AI_JSON_ERROR", "lov_lang": "ENU", - "lov_value": "The AI was unable to generate your module. Please try again.", + "lov_value": "The provided format is not valid: JSON expected. Please check the syntax", "lov_order_by": 1, "lov_event_id__lev_code": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -912,6 +934,19 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, + { + "object": "ListOfValue", + "userkey": "TEXT AI_JSON_EMPTY_ERROR French", + "item": { + "lov_name": "TEXT", + "lov_code": "AI_JSON_EMPTY_ERROR", + "lov_lang": "FRA", + "lov_value": "Champ vide. Veuillez recommencer.", + "lov_order_by": 1, + "lov_event_id__lev_code": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "ListOfValue", "userkey": "TEXT AI_JSON_ERROR French", @@ -919,7 +954,7 @@ "lov_name": "TEXT", "lov_code": "AI_JSON_ERROR", "lov_lang": "FRA", - "lov_value": "L'IA n'a pas réussi à générer votre module. Veuillez réessayer.", + "lov_value": "Le format fourni n'est pas valide : JSON attendu. Veuillez vérifier la syntaxe", "lov_order_by": 1, "lov_event_id__lev_code": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -5861,7 +5896,7 @@ "acy_max_duration": null, "acy_duration_unit": null, "acy_alert_id__alt_name": null, - "acy_user_dlg": true, + "acy_user_dlg": false, "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -5880,7 +5915,7 @@ "acy_max_duration": null, "acy_duration_unit": null, "acy_alert_id__alt_name": null, - "acy_user_dlg": true, + "acy_user_dlg": false, "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -5899,7 +5934,7 @@ "acy_max_duration": null, "acy_duration_unit": null, "acy_alert_id__alt_name": null, - "acy_user_dlg": true, + "acy_user_dlg": false, "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -6384,7 +6419,7 @@ "trs_name": "Retry", "trs_action_id__act_name": "AI_GENDATA_RETRY", "trs_condition": null, - "trs_callback": null, + "trs_callback": "relaunchingGeneration", "trs_alert_id__alt_name": null, "row_module_id__mdl_name": "AIBySimplicite" } diff --git a/files/Model/Model-AIGenData.png b/files/Model/Model-AIGenData.png index db550b83f213e2cf3e3c4dcb493ba3d49f402975..e7a71f7e59f8f5e063b73c9690aed3cd217bbe83 100644 GIT binary patch literal 34592 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

Gzt^nPRkrNX2svIcV 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 diff --git a/files/Model/Model-AIGenData.svg b/files/Model/Model-AIGenData.svg index edd6131..c4286a9 100644 --- a/files/Model/Model-AIGenData.svg +++ b/files/Model/Model-AIGenData.svg @@ -1 +1 @@ -Retry(1)(0)BeginEndSelectModuleGenDataConfirmIsParamNoParamEndHome \ No newline at end of file +Retry(1)(0)BeginEndSelectModuleGenDataConfirmIsParamNoParamEndHome \ No newline at end of file diff --git a/files/Model/Model-AIModuleCreate.png b/files/Model/Model-AIModuleCreate.png index 2019f81972d253a901d767faa43170ee180ef4e1..f5906ab68227dbf3bf5108ec88b789c097296ef1 100644 GIT binary patch delta 89395 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�I|n|%)$lwue$0sf3} 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 Module(1)(0)BeginEndSelectModuleSelectGroupSelectDomaininteractionPromptAIGenerationRemoveModuleCreateModuleChoiceGrantUserTranslateDomainNewScopeEndHomeisParamNoParam \ No newline at end of file +(0)(1)GenerateDelete Module(1)(0)BeginEndSelectModuleSelectGroupSelectDomaininteractionPromptAIGenerationRemoveModuleCreateModuleChoiceGrantUserTranslateDomainNewScopeEndHomeisParamNoParam \ No newline at end of file diff --git a/files/Model/Model-AiSettingsProcess.png b/files/Model/Model-AiSettingsProcess.png index 2ee023b28ce61252ff8c20ea085400e485c471bc..3209c8c76752786abdbcebf8b412b02ed2fad943 100644 GIT binary patch literal 32762 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 Z%1%gld{y?@FdF!yB&Q}@{@g71{{Y->5R(7^ literal 32758 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 4.0.0 com.simplicite.modules - 0.25-SNAPSHOT + 0.26-SNAPSHOT AIBySimplicite AIBySimplicite Simplicite module: AIBySimplicite @@ -19,7 +19,7 @@ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 11 simplicite-modules-AIBySimplicite AIBySimplicite - 0.25 + 0.26 src,resources AIBySimplicite.xml,AIBySimplicite.json,AIBySimplicite-*.yml,configuration/**,**.min.js,**.min.css resources/**.js,src/**.java diff --git a/src/com/simplicite/commons/AIBySimplicite/AIData.java b/src/com/simplicite/commons/AIBySimplicite/AIData.java index 04122e2..75b42f9 100644 --- a/src/com/simplicite/commons/AIBySimplicite/AIData.java +++ b/src/com/simplicite/commons/AIBySimplicite/AIData.java @@ -5,7 +5,6 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; - import com.simplicite.util.*; import com.simplicite.util.exceptions.*; import com.simplicite.util.tools.*; @@ -17,6 +16,7 @@ public class AIData implements java.io.Serializable { private static final long serialVersionUID = 1L; private static final String DEFAULT_EMAIL ="email@example.com"; private static final String DEFAULT_PHONE ="0601020304"; + private static final String DEVOBJ_GENERATE_MLDS = "DaaGenerateMlds"; private static HashMap typeTrad; private static Random random = new Random(); String html = ""; @@ -113,8 +113,8 @@ public JSONObject toJSON() { public static JSONObject genDataForModule(String moduleName,Grant g){ try { String[] ids = AITools.getObjectIdsModule(moduleName, g); - if(Tool.isEmpty(ids))throw new PlatformException("Not found or not granted object to generate for module: \n"+moduleName); - JSONObject response = AIData.callIADataOnModule(ids, g); + if(Tool.isEmpty(ids))throw new PlatformException("Not found or not granted object to generate for module "+moduleName+" and user "+g.getLogin()); + JSONObject response = AIData.callIADataOnModule(ids,ModuleDB.getModuleId(moduleName), g); response = AIData.jsonPreprocessing(response, g); return response; }catch (PlatformException e) { @@ -336,10 +336,12 @@ private static JSONObject getJsonModel(String[] ids, Grant g){ * @return the JSON object containing the data * @throws PlatformException if there is an error in the platform */ - private static JSONObject callIADataOnModule(String[] ids, Grant g) throws PlatformException{ + private static JSONObject callIADataOnModule(String[] ids,String mldId, Grant g) throws PlatformException{ JSONObject data = getJsonModel(ids, g); if(Boolean.TRUE.equals(AITools.AI_DEBUG_LOGS)) AppLog.info("module uml: "+data.toString(1), g); - JSONObject jsonResponse = AITools.aiCaller(g, /* "module uml: "+json */"", " generates consistent data in json according to the model: ```json "+data.toString(1)+"``` with at least 2 entries per class",false,true); + String dataNumber = AITools.getAIParam("data_number","5"); + JSONObject jsonResponse = AITools.aiCaller(g, /* "module uml: "+json */"", " generates consistent data in json according to the model: ```json "+data.toString(1)+"``` with at least "+dataNumber+" entries per class",false,true); + devSaveGenerationDataCost(mldId,jsonResponse.optJSONObject(AITools.USAGE_KEY)); String response = AITools.parseJsonResponse(jsonResponse); JSONObject json = AITools.getValidJson(response); if(Tool.isEmpty(json)){ @@ -1052,4 +1054,47 @@ private static JSONObject toDysplayJson(ObjectDB obj){ private static float randomFloat(float max){ return max * random.nextFloat(); } + + private static void devSaveGenerationDataCost(String mldId, JSONObject cost){ + if(!Tool.isEmpty(ModuleDB.getModuleId("DevAIAddon", false))){ + Grant admin = Grant.getSystemAdmin(); + admin.addAccessRead(DEVOBJ_GENERATE_MLDS); + admin.addAccessCreate(DEVOBJ_GENERATE_MLDS); + admin.addAccessCreate("DaaDataGeneration"); + ObjectDB obj = admin.getTmpObject(DEVOBJ_GENERATE_MLDS); + obj.resetFilters(); + obj.setFieldFilter("daaGmlModuleId", mldId); + List r = obj.search(); + String glmId; + if(Tool.isEmpty(r)){ + synchronized(obj.getLock()){ + BusinessObjectTool objT = obj.getTool(); + try { + objT.selectForCreate(); + obj.setFieldValue("daaGmlModuleId", mldId,false); + obj.setFieldValue("daaGmlModuleName",ModuleDB.getModuleName(mldId)); + objT.validateAndCreate(); + glmId = obj.getRowId(); + } catch (GetException | CreateException | ValidateException e) { + AppLog.warning("Dev list object not Created",e); + return; + } + } + }else{ + glmId = r.get(0)[obj.getFieldIndex("row_id")]; + } + obj = admin.getTmpObject("DaaDataGeneration"); + synchronized(obj.getLock()){ + BusinessObjectTool objT = obj.getTool(); + try { + objT.selectForCreate(); + obj.setFieldValue("daaDgGmlId", glmId,false); + obj.setFieldValue("daaDgCost",cost); + objT.validateAndCreate(); + } catch (GetException | CreateException | ValidateException e) { + AppLog.warning("Dev list object not Created",e); + } + } + } + } } \ No newline at end of file diff --git a/src/com/simplicite/commons/AIBySimplicite/AIModel.java b/src/com/simplicite/commons/AIBySimplicite/AIModel.java index 2c0f680..8be9e5f 100644 --- a/src/com/simplicite/commons/AIBySimplicite/AIModel.java +++ b/src/com/simplicite/commons/AIBySimplicite/AIModel.java @@ -348,7 +348,7 @@ public DataMapObject() { } public static List genModule(String moduleId,String[] groupIds, String domainID, JSONObject json) throws GetException, ValidateException, SaveException{ - + AppLog.info("I'M HERE genmodule"); int domainOrder=100; ModuleInfo mInfo = new ModuleInfo(moduleId, SyntaxTool.getModulePrefix(moduleId), groupIds, domainID); Grant g = Grant.getSystemAdmin(); @@ -1004,8 +1004,15 @@ private static void grantGroup(String groupId,String objectId,String moduleId,Gr funcObj.setFieldFilter(MODULE_ID_FIELD,moduleId); funcObj.setFieldFilter("fct_function",GrantCore.FUNCTION_ALL); funcObj.setFieldFilter("fct_object_id",objectId); - funcId = funcObj.search().get(0)[funcObj.getRowIdFieldIndex()]; + List funcs = funcObj.search(); + if(Tool.isEmpty(funcs)){ + AppLog.warning("No function found for object "+ObjectCore.getObjectName(objectId)+" in module "+ModuleDB.getModuleName(moduleId)); + return; + } + funcId = funcs.get(0)[funcObj.getRowIdFieldIndex()]; + } + JSONObject grant = new JSONObject(); grant.put("grt_group_id", groupId); grant.put(MODULE_ID_FIELD,moduleId); diff --git a/src/com/simplicite/commons/AIBySimplicite/AITools.java b/src/com/simplicite/commons/AIBySimplicite/AITools.java index 2c83dc4..a6554db 100644 --- a/src/com/simplicite/commons/AIBySimplicite/AITools.java +++ b/src/com/simplicite/commons/AIBySimplicite/AITools.java @@ -4,6 +4,7 @@ import org.json.JSONException; import java.util.*; + import com.simplicite.util.*; import com.simplicite.util.exceptions.*; @@ -43,7 +44,7 @@ public class AITools implements java.io.Serializable { public static final String CONTENT_KEY = "content"; private static final String MESSAGE_KEY = "message"; private static final String MESSAGES_KEY = "messages"; - private static final String USAGE_KEY = "usage"; + public static final String USAGE_KEY = "usage"; private static final String PROVIDER_KEY = "provider"; private static final String API_KEY = "api_key"; private static final String MODEL_KEY = "model"; @@ -85,6 +86,14 @@ public class AITools implements java.io.Serializable { private static String apiKey = getAIParam(API_KEY); private static String completionUrl = getAIParam(COMPLETION_KEY); + public static class AITypeException extends Exception { + private static final long serialVersionUID = 1L; + + public AITypeException(String object, String classname, String needClass) { + super("Invalid type for "+object+": "+classname+" need "+needClass); + } + } + private static JSONObject getOptAiApiParam(){ String env = System.getenv(SYSPARAM_AI_API_PARAM); if(Tool.isEmpty(env)){ @@ -485,7 +494,8 @@ private static JSONObject formatErrorMsg(int responseCode,StringBuilder response String errorMessage; try{ JSONObject error = new JSONObject(response.toString()); - errorMessage = error.optJSONObject(ERROR_KEY).optString(MESSAGE_KEY,"no message"); + + errorMessage = error.optJSONObject(ERROR_KEY,new JSONObject()).optString(MESSAGE_KEY,response.toString()); }catch(JSONException e){ errorMessage = response.toString(); } @@ -510,7 +520,7 @@ public static String readResponse(HttpURLConnection connection,Grant g){ String res = response.toString(); JSONObject resJson = refactorAiResponseInGPT(res); if(resJson.has(USAGE_KEY )){ - AppLog.info("AI used token :"+new JSONObject(res).optJSONObject(USAGE_KEY).toString(1), g); + AppLog.info("AI used token :"+resJson.optJSONObject(USAGE_KEY).toString(1), g); } return resJson.toString(); } catch (IOException e) { @@ -613,7 +623,20 @@ public static JSONObject formatMessageHistoric(JSONObject json){ return json; } - + public static Message checkJson(String json){ + if (Tool.isEmpty(json)){ + Message m = new Message(); + m.raiseError(Message.formatError("AI_JSON_EMPTY_ERROR",null, null)); + return m; + } + JSONObject jsonObject = AITools.getValidJson(json); + if(Tool.isEmpty(jsonObject)){ + Message m = new Message(); + m.raiseError(Message.formatError("AI_JSON_ERROR",null, null)); + return m; + } + return null; + } /** * Format a NotePad Field to a AI Format Historic Array * @param data notepad value (old value to not consider the actual ask) @@ -1293,4 +1316,6 @@ public static String optLabel(String key,JSONObject defaultFields,String lang){ public static boolean isConfigurable(){ return !IS_ENV_SETUP; } + + } \ No newline at end of file diff --git a/src/com/simplicite/objects/AIBySimplicite/AIProvider.java b/src/com/simplicite/objects/AIBySimplicite/AIProvider.java index 056f7ac..7c3a3ab 100644 --- a/src/com/simplicite/objects/AIBySimplicite/AIProvider.java +++ b/src/com/simplicite/objects/AIBySimplicite/AIProvider.java @@ -45,7 +45,7 @@ public String getParamPage(String[] models,List requiredFields){ specificParam = AITools.getCurrentParams(specificParam); param.put("provider", getFieldValue("aiPrvProvider")); JSONObject datas = new JSONObject(); - datas.put("DefFields", addFields(new String[]{"provider", "model","bot_name"}, param, models, requiredFields,null)); + datas.put("DefFields", addFields(new String[]{"provider", "model","bot_name","data_number"}, param, models, requiredFields,null)); datas.put("DetailsFields", addFields(new String[]{"hist_depth","showDataDisclaimer"}, param, null,requiredFields,null)); diff --git a/src/com/simplicite/workflows/AIBySimplicite/AIGenData.java b/src/com/simplicite/workflows/AIBySimplicite/AIGenData.java index c7cbff7..fca0309 100644 --- a/src/com/simplicite/workflows/AIBySimplicite/AIGenData.java +++ b/src/com/simplicite/workflows/AIBySimplicite/AIGenData.java @@ -1,29 +1,65 @@ package com.simplicite.workflows.AIBySimplicite; - import com.simplicite.bpm.*; import com.simplicite.commons.AIBySimplicite.AIData; import com.simplicite.commons.AIBySimplicite.AITools; import com.simplicite.util.*; + import com.simplicite.webapp.ObjectContextWeb; + import org.json.JSONObject; /** * Process AIGenData */ public class AIGenData extends Processus { private static final String AI_SETTING_NEED = "AI_SETTING_NEED"; + private static final String ACTIVITY_SELECT_MODULE = "GGD_0100"; + private static final String ACTIVITY_CONFIRM = "GGD_0150"; + private static final String ACTIVITY_GEN_DATA = "GGD_0200"; + private static final String ACTIVITY_IS_PARAM = "GGD_0050"; + private static final String DATA_JSON = "json_return" ; + private static final String DATA_FIELD = "Field"; + private static final String MODULE_NAME_FIELD = "mdl_name"; + private static final String ERROR = "error"; private static final long serialVersionUID = 1L; @Override public Message preValidate(ActivityFile context) { - - - if("GGD_0050".equals(context.getActivity().getStep())){ - context.setDataFile("Return","Code", AITools.isAIParam()?"1":"0"); - if(Boolean.TRUE.equals(AITools.AI_DEBUG_LOGS))AppLog.info(context.getDataValue("Return","Code"), getGrant()); + String step = context.getActivity().getStep(); + switch (step) { + case ACTIVITY_IS_PARAM: + context.setDataFile("Return","Code", AITools.isAIParam()?"1":"0"); + if(Boolean.TRUE.equals(AITools.AI_DEBUG_LOGS))AppLog.info(context.getDataValue("Return","Code"), getGrant()); + break; + case ACTIVITY_CONFIRM: + Message check = AITools.checkJson(context.getDataValue("Data", DATA_JSON)); + if(!Tool.isEmpty(check)) return check; + break; + default: + break; } return super.preValidate(context); } + @Override + public void postValidate(ActivityFile context) { + String step = context.getActivity().getStep(); + String moduleName; + switch (step) { + case ACTIVITY_SELECT_MODULE: + moduleName = context.getDataValue(DATA_FIELD, MODULE_NAME_FIELD); + aiGenerateData(moduleName); + break; + case ACTIVITY_CONFIRM: + moduleName = getContext(getActivity(ACTIVITY_SELECT_MODULE)).getDataValue(DATA_FIELD, MODULE_NAME_FIELD); + JSONObject json = new JSONObject( context.getDataValue("Data", DATA_JSON)); + getContext(getActivity(ACTIVITY_GEN_DATA)).setDataFile("Data","generate", AIData.createDataFromJSON(moduleName,json,getGrant())); + break; + default: + + break; + } + super.postValidate(context); + } public String noParam(Processus p, ActivityFile context, ObjectContextWeb ctx, Grant g){ return getGrant().T(AI_SETTING_NEED); } @@ -31,9 +67,7 @@ public String genData(Processus p, ActivityFile context, ObjectContextWeb ctx, G if(context.getStatus() != ActivityFile.STATE_RUNNING) return null; if(!AITools.isAIParam(true)) return g.T(AI_SETTING_NEED); - String moduleId = getContext(getActivity("GGD_0100")).getDataValue("Field", "mdl_name"); - JSONObject json = new JSONObject( getContext(getActivity("GGD_0150")).getDataValue("Data", "json_return")); - return AIData.createDataFromJSON(moduleId,json,getGrant()); + return context.getDataValue("Data", "generate"); } @Override @@ -51,16 +85,34 @@ public String callIA(Processus p, ActivityFile context, ObjectContextWeb ctx, Gr if(!AITools.isAIParam(true)) return g.T(AI_SETTING_NEED); String divId = "ace_json_return"; String aceEditor ="$ui.loadScript({url: $ui.getApp().dispositionResourceURL(\"AiJsTools\", \"JS\"),onload: function(){ AiJsTools.loadResultInAceEditor($('#json_return'),'"+divId+"');}});"; - String moduleId = getContext(getActivity("GGD_0100")).getDataValue("Field", "mdl_name"); - if(Tool.isEmpty(moduleId)) return "

"+""; - JSONObject response = AIData.genDataForModule(moduleId,getGrant()); - if(response.has("error")) return response.getString("error"); - - return "
"+""; + String dataJson = context.getDataValue("Data", DATA_JSON); + String error = context.getDataValue("Data", ERROR); + if(!Tool.isEmpty(error)){ + return "
"+error+"
"; + } + if(!Tool.isEmpty(dataJson)){ + return "
"+""; + } + return "
"+""; } public String testFucntion(){ return "test1"; } + private void aiGenerateData(String moduleName){ + if(Tool.isEmpty(moduleName)) return; + JSONObject response = AIData.genDataForModule(moduleName,getGrant()); + if(response.has(ERROR)){ + getContext(getActivity(ACTIVITY_CONFIRM)).setDataFile("Data", ERROR, response.getString(ERROR)); + }else{ + getContext(getActivity(ACTIVITY_CONFIRM)).setDataFile("Data", DATA_JSON, response.toString(1)); + } + } + public void relaunchingGeneration(ActivityFile context){ + AppLog.info("Relaunching generation", getGrant()); + String moduleName = getContext(getActivity(ACTIVITY_SELECT_MODULE)).getDataValue(DATA_FIELD, MODULE_NAME_FIELD); + aiGenerateData(moduleName); + } + } \ No newline at end of file diff --git a/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java b/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java index e1dcf4a..84be522 100644 --- a/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java +++ b/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java @@ -1,6 +1,7 @@ package com.simplicite.workflows.AIBySimplicite; import java.util.*; + import org.json.JSONArray; import org.json.JSONObject; @@ -8,6 +9,9 @@ import com.simplicite.commons.AIBySimplicite.AIModel; import com.simplicite.commons.AIBySimplicite.AITools; import com.simplicite.util.*; +import com.simplicite.util.exceptions.CreateException; +import com.simplicite.util.exceptions.GetException; +import com.simplicite.util.exceptions.ValidateException; import com.simplicite.util.tools.*; import com.simplicite.webapp.ObjectContextWeb; @@ -15,11 +19,17 @@ + + /** * Process AIModuleCreate */ public class AIModuleCreate extends Processus { private static final long serialVersionUID = 1L; + private static final String DEV_MODULE ="DevAIAddon"; + private static final String DEVOBJ_GENERATE_MLDS ="DaaGenerateMlds"; + private static final String DEVFIELD_MLD_ID ="daaGmlModuleId"; + private static final String DAA_ERROR_CREATE ="DAA_ERROR_CREATE"; private static final String PROCESS_RESOURCE_EXTERNAL_OBJECT ="AIProcessResource"; private static final String INTERNAL_OBJ ="ObjectInternal"; private static final String FIELD ="Field"; @@ -27,9 +37,16 @@ public class AIModuleCreate extends Processus { private static final String ROW_MODULE_ID_FIELD ="row_module_id"; private static final String DOMAIN_NAME_FIELD ="obd_name"; private static final String ROW_ID ="row_id"; + private static final String SCOPE_ID_FIELD = "vig_view_id"; private static final String EMPTY_TEXTAREA =""; private static final String ACE_DIV ="
"; private static final String ACTIVITY_CREATE_MODULE ="AIC_0010"; + private static final String DATA_PRE ="preContext"; + private static final String DATA_JSON ="json_return"; + private static final String DATA_POST ="postContext"; + private static final String DATA_GROUP_RETURN ="Return"; + + private static final String ACTIVITY_CHOICE ="AIC_0005"; private static final String ACTIVITY_GRANT_USER ="AIC_0020"; private static final String ACTIVITY_SELECT_MODULE ="AIC_0100"; private static final String ACTIVITY_SELECT_GROUP ="AIC_0200"; @@ -61,6 +78,7 @@ public class AIModuleCreate extends Processus { public String chatBot(Processus p, ActivityFile context, ObjectContextWeb ctx, Grant g){ if(context.getStatus() == ActivityFile.STATE_DONE) return null; + AppLog.info("chatBot", getGrant()); if(!AITools.isAIParam(true)) return g.T(AI_SETTING_NEED); List objs = getModuleObjects(getContext(getActivity(ACTIVITY_SELECT_MODULE)).getDataValue(FIELD, ROW_ID),g); if (Tool.isEmpty(objs)) return getModuleChat("",g); @@ -177,20 +195,34 @@ public String form(Processus p, ActivityFile context, ObjectContextWeb ctx, Gran public String ai(Processus p, ActivityFile context, ObjectContextWeb ctx, Grant g){ if(context.getStatus() == ActivityFile.STATE_DONE) return null; + AppLog.info("ai", getGrant()); String divId = "ace_json_return"; String aceEditor ="$ui.loadScript({url: $ui.getApp().dispositionResourceURL(\"AiJsTools\", \"JS\"),onload: function(){ AiJsTools.loadResultInAceEditor($('#json_return'),'"+divId+"');}});"; if(!AITools.isAIParam(true)) return g.T(AI_SETTING_NEED); - List listResult = getJsonAi( getPreviousContext(context).getActivity().getStep(), g); + List listResult = new ArrayList<>(); + listResult.add(context.getDataValue("Data", DATA_PRE)); + listResult.add(context.getDataValue("Data", DATA_JSON)); + listResult.add(context.getDataValue("Data", DATA_POST)); if(Tool.isEmpty(listResult)) return ACE_DIV+EMPTY_TEXTAREA+BEGIN_SCRIPT+aceEditor+END_SCRIPT; - if(listResult.size()!=3)return Message.formatError("AI_ERROR_RETURN", listResult.get(0),null ); return "

"+listResult.get(0)+"

"+ACE_DIV+""+"

"+listResult.get(2)+"

"+BEGIN_SCRIPT+aceEditor+END_SCRIPT; } - private List getJsonAi(String previousStep, Grant g){ + @Override + public void postActivate() { + List stepToPassForAPI = Arrays.asList(ACTIVITY_CHOICE,ACTIVITY_TRL_DOMAIN, ACTIVITY_NEW_SCOPE, ACTIVITY_GRANT_USER); + if(getGrant().isAPIEndpoint()){ + for(String step : stepToPassForAPI){ + getActivity(step).setUserDialog(false); + } + } + + super.postActivate(); + } + private List getJsonAi(String step, Grant g){ JSONArray historic = new JSONArray(); - String prompt = getPromptFromContext(previousStep, historic,g); + String prompt = getPromptFromContext(step, historic,g); if(Tool.isEmpty(prompt)){//for test return new ArrayList<>(); @@ -198,6 +230,13 @@ private List getJsonAi(String previousStep, Grant g){ JSONObject jsonResponse = AITools.aiCaller(g, "you help to create UML in json for application, your answers are automatically processed in java", prompt, historic,false,true); String result = AITools.parseJsonResponse(jsonResponse); + //for dev purpose + String choiceAct = getContext(getActivity(ACTIVITY_CHOICE)).getDataValue("Data", "AREA:1"); + if(g.isAPIEndpoint()){ + choiceAct = "1"; + } + AppLog.info("choice: "+choiceAct, g); + devSaveGenerationCost(getContext(getActivity(ACTIVITY_SELECT_MODULE)).getDataValue(FIELD, ROW_ID),jsonResponse.optJSONObject(AITools.USAGE_KEY),"1".equals(choiceAct)); List listResult = new ArrayList<>(); JSONObject jsonres = AITools.getValidJson(result); if(Tool.isEmpty(jsonres)){ @@ -253,21 +292,32 @@ private String getPromptFromPromptActivity(Grant g){ private String getPromptFromInteractionActivity(Grant g, JSONArray historic){ int histDepth = AITools.getHistDepth(); String historicString = getContext(getActivity(ACTIVITY_INTERACTION)).getDataValue("Data", "AI_data"); - if(Tool.isEmpty(historicString)){//for test - return ""; - } - if (!Tool.isEmpty(historicString)){ - int i=0; - JSONArray list = new JSONArray(historicString); - int begin = list.length()-histDepth*2; - for(Object hist : list){ - if(i>=begin) - historic.put(AITools.formatMessageHistoric(new JSONObject((String) hist))); - i++; + if (!Tool.isEmpty(historicString)){ + int i=0; + JSONArray list = new JSONArray(historicString); + int begin = list.length()-histDepth*2; + for(Object hist : list){ + if(i>=begin){ + try{ + historic.put(getJSONForamtedHist(hist)); + }catch(Exception e){ + AppLog.info((String) hist,getGrant()); + AppLog.error(e, g); + } } + + i++; } - byte[] template =g.getExternalObject(PROCESS_RESOURCE_EXTERNAL_OBJECT).getResourceContent(Resource.TYPE_OTHER,"CONTEXT_INTERACTION_PROMPT"); - return template!=null?new String(template):""; + } + byte[] template =g.getExternalObject(PROCESS_RESOURCE_EXTERNAL_OBJECT).getResourceContent(Resource.TYPE_OTHER,"CONTEXT_INTERACTION_PROMPT"); + return template!=null?new String(template):""; + } + private JSONObject getJSONForamtedHist(Object hist) throws AITools.AITypeException{ + if(hist instanceof JSONObject) + return AITools.formatMessageHistoric((JSONObject) hist); + else if(hist instanceof String) + return AITools.formatMessageHistoric(new JSONObject((String) hist)); + throw new AITools.AITypeException("historic",hist.getClass().getName(),"JSONObject or String"); } /** * Generates a string based on the provided parameters. @@ -279,58 +329,88 @@ private String getPromptFromInteractionActivity(Grant g, JSONArray historic){ * @return The generated string. */ public String gen(Processus p, ActivityFile context, ObjectContextWeb ctx, Grant g){ + AppLog.info("gen", getGrant()); if(context.getStatus() == ActivityFile.STATE_DONE){ return null;} if(!AITools.isAIParam(true)) return g.T(AI_SETTING_NEED); - String json = getAIAnswer(context,g); - if (Tool.isEmpty(json)){ - return g.getText("AI_ERROR"); + DataFile error = context.getDataFile("Data", "error",false); + if(!Tool.isEmpty(error)){ + return "

"+error.getValues()[0]+"

"; } - String[] objs = null; - String test = p.getPreviousContext(p.getPreviousContext(context)).getActivity().getStep(); - if(ACTIVITY_SELECT_DOMAIN.equals(test)){ - objs = getObjsIds(getModuleObjects(getContext(getActivity(ACTIVITY_SELECT_MODULE)).getDataValue(FIELD, ROW_ID),g),g); + DataFile allids = context.getDataFile("Data", "allIds",false); + if(Tool.isEmpty(allids)){ + return "

"+g.getText("AI_SUCCESS")+"

"; } @@ -396,7 +468,7 @@ private String formatAnswerAI(String answer){ } @Override public Message preAbandon() { - Activity act = getActivity("GGD-END"); + Activity act = getActivity("AIC-END"); if(!Tool.isEmpty(act)) getContext(act).setDataFile("Forward", "Page", "ui/AiMonitoring"); return super.preAbandon(); @@ -407,37 +479,45 @@ public String noParam(Processus p, ActivityFile context, ObjectContextWeb ctx, G @Override public Message preValidate(ActivityFile context) { String step = context.getActivity().getStep(); - - if("AIC_0050".equals(step)){ - context.setDataFile("Return","Code", AITools.isAIParam()?"1":"0"); - if(Boolean.TRUE.equals(AITools.AI_DEBUG_LOGS))AppLog.info(context.getDataValue("Return","Code"), getGrant()); - }else if(ACTIVITY_CREATE_MODULE.equals(step) && !displayPrefixWarning){ - Object prefix = getContext(getActivity(ACTIVITY_CREATE_MODULE)).getDataValue(FIELD, MDL_PREFIX_FIELD); - ObjectDB obj = getGrant().getTmpObject("Module"); - synchronized(obj.getLock()){ - obj.resetFilters(); - obj.setFieldFilter(MDL_PREFIX_FIELD, prefix); - List search = obj.search(); - if(!search.isEmpty()){ - List modules = new ArrayList<>(); - for(String[] el : search){ - modules.add(el[obj.getFieldIndex(MODULE_NAME_FIELD)]); + switch (step) { + case "AIC_0050": + context.setDataFile(DATA_GROUP_RETURN,"Code", AITools.isAIParam()?"1":"0"); + break; + case ACTIVITY_CREATE_MODULE: + if(!displayPrefixWarning){ + Object prefix = getContext(getActivity(ACTIVITY_CREATE_MODULE)).getDataValue(FIELD, MDL_PREFIX_FIELD); + ObjectDB obj = getGrant().getTmpObject("Module"); + synchronized(obj.getLock()){ + obj.resetFilters(); + obj.setFieldFilter(MDL_PREFIX_FIELD, prefix); + List search = obj.search(); + if(!search.isEmpty()){ + List modules = new ArrayList<>(); + for(String[] el : search){ + modules.add(el[obj.getFieldIndex(MODULE_NAME_FIELD)]); + } + Message m = new Message(); + m.raiseError(Message.formatWarning("AI_WARN_PREFIX", String.join(", ",modules), MDL_PREFIX_FIELD)); + displayPrefixWarning = true; + return m; + } + } - Message m = new Message(); - m.raiseError(Message.formatWarning("AI_WARN_PREFIX", String.join(", ",modules), MDL_PREFIX_FIELD)); - displayPrefixWarning = true; - return m; } - - } - - - } + break; + case ACTIVITY_AI: + Message check = AITools.checkJson(context.getDataValue("Data", DATA_JSON)); + if(!Tool.isEmpty(check)) return check; + break; + default: + break; + } if(!context.getActivity().isUserDialog()){ automaticDataFile(context); } return super.preValidate(context); } + private void automaticDataFile(ActivityFile context){ String step = context.getActivity().getStep(); switch (step) { @@ -452,41 +532,24 @@ private void automaticDataFile(ActivityFile context){ case ACTIVITY_TRL_DOMAIN: automaticTrlDom(context, getGrant()); break; - + case ACTIVITY_CHOICE: + context.setDataFile(DATA_GROUP_RETURN,"Code", "1"); + break; default: break; } } @Override public void postValidate(ActivityFile context) { - String step = context.getActivity().getStep(); + String step = context.getActivity().getStep(); switch (step) { case ACTIVITY_CREATE_MODULE: - getContext(getActivity(ACTIVITY_SELECT_MODULE)).setDataFile(FIELD,ROW_ID, context.getDataValue(FIELD, ROW_ID)); - String groupId = createGroup(context); - if(!Tool.isEmpty(groupId)){ - getContext(getActivity(ACTIVITY_SELECT_GROUP)).setDataFile(FIELD, ROW_ID, groupId); - } - String domainId = createDomain(context); - if(!Tool.isEmpty(domainId)){ - getContext(getActivity(ACTIVITY_SELECT_DOMAIN)).setDataFile(FIELD, ROW_ID, domainId); - } - grantGroupToDomain(domainId,groupId,context.getDataValue(FIELD, ROW_ID)); + addDataToSelectActsAndGrant(context); displayPrefixWarning = false; - + devSaveIACreatedModule(context.getDataValue(FIELD, ROW_ID));// add to a list for dev purpose break; case ACTIVITY_GRANT_USER: - boolean isGrantUser =true; - if(context.getActivity().isUserDialog())isGrantUser = "1".equals(context.getDataValue("Data", "AREA:1")); - if(isGrantUser){ - String groupName = getContext(getActivity(ACTIVITY_SELECT_GROUP)).getDataValue(FIELD, "grp_name"); - if(Tool.isEmpty(groupName)){ - groupName = SyntaxTool.join(SyntaxTool.UPPER, new String[]{getContext(getActivity(ACTIVITY_CREATE_MODULE)).getDataValue(FIELD,MDL_PREFIX_FIELD),"GROUP"}); - } - String moduleName = getContext(getActivity(ACTIVITY_CREATE_MODULE)).getDataValue(FIELD, MODULE_NAME_FIELD); - Grant.addResponsibility(Grant.getUserId(getGrant().getLogin()),groupName,null,null,true, moduleName); - } - + grantCurentUser(context); break; case ACTIVITY_TRL_DOMAIN: saveTranslate(context); @@ -499,13 +562,105 @@ public void postValidate(ActivityFile context) { } break; - + case ACTIVITY_INTERACTION: + case ACTIVITY_PROMPT: + List listResult= getJsonAi(context.getActivity().getStep(), getGrant()); + setResultInDataFile(listResult); + break; + case ACTIVITY_AI: + generateObjects(context,context.getProcessus()); + break; default: break; } super.postValidate(context); } + private void setResultInDataFile(List listResult){ + ActivityFile nextcontext = getContext(getActivity(ACTIVITY_AI)); + if(!Tool.isEmpty(listResult) && listResult.size()==3){ + nextcontext.setDataFile("Data", DATA_PRE, listResult.get(0)); + nextcontext.setDataFile("Data", DATA_JSON, listResult.get(1)); + nextcontext.setDataFile("Data", DATA_POST, listResult.get(2)); + }else { + nextcontext.setDataFile("Data", DATA_PRE, (Tool.isEmpty(listResult)?"":listResult.get(0))); + nextcontext.setDataFile("Data", DATA_JSON, ""); + nextcontext.setDataFile("Data", DATA_POST, ""); + } + } + private void addDataToSelectActsAndGrant(ActivityFile context){ + getContext(getActivity(ACTIVITY_SELECT_MODULE)).setDataFile(FIELD,ROW_ID, context.getDataValue(FIELD, ROW_ID)); + String groupId = createGroup(context); + if(!Tool.isEmpty(groupId)){ + getContext(getActivity(ACTIVITY_SELECT_GROUP)).setDataFile(FIELD, ROW_ID, groupId); + } + String domainId = createDomain(context); + if(!Tool.isEmpty(domainId)){ + getContext(getActivity(ACTIVITY_SELECT_DOMAIN)).setDataFile(FIELD, ROW_ID, domainId); + } + grantGroupToDomain(domainId,groupId,context.getDataValue(FIELD, ROW_ID)); + + } + private void grantCurentUser(ActivityFile context){ + Grant g = getGrant(); + boolean isGrantUser =true; + if(context.getActivity().isUserDialog())isGrantUser = "1".equals(context.getDataValue("Data", "AREA:1")); + if(isGrantUser){ + String groupName = getContext(getActivity(ACTIVITY_SELECT_GROUP)).getDataValue(FIELD, "grp_name"); + if(Tool.isEmpty(groupName)){ + groupName = SyntaxTool.join(SyntaxTool.UPPER, new String[]{getContext(getActivity(ACTIVITY_CREATE_MODULE)).getDataValue(FIELD,MDL_PREFIX_FIELD),"GROUP"}); + } + String moduleName = getContext(getActivity(ACTIVITY_CREATE_MODULE)).getDataValue(FIELD, MODULE_NAME_FIELD); + Grant.addResponsibility(Grant.getUserId(g.getLogin()),groupName,null,null,true, moduleName); + if(g.isAPIEndpoint()){ + g.getGroup("AIA_API_MODULE_CREATE").addProfile(g.getGroup(groupName)); + if(!"designer".equals(g.getLogin())) + Grant.addResponsibility(Grant.getUserId("designer"),groupName,null,null,true, moduleName); + + + } + } + } + private void generateObjects(ActivityFile context, Processus p){ + Grant g = getGrant(); + ActivityFile genContext = getContext(getActivity(ACTIVITY_GEN)); + String json = getContext(getActivity(ACTIVITY_AI)).getDataValue("Data", DATA_JSON); + String[] objs = null; + String test = p.getPreviousContext(p.getPreviousContext(context)).getActivity().getStep(); + if(ACTIVITY_SELECT_DOMAIN.equals(test)){ + objs = getObjsIds(getModuleObjects(getContext(getActivity(ACTIVITY_SELECT_MODULE)).getDataValue(FIELD, ROW_ID),g),g); + }else{ + DataFile data = getContext(getActivity(ACTIVITY_GEN)).getDataFile("Data", EXISTING_OBJECT,false); + if(!Tool.isEmpty(data)){ + objs = data.getValues(); + } + } + + String moduleId = getContext(getActivity(ACTIVITY_SELECT_MODULE)).getDataValue(FIELD, ROW_ID); + DataFile dataGroup = getContext(getActivity(ACTIVITY_SELECT_GROUP)).getDataFile(FIELD, ROW_ID,false); + String[] groupIds = Tool.isEmpty(dataGroup)?new String[]{}:dataGroup.getValues(); + String domainId = getContext(getActivity(ACTIVITY_SELECT_DOMAIN)).getDataValue(FIELD, ROW_ID); + + try{ + JSONObject jsonObject = AITools.getValidJson(json); + List ids = AIModel.genModule(moduleId, groupIds,domainId,jsonObject); + genContext.setDataFile("Data", "createdIds", ids); + genContext.setDataFile("Data", "moduleId", moduleId); + genContext.setDataFile("Data", "moduleName", ModuleDB.getModuleName(moduleId)); + if(!Tool.isEmpty(objs)){ + ids.addAll(Arrays.asList(objs)); + ids = new ArrayList<>(new HashSet<>(ids)); + genContext.setDataFile("Data", "allIds", ids); + } + } catch (Exception e) { + AppLog.error(e, g); + Grant admin = Grant.getSystemAdmin(); + devSaveError(e,groupIds,json,domainId, moduleId,g.getLogin(),admin); + AppLog.error(e, admin); + genContext.setDataFile("Data", "error", admin.T("AI_ERROR")); + } + } private void trlScope(String scopeId,String moduleName){ + ObjectDB obj = getGrant().getTmpObject("TranslateView"); synchronized(obj.getLock()){ try{ @@ -705,14 +860,16 @@ public void saveTranslate(ActivityFile context){ private void scopeGrant(String scopeId){ String moduleId = getContext(getActivity(ACTIVITY_SELECT_MODULE)).getDataValue(FIELD, ROW_ID); String groupeId = getContext(getActivity(ACTIVITY_SELECT_GROUP)).getDataValue(FIELD, ROW_ID); + AppLog.info("scopeGrant module: "+moduleId+", groupe: "+groupeId, getGrant()); + ObjectDB obj = getGrant().getTmpObject("Group"); synchronized(obj.getLock()){ try{ obj.select(groupeId); - obj.setFieldValue("grp_home_id", scopeId); + obj.setFieldValue("grp_home_id", scopeId,false); obj.save(); }catch(Exception e){ - AppLog.error(e, getGrant()); + AppLog.error("Group save ",e, getGrant()); } } obj = getGrant().getTmpObject("ViewGroup"); @@ -722,11 +879,17 @@ private void scopeGrant(String scopeId){ BusinessObjectTool objTool = obj.getTool(); objTool.selectForCreate(); obj.setFieldValue(ROW_MODULE_ID_FIELD, moduleId); - obj.setFieldValue("vig_view_id", scopeId); - obj.setFieldValue("vig_group_id", groupeId); + AppLog.info("view group view id: "+scopeId +" name "+View.getViewName(scopeId)+" field "+obj.getFieldValue(SCOPE_ID_FIELD), getGrant()); + obj.setFieldValue(SCOPE_ID_FIELD, scopeId,false); + obj.setFieldValue("vig_group_id", groupeId,false); + AppLog.info("view group view id: "+scopeId +" name "+View.getViewName(scopeId)+" field "+obj.getFieldValue(SCOPE_ID_FIELD), getGrant()); + AppLog.info("view group group id: "+groupeId+ GroupDB.getGroupName(groupeId), getGrant()); + AppLog.info("view group: "+obj.toJSON(), getGrant()); + obj.populate(true); + AppLog.info("view group: "+obj.toJSON(), getGrant()); objTool.validateAndCreate(); }catch(Exception e){ - AppLog.error(e, getGrant()); + AppLog.error("view group ",e, getGrant()); } } From 706ac5c33314f0d82784d06a8987256c363644a0 Mon Sep 17 00:00:00 2001 From: "designer (Designer)" <> Date: Thu, 7 Nov 2024 15:44:33 +0100 Subject: [PATCH 58/74] Updated --- .checkstyle-configuration | 27 +++++++++++++++++++ AIBySimplicite.json | 19 ++++++++++++- module-info.json | 4 +-- pom.xml | 4 +-- .../commons/AIBySimplicite/AITools.java | 21 ++++++++++++++- .../workflows/AIBySimplicite/AIGenData.java | 17 +++++++++++- 6 files changed, 85 insertions(+), 7 deletions(-) create mode 100644 .checkstyle-configuration diff --git a/.checkstyle-configuration b/.checkstyle-configuration new file mode 100644 index 0000000..658100a --- /dev/null +++ b/.checkstyle-configuration @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AIBySimplicite.json b/AIBySimplicite.json index 766a441..9ad2be0 100644 --- a/AIBySimplicite.json +++ b/AIBySimplicite.json @@ -2883,7 +2883,7 @@ "name": "AiMonitoring.java" }, "obe_icon": null, - "obe_permalink": null, + "obe_permalink": "/ai-monitoring", "obe_widget": null, "row_module_id__mdl_name": "AIBySimplicite" } @@ -14127,6 +14127,23 @@ "pmg_perm_id__prm_prop": null, "row_module_id__mdl_name": "AIBySimplicite" } + }, + { + "object": "PermGroup", + "userkey": "PUBLIC AI_ADMIN AiMonitoring", + "item": { + "pmg_group_id__grp_name": "PUBLIC", + "pmg_perm_id__prm_group_id__grp_name": "AI_ADMIN", + "pmg_perm_id__prm_object": { + "item": {"obe_name": "AiMonitoring"}, + "icon": "img/system/external_object", + "label": "External object", + "userkeylabel": "AiMonitoring", + "object": "ObjectExternal" + }, + "pmg_perm_id__prm_prop": null, + "row_module_id__mdl_name": "AIBySimplicite" + } } ] } diff --git a/module-info.json b/module-info.json index cbb2376..624d5dc 100644 --- a/module-info.json +++ b/module-info.json @@ -1,9 +1,9 @@ { - "date": "2024-10-30 14:59:35", + "date": "2024-11-07 10:31:43", "name": "AIBySimplicite", "format": "json", "files": ["AIBySimplicite.json"], "repository": {"origin": {"uri": "https://github.com/simplicitesoftware/module_ai.git"}}, "version": "0.26", - "platform": "6.1.12" + "platform": "6.1.13" } \ No newline at end of file diff --git a/pom.xml b/pom.xml index f2448fc..0eaa70c 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ org.apache.maven.plugins maven-jar-plugin - 3.3.0 + 3.4.2 .gitkeep @@ -53,7 +53,7 @@ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ org.apache.maven.plugins maven-javadoc-plugin - 3.4.1 + 3.10.1 diff --git a/src/com/simplicite/commons/AIBySimplicite/AITools.java b/src/com/simplicite/commons/AIBySimplicite/AITools.java index a6554db..fb504bf 100644 --- a/src/com/simplicite/commons/AIBySimplicite/AITools.java +++ b/src/com/simplicite/commons/AIBySimplicite/AITools.java @@ -698,7 +698,9 @@ private static void parseText(String note,String trigger,JSONObject text,JSONArr } private static String normalize(String text){ text = removeAcent(text); - return Normalizer.normalize(text, Normalizer.Form.NFD).replaceAll("[\u0300-\u036F]", "").replaceAll("[^a-zA-Z0-9@.-]", " "); + text = Normalizer.normalize(text, Normalizer.Form.NFD).replaceAll("[\u0300-\u036F]", "").replaceAll("[^\\w\\(\\),`{}.\\[\\]\"@\\/:-]", " "); + text = replaceSymboleBySafeHTML(text); + return text; } public static String normalize(String text, boolean secure){ text = removeAcent(text); @@ -717,6 +719,23 @@ public static String removeAcent(String text){ return text; + } + private static String replaceSymboleBySafeHTML(String text){ + text = text.replaceAll("\\n", "
") + .replaceAll("\\{", "{") + .replaceAll("\\}", "}") + .replaceAll("\\(", "(") + .replaceAll("\\)", ")") + .replaceAll("\\[", "[") + .replaceAll("\\]", "]") + .replaceAll("\\.", ".") + .replaceAll("\\,", ",") + .replaceAll("\\`", "`") + .replaceAll("\\\"", """) + .replaceAll("\\@", "@") + .replaceAll("\\/", "/") + .replaceAll("\\-", "-"); + return text; } /** * reverse the historic array to have the exchange in the correct order diff --git a/src/com/simplicite/workflows/AIBySimplicite/AIGenData.java b/src/com/simplicite/workflows/AIBySimplicite/AIGenData.java index fca0309..2c8e0e5 100644 --- a/src/com/simplicite/workflows/AIBySimplicite/AIGenData.java +++ b/src/com/simplicite/workflows/AIBySimplicite/AIGenData.java @@ -67,7 +67,22 @@ public String genData(Processus p, ActivityFile context, ObjectContextWeb ctx, G if(context.getStatus() != ActivityFile.STATE_RUNNING) return null; if(!AITools.isAIParam(true)) return g.T(AI_SETTING_NEED); - return context.getDataValue("Data", "generate"); + String js ="function refactorButtons(){\r\n" + // + "\tconsole.log(\"test refactorButtons\");\r\n" + // + "\tlet deletebutton = $(\".btn[data-action='AI_GENDATA_RETRY']\");\r\n" + // + "\tlet nextbutton = $(\".btn[data-action='validate']\");\r\n" + // + "\tdeletebutton.removeClass(\"btn-action\");\r\n" + // + "\tdeletebutton.addClass(\"btn-secondary\");\r\n" + // + "\tlet parentDiv = $(\".btn[data-action='AI_GENDATA_RETRY']\").parent();\r\n" + // + "\tparentDiv.css(\"flex-direction\", \"row-reverse\");\r\n" + // + "\tdeletebutton.css(\"border-top-right-radius\", \"0px\");\r\n" + // + "\tdeletebutton.css(\"border-bottom-right-radius\", \"0px\");\r\n" + // + "\tnextbutton.css(\"border-top-right-radius\", \".25rem\");\r\n" + // + "\tnextbutton.css(\"border-bottom-right-radius\", \".25rem\");\r\n" + // + "}\r\n" + // + "refactorButtons();"; + + return context.getDataValue("Data", "generate")+""; } @Override From 7a5fc887ea633bef67a149498772a0941f9c226c Mon Sep 17 00:00:00 2001 From: "cbi (Candice Bimont)" Date: Thu, 7 Nov 2024 15:44:50 +0100 Subject: [PATCH 59/74] Updated From 836435dd7d0b11d50eb861e4d0f141c826ec6bc6 Mon Sep 17 00:00:00 2001 From: "cbi (Candice Bimont)" Date: Thu, 14 Nov 2024 18:00:12 +0100 Subject: [PATCH 60/74] Addition of temperture and other parameters to the chat interface and refactoring of the Caller tool --- AIBySimplicite-openapi-3.0.2.yml | 13 +- AIBySimplicite-swagger-2.0.yml | 12 +- AIBySimplicite.json | 214 +++++- README.md | 1 + module-info.json | 6 +- pom.xml | 4 +- resources/Disposition/default/AI_STYLE.less | 4 +- resources/Disposition/default/AiJsTools.js | 75 +- resources/ObjectExternal/AIChatBot/SCRIPT.js | 2 +- .../AIProcessResource/CHAT_BOT_SCRIPT.js | 10 +- resources/ObjectInternal/AIProvider/CLASS.js | 402 +++++++++++ .../commons/AIBySimplicite/AITools.java | 649 +++++++++++------- .../extobjects/AIBySimplicite/AIRestAPI.java | 61 +- 13 files changed, 1147 insertions(+), 306 deletions(-) create mode 100644 resources/ObjectInternal/AIProvider/CLASS.js diff --git a/AIBySimplicite-openapi-3.0.2.yml b/AIBySimplicite-openapi-3.0.2.yml index 4fba9b7..1ffd7a4 100644 --- a/AIBySimplicite-openapi-3.0.2.yml +++ b/AIBySimplicite-openapi-3.0.2.yml @@ -2,7 +2,7 @@ # / __(_)_ __ _ __| (_)__(_) |_ /_/ # \__ \ | ' \| '_ \ | / _| | _/ -_) # |___/_|_|_|_| .__/_|_\__|_|\__\___| -# |_| Module: AIBySimplicite 0.26 +# |_| Module: AIBySimplicite 0.27 components: schemas: Error404: @@ -189,6 +189,9 @@ components: aiPrvHelp: description: Key and endpoints help type: string + aiPrvUserParameters: + description: Prv user parameters + type: string row_id: description: Unique technical row ID type: string @@ -1559,6 +1562,12 @@ paths: name: aiPrvSttUrl description: Search filter for Speech to text url required: false + - schema: + type: string + in: query + name: aiPrvUserParameters + description: Search filter for Prv user parameters + required: false tags: - AIProvider info: @@ -1571,7 +1580,7 @@ info: email: contact@simplicitesoftware.com description: API for module AIBySimplicite title: AIBySimplicite - version: '0.26' + version: '0.27' tags: - name: AiGroupGuiDesc description: Group gui description diff --git a/AIBySimplicite-swagger-2.0.yml b/AIBySimplicite-swagger-2.0.yml index 9ac1655..c88fd5a 100644 --- a/AIBySimplicite-swagger-2.0.yml +++ b/AIBySimplicite-swagger-2.0.yml @@ -2,7 +2,7 @@ # / __(_)_ __ _ __| (_)__(_) |_ /_/ # \__ \ | ' \| '_ \ | / _| | _/ -_) # |___/_|_|_|_| .__/_|_\__|_|\__\___| -# |_| Module: AIBySimplicite 0.26 +# |_| Module: AIBySimplicite 0.27 basePath: /api paths: /rest/AiMetricsHist: @@ -1098,6 +1098,11 @@ paths: description: Search filter for Speech to text url type: string required: false + - in: query + name: aiPrvUserParameters + description: Search filter for Prv user parameters + type: string + required: false tags: - AIProvider securityDefinitions: @@ -1292,6 +1297,9 @@ definitions: aiPrvHelp: description: Key and endpoints help type: string + aiPrvUserParameters: + description: Prv user parameters + type: string row_id: description: Unique technical row ID type: string @@ -1355,7 +1363,7 @@ info: email: contact@simplicitesoftware.com description: API for module AIBySimplicite title: AIBySimplicite - version: '0.26' + version: '0.27' tags: - name: AiGroupGuiDesc description: Group gui description diff --git a/AIBySimplicite.json b/AIBySimplicite.json index 9ad2be0..a22fca9 100644 --- a/AIBySimplicite.json +++ b/AIBySimplicite.json @@ -4,7 +4,7 @@ "item": { "mdl_name": "AIBySimplicite", "mdl_prefix": "ai", - "mdl_version": "0.26", + "mdl_version": "0.27", "mdl_type": "T", "mdl_icon": null, "mdl_url": "{\n \"origin\": {\"uri\": \"https://github.com/simplicitesoftware/module_ai.git\"},\n \"type\": \"git\",\n \"branch\": \"6.1\"\n}", @@ -2443,6 +2443,52 @@ "fld_incrementsyntax": null } }, + { + "object": "Field", + "userkey": "aiPrvUserParameters", + "item": { + "fld_name": "aiPrvUserParameters", + "fld_dbname": "ai_prv_user_parameters", + "fld_visible": "3", + "fld_updatable": [ + "3", + "2" + ], + "fld_required": false, + "fld_fonctid": false, + "fld_research": "1", + "fld_researchreq": "0", + "fld_sort": "C", + "fld_more": false, + "fld_listmore": true, + "fld_listsum": null, + "fld_exportable": true, + "fld_tray": null, + "fld_type": "13", + "fld_type_id__flt_code": null, + "fld_list_id__lov_name": null, + "fld_copy": true, + "fld_size": 5000, + "fld_minsize": null, + "fld_precision": null, + "fld_fromdate_id__fld_name": null, + "fld_dfault": null, + "fld_indexable": false, + "fld_autocomp": "0", + "fld_groupby": false, + "fld_updall": true, + "fld_case": null, + "fld_righttoleft": false, + "fld_rendering": "JSON", + "fld_speech": null, + "fld_calc": null, + "fld_objlist": null, + "fld_comment": null, + "fld_classification": null, + "row_module_id__mdl_name": "AIBySimplicite", + "fld_incrementsyntax": null + } + }, { "object": "Field", "userkey": "aiSelectProcess", @@ -2714,7 +2760,7 @@ "ofa_name": "AIProvider-1", "ofa_position": 1, "ofa_title": false, - "ofa_ui": "
\n
<\/div>\n
\n
\n
<\/div>\n <\/div>\n
\n
<\/div>\n
<\/div>\n <\/div>\n <\/div>\n
<\/div>\n<\/div>", + "ofa_ui": "
\n
<\/div>\n
\n
\n
<\/div>\n <\/div>\n
\n
<\/div>\n
<\/div>\n
<\/div>\n <\/div>\n <\/div>\n
<\/div>\n<\/div>", "ofa_icon": "star", "row_module_id__mdl_name": "AIBySimplicite" } @@ -2731,6 +2777,18 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, + { + "object": "ObjectFieldArea", + "userkey": "AIProvider-3", + "item": { + "ofa_name": "AIProvider-3", + "ofa_position": 3, + "ofa_title": true, + "ofa_ui": "
<\/div>", + "ofa_icon": "user", + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "ObjectFieldArea", "userkey": "AiSettings-1", @@ -4269,6 +4327,41 @@ "obf_joined_id__obf_order": null } }, + { + "object": "ObjectFieldSystem", + "userkey": "AIProvider aiPrvUserParameters 90", + "item": { + "obf_object_id__obo_name": "AIProvider", + "obf_field_id__fld_name": "aiPrvUserParameters", + "obf_order": 90, + "obf_group_by": null, + "obf_dfault_order": null, + "obf_input": null, + "obf_ref_field_id__fld_name": null, + "obf_ref_object_id__obo_name": null, + "obf_cascad": null, + "obf_card": null, + "obf_visible": null, + "obf_ref_export": true, + "obf_copy": null, + "obf_ref_order": null, + "obf_fld_visible": null, + "obf_fld_required": null, + "obf_fld_updatable": null, + "obf_fld_research": null, + "obf_fld_more": null, + "obf_fld_listmore": null, + "obf_fld_researchreq": null, + "obf_fld_dfault": null, + "obf_fld_exportable": null, + "obf_fld_uk": null, + "obf_area_id__ofa_name": "AIProvider-3", + "row_module_id__mdl_name": "AIBySimplicite", + "obf_joined_id__obf_object_id__obo_name": null, + "obf_joined_id__obf_field_id__fld_name": null, + "obf_joined_id__obf_order": null + } + }, { "object": "ObjectFieldSystem", "userkey": "Group aiGroupGuiVirtual 1", @@ -9511,6 +9604,30 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, + { + "object": "Resource", + "userkey": "AIProvider * CLASS", + "item": { + "res_object": { + "item": {"obo_name": "AIProvider"}, + "icon": "img/system/business_object", + "label": "Business object", + "userkeylabel": "AIProvider", + "object": "ObjectInternal" + }, + "res_type": "JS", + "res_lang": "ANY", + "res_code": "CLASS", + "res_cached": false, + "res_file": { + "path": "resources/ObjectInternal/AIProvider/CLASS.js", + "mime": "text/javascript", + "name": "class.js" + }, + "res_image": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "Resource", "userkey": "AiGroupGuiDesc * AI_DOMAIN_TEMPLATE_DESC_ENU", @@ -11290,6 +11407,50 @@ "tsl_tooltip": null, "row_module_id__mdl_name": "AIBySimplicite" } + }, + { + "object": "TranslateField", + "userkey": "aiPrvUserParameters English", + "item": { + "tsl_object": { + "item": {"fld_name": "aiPrvUserParameters"}, + "icon": "img/system/field", + "label": "Field", + "userkeylabel": "aiPrvUserParameters", + "object": "Field" + }, + "tsl_lang": "ENU", + "tsl_value": "Prv user parameters", + "tsl_simplehelp": null, + "tsl_plural_value": null, + "tsl_short_value": null, + "tsl_placeholder": null, + "tsl_listhelp": null, + "tsl_tooltip": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "TranslateField", + "userkey": "aiPrvUserParameters French", + "item": { + "tsl_object": { + "item": {"fld_name": "aiPrvUserParameters"}, + "icon": "img/system/field", + "label": "Field", + "userkeylabel": "aiPrvUserParameters", + "object": "Field" + }, + "tsl_lang": "FRA", + "tsl_value": "User Parameters", + "tsl_simplehelp": null, + "tsl_plural_value": null, + "tsl_short_value": null, + "tsl_placeholder": null, + "tsl_listhelp": null, + "tsl_tooltip": null, + "row_module_id__mdl_name": "AIBySimplicite" + } } ] }, @@ -11650,6 +11811,38 @@ "tsl_value": "Metrics", "row_module_id__mdl_name": "AIBySimplicite" } + }, + { + "object": "TranslateFieldArea", + "userkey": "AIProvider-3 English", + "item": { + "tsl_object": { + "item": {"ofa_name": "AIProvider-3"}, + "icon": "img/system/field_area", + "label": "Fields area", + "userkeylabel": "AIProvider-3", + "object": "ObjectFieldArea" + }, + "tsl_lang": "ENU", + "tsl_value": "Provider -3", + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "TranslateFieldArea", + "userkey": "AIProvider-3 French", + "item": { + "tsl_object": { + "item": {"ofa_name": "AIProvider-3"}, + "icon": "img/system/field_area", + "label": "Fields area", + "userkeylabel": "AIProvider-3", + "object": "ObjectFieldArea" + }, + "tsl_lang": "FRA", + "tsl_value": "User parameters", + "row_module_id__mdl_name": "AIBySimplicite" + } } ] }, @@ -14127,23 +14320,6 @@ "pmg_perm_id__prm_prop": null, "row_module_id__mdl_name": "AIBySimplicite" } - }, - { - "object": "PermGroup", - "userkey": "PUBLIC AI_ADMIN AiMonitoring", - "item": { - "pmg_group_id__grp_name": "PUBLIC", - "pmg_perm_id__prm_group_id__grp_name": "AI_ADMIN", - "pmg_perm_id__prm_object": { - "item": {"obe_name": "AiMonitoring"}, - "icon": "img/system/external_object", - "label": "External object", - "userkeylabel": "AiMonitoring", - "object": "ObjectExternal" - }, - "pmg_perm_id__prm_prop": null, - "row_module_id__mdl_name": "AIBySimplicite" - } } ] } diff --git a/README.md b/README.md index f23af56..108765c 100644 --- a/README.md +++ b/README.md @@ -177,6 +177,7 @@ For detailed examples on how to generate modules, interact with business chatbot | `aiPrvCompletionUrl` | url(100) | yes | yes | | - | | `aiPrvPingUrl` | url(100) | | yes | | - | | `aiPrvSttUrl` | url(100) | | yes | | - | +| `aiPrvUserParameters` | text(5000) | | yes | | - | `AIGenData` business process definition --------------------------------------- diff --git a/module-info.json b/module-info.json index 624d5dc..0d84475 100644 --- a/module-info.json +++ b/module-info.json @@ -1,9 +1,9 @@ { - "date": "2024-11-07 10:31:43", + "date": "2024-11-14 17:53:50", "name": "AIBySimplicite", "format": "json", "files": ["AIBySimplicite.json"], "repository": {"origin": {"uri": "https://github.com/simplicitesoftware/module_ai.git"}}, - "version": "0.26", - "platform": "6.1.13" + "version": "0.27", + "platform": "6.1.14" } \ No newline at end of file diff --git a/pom.xml b/pom.xml index 0eaa70c..875f6e7 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 4.0.0 com.simplicite.modules - 0.26-SNAPSHOT + 0.27-SNAPSHOT AIBySimplicite AIBySimplicite Simplicite module: AIBySimplicite @@ -19,7 +19,7 @@ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 11 simplicite-modules-AIBySimplicite AIBySimplicite - 0.26 + 0.27 src,resources AIBySimplicite.xml,AIBySimplicite.json,AIBySimplicite-*.yml,configuration/**,**.min.js,**.min.css resources/**.js,src/**.java diff --git a/resources/Disposition/default/AI_STYLE.less b/resources/Disposition/default/AI_STYLE.less index 24e61e4..1b6d4b5 100644 --- a/resources/Disposition/default/AI_STYLE.less +++ b/resources/Disposition/default/AI_STYLE.less @@ -24,6 +24,9 @@ font-size: 16px; // Taille du texte adaptée color: #333333; // Couleur du texte */ } +#chatbot_send_button{ + margin-left: 10px; +} .ai-default-schema-content{ display: flex; justify-content: center; @@ -34,7 +37,6 @@ .user-message { flex: 1; padding: 5px; - margin-right: 10px; max-height: 55vh; resize: none; border: #e2e2e2; diff --git a/resources/Disposition/default/AiJsTools.js b/resources/Disposition/default/AiJsTools.js index 3745508..6c21cd5 100644 --- a/resources/Disposition/default/AiJsTools.js +++ b/resources/Disposition/default/AiJsTools.js @@ -1,15 +1,36 @@ -var AiJsTools = AiJsTools || (function() { +var AiJsTools = AiJsTools || (function(param) { let useAsync = true; let url = Simplicite.ROOT+"/ext/AIRestAPI"; // authenticated webservice let app = $ui.getApp(); let isSpeechRecognitionSupported = null; - + let provider = "Open AI";//param; + let providerObj; + let providerParams; + + getProviderParams(); let botName= "SimpliBot"; getBotName(); let userName = app.getGrant().login; if(app.getGrant().firstname ){ userName =app.getGrant().firstname; } + async function getProviderParams() { + let obj = app.getBusinessObject("AIProvider"); + obj.search(function(r) { + if (r && r.length > 0) { + obj.select(function(params) { + providerObj = obj; + providerParams=obj.getUserParameters()// Affiche les paramètres sélectionnés + console.log(providerParams); + }, r[0].row_id, null); + } else { + console.log("Aucun résultat trouvé."); + } + }, {'aiPrvProvider': 'Open AI'}, null); + } + function getUserProviderParams(){ + return providerParams; + } function getBotName(){ let url = Simplicite.ROOT+"/ext/AIRestAPI"; // authenticated webservice let postParams = {"reqType":"BOT_NAME"}; @@ -77,6 +98,7 @@ var AiJsTools = AiJsTools || (function() { if(Speech && isSpeechRecognitionSupported){ defaultButton(ctn,"speech"); } + addLLMParams(provider,ctn); $(window).resize(function() { resizeUp($(ctn).parent(),$(ctn).parent().parent().find(".chat-messages")); }); @@ -178,7 +200,7 @@ var AiJsTools = AiJsTools || (function() { content = {"type":"image_url","image_url":{"url":img.attr("src")}}; contents.push(content); } - text.content = contents + text.content = contents; historic.push(JSON.stringify(text)); text={}; text.role = "assistant"; @@ -194,8 +216,9 @@ var AiJsTools = AiJsTools || (function() { if(userImage){ prompt.push({"type":"image_url","image_url":{"url":userImage}}); } - return {prompt:JSON.stringify(prompt), specialisation:specialisation, historic: JSON.stringify(historic)}; // post params + return {prompt:JSON.stringify(prompt), specialisation:specialisation, historic: JSON.stringify(historic), providerParams: providerParams,reqType:"chatBot"}; // post params } + //speech recognition let mediaRecorder; let audioChunks = []; @@ -295,7 +318,7 @@ var AiJsTools = AiJsTools || (function() { inputCtn.onclick = function() { resetButtons(inputCtn, messageCtn, sendButton); stopRecording(); - } + }; } function resetButtons(inputCtn, messageCtn, sendButton){ $(inputCtn.parentElement).find("#cancel-recording").remove(); @@ -375,6 +398,45 @@ var AiJsTools = AiJsTools || (function() { } div.append(span); return div; + } + function addLLMParams(provider,ctn){ + + if(provider == "Open AI"){ + let htmlButton = document.createElement('button'); + htmlButton.id = "params"; + htmlButton.className = "chat-icon-button fas fa-cog"; + htmlButton.onclick = () => {updateLLMParams(provider);}; + htmlButton.title = "llm parameters"; + $(ctn).find('.user-message').after(htmlButton); + } + } + function updateLLMParams(provider){ + console.log("params: ",providerParams); + // Créez un formulaire HTML à partir des gptParams + let formHtml = providerObj.getUserParametersForm(providerParams); + + + $ui.confirm({ + "name": "params", + "title":"Parameters", + "content": formHtml, + "dontAskAgain" : false, + "moveable": true, + "onOk":() => {saveLLMParams();} + }); + } + + function saveLLMParams(){ + const formData = new FormData(document.getElementById('llmParamsForm')); + const updatedParams = {}; + formData.forEach((value, key) => { + console.log(key,": ",value); + updatedParams[key] = value; + }); + providerParams = updatedParams; + console.log("save: ", gptParams); + + } return { useAsync: useAsync, @@ -389,6 +451,7 @@ var AiJsTools = AiJsTools || (function() { getDisplayUserMessage: getDisplayUserMessage, getDisplayBotMessage: getDisplayBotMessage, loadResultInAceEditor:loadResultInAceEditor, - removeimg:removeimg + removeimg:removeimg, + getUserProviderParams:getUserProviderParams }; })(); diff --git a/resources/ObjectExternal/AIChatBot/SCRIPT.js b/resources/ObjectExternal/AIChatBot/SCRIPT.js index 4380487..a38b59e 100644 --- a/resources/ObjectExternal/AIChatBot/SCRIPT.js +++ b/resources/ObjectExternal/AIChatBot/SCRIPT.js @@ -61,7 +61,7 @@ var AIChatBot = AIChatBot || (function() { if(AiJsTools){ postParams = AiJsTools.getPostParams(ctn,specialisation); }else{ - postParams = {prompt:userMessage, specialisation: specialisation, historic: JSON.stringify(historic)}; + postParams = {prompt:userMessage, specialisation: specialisation, historic: JSON.stringify(historic),reqType:"chatBot"}; } // Affichez la question de l'utilisateur et la réponse du chatbot dans le chat diff --git a/resources/ObjectExternal/AIProcessResource/CHAT_BOT_SCRIPT.js b/resources/ObjectExternal/AIProcessResource/CHAT_BOT_SCRIPT.js index d8739b4..eb5d55f 100644 --- a/resources/ObjectExternal/AIProcessResource/CHAT_BOT_SCRIPT.js +++ b/resources/ObjectExternal/AIProcessResource/CHAT_BOT_SCRIPT.js @@ -88,8 +88,14 @@ var AIWfChatBot = AIWfChatBot || (function() { if(userImage){ prompt.push({"type":"image_url","image_url":{"url":userImage}}); } - let postParams = {prompt:JSON.stringify(prompt), specialisation: "You help design uml for object-oriented applications. Without function and whith relation description. Respond with a text", historic: JSON.stringify(historic)}; // post params - + let providerParams; + if(AiJsTools){ + providerParams = AiJsTools.getUserProviderParams(); + } + console.log(providerParams); + + let postParams = {prompt:JSON.stringify(prompt), specialisation: "You help design uml for object-oriented applications. Without function and whith relation description. Respond with a text", historic: JSON.stringify(historic),providerParams: providerParams,reqType:"chatBot"}; // post params + // Efface le champ de saisie utilisateur document.getElementById('module_user_message').value = ''; $("#input-img img").removeAttr("src"); diff --git a/resources/ObjectInternal/AIProvider/CLASS.js b/resources/ObjectInternal/AIProvider/CLASS.js new file mode 100644 index 0000000..ccf74e1 --- /dev/null +++ b/resources/ObjectInternal/AIProvider/CLASS.js @@ -0,0 +1,402 @@ +/** + * JS Class AIProvider with front hooks + * + * - extends by default 'Simplicite.UI.BusinessObject' and can be changed with any inherited object class + * - 'Simplicite.UI.BusinessObject' extends 'Simplicite.Ajax.BusinessObject': native methods to access data can be overrided + * - do not call 'super' method to explicitly override the default behavior + * - unimplemented hooks can be removed + * - add temporarily 'debugger' in your code to debug within your browser console + * + * @class + */ +Simplicite.UI.BusinessObjects.AIProvider = class extends Simplicite.UI.BusinessObject { + +// ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ +// ZZZ For lisibility of your code, keep *only* the hooks you need and remove ZZZ +// ZZZ the empty ones (the ones that only call the super hooks) ZZZ +// ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ + +/** + * Front hook when object is instantiated. + * Useful to override locals (cloned from Simplicite.UI.Globals) properties before usage. + * @param locals UI locals properties (shorthand to this.locals.ui) + * @function + */ +onLoad(locals) { + // empty by default + super.onLoad(locals); +} + +/** + * Front hook before loading form data + * @param ctn Form container + * @param obj Object (same as this) + * @param p Form parameters + * @function + */ +beforeLoadForm(ctn, obj, p) { + // empty by default + super.beforeLoadForm(ctn, obj, p); +} + +/** + * Front hook when record is not found (default NO_ROW_FOUND alert + list redirection) + * @param ctn Form container + * @param obj Object (same as this) + * @param rowId Object row ID + * @function + */ +noRowFound(ctn, obj, rowId) { + // default implementation + super.noRowFound(ctn, obj, rowId); +} + +/** + * Front hook before rendering form + * @param ctn Form container + * @param obj Object (same as this) + * @param p Form parameters + * @function + */ +preLoadForm(ctn, obj, p) { + // empty by default + super.preLoadForm(ctn, obj, p); +} + +/** + * Front hook to display the form + * @param ctn Form container + * @param obj Object (same as this) + * @param p Form parameters + * @param cbk callback when rendered + * @function + */ +displayForm(ctn, obj, p, cbk) { + // default implementation + super.displayForm(ctn, obj, p, cbk); +} + +/** + * Front hook when object form is loaded + * @param ctn Form container + * @param obj Object (same as this) + * @param p Form parameters + * @function + */ +onLoadForm(ctn, obj, p) { + // empty by default + super.onLoadForm(ctn, obj, p); +} + +/** + * Front hook when object form is unloaded + * @param ctn Form container + * @param obj Object (same as this) + * @param p Form parameters + * @function + */ +onUnloadForm(ctn, obj, p) { + // empty by default + super.onUnloadForm(ctn, obj, p); +} + +/** + * Front hook before loading list data + * @param ctn List container + * @param obj Object (same as this) + * @param p List parameters + * @function + */ +beforeLoadList(ctn, obj, p) { + // empty by default + super.beforeLoadList(ctn, obj, p); +} + +/** + * Front hook before rendering list + * @param ctn List container + * @param obj Object (same as this) + * @param p List parameters + * @function + */ +preLoadList(ctn, obj, p) { + // empty by default + super.preLoadList(ctn, obj, p); +} + +/** + * Front hook to display the list + * @param ctn List container + * @param obj Object (same as this) + * @param p List parameters + * @param cbk callback when rendered + * @function + */ +displayList(ctn, obj, p, cbk) { + // default implementation + super.displayList(ctn, obj, p, cbk); +} + +/** + * Front hook to display one list record + * @param ctn List container + * @param row Row container (tr or div) + * @param obj Object (same as this) + * @param id Row ID + * @param p List parameters + * @param cbk callback when rendered + * @function + */ +displayListRow(ctn, row, obj, id, p, cbk) { + // default implementation + super.displayListRow(ctn, row, obj, id, p, cbk); +} + +/** + * Front hook when a list row is displayed + * @param ctn List container + * @param obj Object (same as this) + * @param id Row ID + * @param item Row item + * @param row Row container (tr or div) + * @function + */ +onLoadListRow(ctn, obj, id, item, row) { + // empty by default + super.onLoadListRow(ctn, obj, id, item, row); +} + +/** + * Front hook when a list row is unloaded + * @param ctn List container + * @param obj Object (same as this) + * @param id Row ID + * @param item Row item + * @param row Row container (tr or div) + * @function + */ +onUnloadListRow(ctn, obj, id, item, row) { + // empty by default + super.onUnloadListRow(ctn, obj, id, item, row); +} + +/** + * Front hook when object list is loaded + * @param ctn List container + * @param obj Object (same as this) + * @param p List parameters + * @function + */ +onLoadList(ctn, obj, p) { + // empty by default + super.onLoadList(ctn, obj, p); +} + +/** + * Front hook when object list is unloaded + * @param ctn List container + * @param obj Object (same as this) + * @param p List parameters + * @function + */ +onUnloadList(ctn, obj, p) { + // empty by default + super.onUnloadList(ctn, obj, p); +} + +/** + * Front hook before loading search form + * @param ctn Search container + * @param obj Object (same as this) + * @param p Search parameters + * @function + */ +beforeLoadSearch(ctn, obj, p) { + // empty by default + super.beforeLoadSearch(ctn, obj, p); +} + +/** + * Front hook to display the search form + * @param ctn Search container + * @param obj Object (same as this) + * @param p Search parameters + * @param cbk callback when rendered + * @function + */ +displaySearch(ctn, obj, p, cbk) { + // default implementation + super.displaySearch(ctn, obj, p, cbk); +} + +/** + * Front hook when object search is loaded + * @param ctn Search container + * @param obj Object (same as this) + * @param p Search parameters + * @function + */ +onLoadSearch(ctn, obj, p) { + // empty by default + super.onLoadSearch(ctn, obj, p); +} + +/** + * Front hook when object search is unloaded + * @param ctn Search container + * @param obj Object (same as this) + * @param p Search parameters + * @function + */ +onUnloadSearch(ctn, obj, p) { + // empty by default + super.onUnloadSearch(ctn, obj, p); +} + +/** + * Front hook before loading summary + * @param ctn Form container + * @param obj Object (same as this) + * @param p Parameters + * @function + */ +beforeLoadSummary(ctn, obj, p) { + // empty by default + super.beforeLoadSummary(ctn, obj, p); +} + +/** + * Front hook to display the object summary + * @param ctn Summary container + * @param mo Meta object + * @param obj Object (same as this) + * @param cbk callback when rendered + * @function + */ +displaySummary(ctn, mo, obj, cbk) { + // default implementation + super.displaySummary(ctn, mo, obj, cbk); +} + +/** + * Front hook when object summary is loaded + * @param ctn Summary container + * @param mo Meta object + * @param obj Object (same as this) + * @param p Parameters + * @function + */ +onloadSummary(ctn, mo, obj, p) { + // empty by default + super.onloadSummary(ctn, mo, obj, p); +} + +/** + * Front hook before loading calendar + * @param ctn container + * @param obj Object (same as this) + * @param agd Agenda definition + * @param p parameters + * @function + */ +beforeLoadAgenda(ctn, obj, agd, p) { + // empty by default + super.beforeLoadAgenda(ctn, obj, agd, p); +} + +/** + * Front hook when calendar is loaded + * @param ctn container + * @param obj Object (same as this) + * @param agd Agenda definition + * @param p parameters + * @function + */ +onLoadAgenda(ctn, obj, agd, p) { + // empty by default + super.onLoadAgenda(ctn, obj, agd, p); +} + +/** + * Front hook when calendar is unloaded + * @param ctn container + * @param obj Object (same as this) + * @param agd Agenda definition + * @param p parameters + * @function + */ +onUnloadAgenda(ctn, obj, agd, p) { + // empty by default + super.onUnloadAgenda(ctn, obj, agd, p); +} + +/** + * Front hook before loading timesheet + * @param ctn container + * @param obj Object (same as this) + * @param p parameters + * @function + */ +beforeLoadTimesheet(ctn, obj, p) { + // empty by default + super.beforeLoadTimesheet(ctn, obj, p); +} + +/** + * Front hook when timesheet is loaded + * @param ctn container + * @param obj Object (same as this) + * @param ts Timesheet definition + * @function + */ +onLoadTimesheet(ctn, obj, ts) { + // empty by default + super.onLoadTimesheet(ctn, obj, ts); +} + +/** + * Front hook when timesheet is unloaded + * @param ctn container + * @param obj Object (same as this) + * @param ts Timesheet definition + * @function + */ +onUnloadTimesheet(ctn, obj, ts) { + // empty by default + super.onUnloadTimesheet(ctn, obj, ts); +} + +getUserParametersForm(providersParams){ + const grantLang = $grant.lang == 'FRA'?'FRA':'ENU'; + console.log("getUserParameters"); + let context = this.item.aiPrvUserParameters; + let formHtml = '
'; + if(!context) return ""; + for (const [key, value] of Object.entries(context)) { + let label = value.label[grantLang]; + let help = value.help[grantLang]; + let inputValue = providersParams ? providersParams[key] : value.default; + console.log(inputValue," : ",value.default); + if(!inputValue) inputValue =value.default; + formHtml += `
+ +
+ +
+
`; + } + formHtml += '
'; + return formHtml; +} + +getUserParameters(){ + console.log("getuserparams"); + let params =this.item.aiPrvUserParameters; + let defaultValue ={}; + for (const [key, value] of Object.entries(params)) { + defaultValue[key] = value.default; + } + return defaultValue; +} + +}; // class Simplicite.UI.BusinessObjects.AIProvider diff --git a/src/com/simplicite/commons/AIBySimplicite/AITools.java b/src/com/simplicite/commons/AIBySimplicite/AITools.java index fb504bf..c39ccef 100644 --- a/src/com/simplicite/commons/AIBySimplicite/AITools.java +++ b/src/com/simplicite/commons/AIBySimplicite/AITools.java @@ -1,4 +1,5 @@ package com.simplicite.commons.AIBySimplicite; + import org.json.JSONArray; import org.json.JSONObject; import org.json.JSONException; @@ -59,6 +60,11 @@ public class AITools implements java.io.Serializable { private static final String ASSISTANT_ROLE="assistant"; private static final String SYSTEM_ROLE= "system"; private static final String HTML_LEFT_COLUMN_ID = "left_column"; + private static final String CALLER_PARAM_SPE ="specialisation"; + private static final String CALLER_PARAM_HISTORIC = "historic"; + private static final String CALLER_PARAM_SECURE = "secure"; + private static final String CALLER_PARAM_SAFE_SPE ="isSafeSpe"; + private static final String CALLER_PARAM_TOKEN ="maxToken"; private static final String MAX_TOKEN = "max_tokens"; public static final String TYPE_TEXT = "text"; @@ -85,7 +91,6 @@ public class AITools implements java.io.Serializable { private static String aiProvider = getProvider(); private static String apiKey = getAIParam(API_KEY); private static String completionUrl = getAIParam(COMPLETION_KEY); - public static class AITypeException extends Exception { private static final long serialVersionUID = 1L; @@ -93,7 +98,273 @@ public AITypeException(String object, String classname, String needClass) { super("Invalid type for "+object+": "+classname+" need "+needClass); } } - + private static class AICallerParams { + private String specialisation; + private JSONArray prompt; + private JSONArray historic; + private JSONObject providerParams; + private int maxToken = 1500; + private boolean secure = false; + private boolean isSafeSpe = false; + private AICallerParams(Object promptObject,JSONObject params) throws AITypeException{ + //prompt to JSONArray + if(promptObject instanceof String){ + prompt = new JSONArray(); + String strPrompt = normalize((String)promptObject,secure); + prompt.put(getformatedContentByType(strPrompt,TYPE_TEXT,false)); + + }else if(promptObject instanceof JSONArray){ + prompt= (JSONArray)promptObject; + }else{ + AppLog.info("Prompt must be a String or a JSONArray"); + throw new AITypeException("prompt", promptObject.getClass().getName(), "String or JSONArray"); + } + specialisation = params.optString(CALLER_PARAM_SPE); + historic = params.optJSONArray(CALLER_PARAM_HISTORIC, new JSONArray()); + providerParams = params.optJSONObject("providerParams", new JSONObject()); + secure = params.optBoolean(CALLER_PARAM_SECURE, secure); + isSafeSpe = params.optBoolean(CALLER_PARAM_SAFE_SPE, isSafeSpe); + if(!Tool.isEmpty(aiApiParam)) { + maxToken=aiApiParam.getInt(MAX_TOKEN_PARAM_KEY); + } + if(params.has(CALLER_PARAM_TOKEN)){ + Object token = params.get(CALLER_PARAM_TOKEN); + if(token instanceof Integer){ + maxToken = (int)token; + }else if(token instanceof Boolean && !(boolean)token){ + maxToken = 0; + } + } + } + /** + * Function to format the call to chatAI API. + * Need the api key parameter set up with your key. + * Use the aiApiParam hist_depth parameter to limit the number of exchanges in the historic (useful to limit the number off token of requests). + * @param g Grant + * @param specialisation Prompt to specialise chatbot (ex: You're a java developer). + * @param prompt + * @param historic exchange historic for contextual response + * @param maxToken number of tokens allow in response + * @return If API return code is 200: API answer else: error return. + */ + public JSONObject aiCall(Grant g){ + return new JSONObject( aiCaller(g)); + } + private String aiCaller(Grant g){ + specialisation = removeAcent(specialisation); + if(!isSafeSpe) specialisation = JSONObject.quote(normalize(specialisation,true)); + if("\"\"".equals(specialisation)) specialisation = ""; + prompt = parsedPrompts(prompt,secure); + String model =getAIParam(MODEL_KEY); + boolean isClaudeAPI = CLAUDE_LLM.equals(llm); + + if(Tool.isEmpty(completionUrl)){ + AppLog.info("completion url not set", g); + return ""; + } + try { + URI url = new URI(completionUrl); + HttpURLConnection connection = (HttpURLConnection) url.toURL().openConnection(); + connection.setRequestMethod("POST"); + connection.setRequestProperty("Content-Type", "application/json"); + connection.setDoOutput(true); + addSpecificHeaders(connection,apiKey); + + // format data + JSONObject postData = new JSONObject(); + if(maxToken>0) + postData.put(MAX_TOKEN, maxToken); + if(!Tool.isEmpty(providerParams)){ + for(String key : providerParams.keySet()) { + Object data = providerParams.get(key); + if(!Tool.isEmpty(data)){ + try{ + float dataFloat = parseFloatParam(data); + postData.put(key,dataFloat); + }catch(AITypeException e){ + AppLog.warning(e.getMessage()); + } + } + + } + } + if(!Tool.isEmpty(model)) + postData.put(MODEL_KEY, model); + JSONArray messages = new JSONArray(); + // format specialisation. + if(!Tool.isEmpty(specialisation)) + messages.put(new JSONObject().put("role",SYSTEM_ROLE).put(CONTENT_KEY,specialisation)); + // add historic (restrict to Param histDepth the number of messages ) + if(!Tool.isEmpty(historic)){ + messages.putAll(getCleanHistoric(historic)); + } + + + messages.put(new JSONObject().put("role","user").put(CONTENT_KEY,prompt)); + postData.put(MESSAGES_KEY, messages); + + if(HUGGINGFACE_LLM.equals(llm)){ + postData = getHuggingFormatData(postData); + } + if(isClaudeAPI){ + postData = getClaudeFormatData(postData); + } + if(Boolean.TRUE.equals(AI_DEBUG_LOGS)){ + AppLog.info("post data :"+postData.toString(1),g); + } + try (DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream())) { + outputStream.writeBytes(postData.toString()); + outputStream.flush(); + } + + int responseCode = connection.getResponseCode(); + if(responseCode!=200){ + JSONObject error = readError(connection,responseCode,g); + return Tool.isEmpty(error)?"":error.toString(); + + } + + return readResponse(connection,g); + + + } catch (IOException | URISyntaxException e) { + AppLog.error(e,g); + } + return ""; + + } + private static float parseFloatParam(Object param) throws AITypeException { + if(param instanceof Number) + return ((Number)param).floatValue(); + if(param instanceof String) + return Float.parseFloat((String)param); + throw new AITypeException("provider parameters",param.getClass().getName(), "number"); + + } + private static JSONObject getClaudeFormatData(JSONObject postData){ + JSONArray messages = postData.getJSONArray(MESSAGES_KEY); + int toremove = -1; + + for (int i = 0; i < messages.length(); i++) { + JSONObject message = messages.getJSONObject(i); + // Perform your condition here + if (SYSTEM_ROLE.equals(message.optString("role"))) { + String content = message.optString(CONTENT_KEY); + postData.put(SYSTEM_ROLE, content); + toremove = i; + + }else if("user".equals(message.optString("role")) && !Tool.isEmpty(message.optString(CONTENT_KEY))){// to clomplete + JSONArray contentArray = message.optJSONArray(CONTENT_KEY); + for(int j = 0; j < contentArray.length(); j++){ + JSONObject contentJson = contentArray.getJSONObject(j); + if(TYPE_IMAGE_URL.equals(contentJson.optString("type"))){ + refactorImageForClaudeAPI(contentJson); + } + } + } + } + if(toremove>=0){ + messages.remove(toremove); + } + if(!postData.has(MAX_TOKEN)){ + postData.put(MAX_TOKEN,aiApiParam.getInt(MAX_TOKEN_PARAM_KEY)); + } + return postData; + } + private static void refactorImageForClaudeAPI(JSONObject contentJson){ + contentJson.put("type","image"); + String url = contentJson.optJSONObject(TYPE_IMAGE_URL).optString("url"); + contentJson.remove(TYPE_IMAGE_URL); + JSONObject source = new JSONObject(); + String regexUrl = "data:([\\w\\/]*);(\\w*),(.*)"; + Pattern pattern = Pattern.compile(regexUrl); + Matcher matcher = pattern.matcher(url); + if(matcher.matches()){ + source.put("type",matcher.group(2)); + source.put("media_type",matcher.group(1)); + source.put("data",matcher.group(3)); + + } + if(!Tool.isEmpty(source)){ + contentJson.put("source",source); + } + + } + private static JSONObject getHuggingFormatData(JSONObject postData){ + JSONObject newPostData = new JSONObject(); + StringBuilder dialogBuilder = new StringBuilder(""); + JSONObject params = new JSONObject(); + if(postData.has(MAX_TOKEN)) + params.put("max_length",postData.getInt(MAX_TOKEN)); + JSONArray messages = postData.getJSONArray(MESSAGES_KEY); + for(int i = 0; i < messages.length(); i++){ + JSONObject message = messages.getJSONObject(i); + String role = message.optString("role","user"); + String content = getContent(message.get(CONTENT_KEY)); + switch (role) { + case ASSISTANT_ROLE: + dialogBuilder.append("bot: "+content+"\n"); + break; + case SYSTEM_ROLE: + if(Tool.isEmpty(content) || "\"\"".equals(content)) break; + dialogBuilder.append("context: "+ content+"\n"); + break; + default: + dialogBuilder.append(content+"\n"); + break; + } + + } + newPostData.put("inputs",dialogBuilder.toString()); + newPostData.put("parameters",params); + return newPostData; + } + private static String getContent(Object contentObj){ + StringBuilder contentBuilder = new StringBuilder(""); + if(contentObj instanceof JSONArray){ + JSONArray arrayContent = (JSONArray)contentObj; + for(int j = 0; j < arrayContent.length(); j++){ + JSONObject contentJson = arrayContent.getJSONObject(j); + if(contentJson.has(TYPE_TEXT)){ + contentBuilder.append(contentJson.getString(TYPE_TEXT)+"\n"); + } + } + return contentBuilder.toString(); + }else if(contentObj instanceof String){ + return (String)contentObj; + } + return ""; + } + private static JSONArray getCleanHistoric(JSONArray historic){ + int len = historic.length(); + if( len< aiHistDepth*2){ + return historic; + }else{ + JSONArray newHistoric = new JSONArray(); + for(int i = len - 2*aiHistDepth; i < len;i++ ) + newHistoric.put(historic.getJSONObject(i)); + return newHistoric; + } + } + private static JSONArray parsedPrompts(JSONArray prompts, boolean secure){ + JSONArray newPrompts = new JSONArray(); + for(Object p : prompts){ + if(p instanceof JSONObject){ + JSONObject contentJson = (JSONObject)p; + if(!contentJson.optBoolean(TRUSTED,false) && contentJson.has(TYPE_TEXT)){ + contentJson.put(TYPE_TEXT,JSONObject.quote(normalize(contentJson.getString(TYPE_TEXT),secure))); + } + if(contentJson.has(TRUSTED)){ + contentJson.remove(TRUSTED); + } + newPrompts.put(contentJson); + }else{ + newPrompts.put(JSONObject.quote(normalize((String)p))); + } + } + return newPrompts; + } + } private static JSONObject getOptAiApiParam(){ String env = System.getenv(SYSPARAM_AI_API_PARAM); if(Tool.isEmpty(env)){ @@ -221,103 +492,6 @@ private static void reloadAIParams(){ showDataDisclaimer = aiApiParam.optBoolean("showDataDisclaimer",true); aiProvider = getAIParam(PROVIDER_KEY); apiKey = getAIParam(API_KEY); - } - /** - * Function to format the call to chatAI API. - * Need the api key parameter set up with your key. - * Use the aiApiParam hist_depth parameter to limit the number of exchanges in the historic (useful to limit the number off token of requests). - * @param g Grant - * @param specialisation Prompt to specialise chatbot (ex: You're a java developer). - * @param prompt - * @param historic exchange historic for contextual response - * @param maxToken number of tokens allow in response - * @return If API return code is 200: API answer else: error return. - */ - private static String aiCaller(Grant g, String specialisation, Object prompt ,JSONArray historic, boolean secure, int maxToken){ - return aiCaller(g, specialisation, prompt,historic,secure,false,maxToken); - } - - private static String aiCaller(Grant g, String specialisation, Object prompt ,JSONArray historic, boolean secure,boolean isSafeSpe, int maxToken){ - JSONArray arrayPrompt = new JSONArray(); - if(prompt instanceof String){ - String strPrompt = normalize((String)prompt,secure); - arrayPrompt.put(getformatedContentByType(strPrompt,TYPE_TEXT,false)); - - }else if(prompt instanceof JSONArray){ - arrayPrompt= (JSONArray)prompt; - }else{ - AppLog.info("Prompt must be a String or a JSONArray",g); - return ""; - } - return aiCaller(g, specialisation,arrayPrompt,historic,secure,isSafeSpe,maxToken); - } - private static String aiCaller(Grant g, String specialisation, JSONArray prompt ,JSONArray historic, boolean secure,boolean isSafeSpe, int maxToken){ - specialisation = removeAcent(specialisation); - if(!isSafeSpe) specialisation = JSONObject.quote(normalize(specialisation,true)); - if("\"\"".equals(specialisation)) specialisation = ""; - prompt = parsedPrompts(prompt,secure); - String model =getAIParam(MODEL_KEY); - boolean isClaudeAPI = CLAUDE_LLM.equals(llm); - - if(Tool.isEmpty(completionUrl)){ - AppLog.info("completion url not set", g); - return ""; - } - try { - URI url = new URI(completionUrl); - HttpURLConnection connection = (HttpURLConnection) url.toURL().openConnection(); - connection.setRequestMethod("POST"); - connection.setRequestProperty("Content-Type", "application/json"); - connection.setDoOutput(true); - addSpecificHeaders(connection,apiKey); - - // format data - JSONObject postData = new JSONObject(); - if(maxToken>0) - postData.put(MAX_TOKEN, maxToken); - if(!Tool.isEmpty(model)) - postData.put(MODEL_KEY, model); - JSONArray messages = new JSONArray(); - // format specialisation. - if(!Tool.isEmpty(specialisation)) - messages.put(new JSONObject().put("role",SYSTEM_ROLE).put(CONTENT_KEY,specialisation)); - // add historic (restrict to Param histDepth the number of messages ) - if(!Tool.isEmpty(historic)){ - messages.putAll(getCleanHistoric(historic)); - } - - messages.put(new JSONObject().put("role","user").put(CONTENT_KEY,prompt)); - postData.put(MESSAGES_KEY, messages); - - if(HUGGINGFACE_LLM.equals(llm)){ - postData = getHuggingFormatData(postData); - } - if(isClaudeAPI){ - postData = getClaudeFormatData(postData); - } - if(Boolean.TRUE.equals(AI_DEBUG_LOGS)){ - AppLog.info("post data :"+postData.toString(1),g); - } - try (DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream())) { - outputStream.writeBytes(postData.toString()); - outputStream.flush(); - } - - int responseCode = connection.getResponseCode(); - if(responseCode!=200){ - JSONObject error = readError(connection,responseCode,g); - return Tool.isEmpty(error)?"":error.toString(); - - } - - return readResponse(connection,g); - - - } catch (IOException | URISyntaxException e) { - AppLog.error(e,g); - } - return ""; - } private static void addSpecificHeaders(HttpURLConnection connection,String apiKey){ String projet = getAIParam("OpenAI-Project"); @@ -339,129 +513,7 @@ private static void addSpecificHeaders(HttpURLConnection connection,String apiKe break; } } - private static JSONObject getClaudeFormatData(JSONObject postData){ - JSONArray messages = postData.getJSONArray(MESSAGES_KEY); - int toremove = -1; - - for (int i = 0; i < messages.length(); i++) { - JSONObject message = messages.getJSONObject(i); - // Perform your condition here - if (SYSTEM_ROLE.equals(message.optString("role"))) { - String content = message.optString(CONTENT_KEY); - postData.put(SYSTEM_ROLE, content); - toremove = i; - - }else if("user".equals(message.optString("role")) && !Tool.isEmpty(message.optString(CONTENT_KEY))){// to clomplete - JSONArray contentArray = message.optJSONArray(CONTENT_KEY); - for(int j = 0; j < contentArray.length(); j++){ - JSONObject contentJson = contentArray.getJSONObject(j); - if(TYPE_IMAGE_URL.equals(contentJson.optString("type"))){ - refactorImageForClaudeAPI(contentJson); - } - } - } - } - if(toremove>=0){ - messages.remove(toremove); - } - if(!postData.has(MAX_TOKEN)){ - postData.put(MAX_TOKEN,aiApiParam.getInt(MAX_TOKEN_PARAM_KEY)); - } - return postData; - } - private static void refactorImageForClaudeAPI(JSONObject contentJson){ - contentJson.put("type","image"); - String url = contentJson.optJSONObject(TYPE_IMAGE_URL).optString("url"); - contentJson.remove(TYPE_IMAGE_URL); - JSONObject source = new JSONObject(); - String regexUrl = "data:([\\w\\/]*);(\\w*),(.*)"; - Pattern pattern = Pattern.compile(regexUrl); - Matcher matcher = pattern.matcher(url); - if(matcher.matches()){ - source.put("type",matcher.group(2)); - source.put("media_type",matcher.group(1)); - source.put("data",matcher.group(3)); - - } - if(!Tool.isEmpty(source)){ - contentJson.put("source",source); - } - - } - private static JSONObject getHuggingFormatData(JSONObject postData){ - JSONObject newPostData = new JSONObject(); - StringBuilder dialogBuilder = new StringBuilder(""); - JSONObject params = new JSONObject(); - if(postData.has(MAX_TOKEN)) - params.put("max_length",postData.getInt(MAX_TOKEN)); - JSONArray messages = postData.getJSONArray(MESSAGES_KEY); - for(int i = 0; i < messages.length(); i++){ - JSONObject message = messages.getJSONObject(i); - String role = message.optString("role","user"); - String content = getContent(message.get(CONTENT_KEY)); - switch (role) { - case ASSISTANT_ROLE: - dialogBuilder.append("bot: "+content+"\n"); - break; - case SYSTEM_ROLE: - if(Tool.isEmpty(content) || "\"\"".equals(content)) break; - dialogBuilder.append("context: "+ content+"\n"); - break; - default: - dialogBuilder.append(content+"\n"); - break; - } - } - newPostData.put("inputs",dialogBuilder.toString()); - newPostData.put("parameters",params); - return newPostData; - } - private static String getContent(Object contentObj){ - StringBuilder contentBuilder = new StringBuilder(""); - if(contentObj instanceof JSONArray){ - JSONArray arrayContent = (JSONArray)contentObj; - for(int j = 0; j < arrayContent.length(); j++){ - JSONObject contentJson = arrayContent.getJSONObject(j); - if(contentJson.has(TYPE_TEXT)){ - contentBuilder.append(contentJson.getString(TYPE_TEXT)+"\n"); - } - } - return contentBuilder.toString(); - }else if(contentObj instanceof String){ - return (String)contentObj; - } - return ""; - } - private static JSONArray getCleanHistoric(JSONArray historic){ - int len = historic.length(); - if( len< aiHistDepth*2){ - return historic; - }else{ - JSONArray newHistoric = new JSONArray(); - for(int i = len - 2*aiHistDepth; i < len;i++ ) - newHistoric.put(historic.getJSONObject(i)); - return newHistoric; - } - } - private static JSONArray parsedPrompts(JSONArray prompts, boolean secure){ - JSONArray newPrompts = new JSONArray(); - for(Object p : prompts){ - if(p instanceof JSONObject){ - JSONObject contentJson = (JSONObject)p; - if(!contentJson.optBoolean(TRUSTED,false) && contentJson.has(TYPE_TEXT)){ - contentJson.put(TYPE_TEXT,JSONObject.quote(normalize(contentJson.getString(TYPE_TEXT),secure))); - } - if(contentJson.has(TRUSTED)){ - contentJson.remove(TRUSTED); - } - newPrompts.put(contentJson); - }else{ - newPrompts.put(JSONObject.quote(normalize((String)p))); - } - } - return newPrompts; - } /** * Reads the error response from an HTTP connection and returns a formatted error message. * @@ -544,38 +596,117 @@ private static JSONArray optJSONArray(String array){ * @return */ public static JSONObject aiCaller(Grant g, String specialisation, Object prompt){ - return aiCaller(g, specialisation,prompt,null,true,false); + try{ + JSONObject params = new JSONObject().put(CALLER_PARAM_SPE, specialisation); + AICallerParams caller = new AICallerParams(prompt,params); + return caller.aiCall(g); + }catch (AITypeException e){ + AppLog.error(e,g); + return new JSONObject(); + } } public static JSONObject aiCaller(Grant g, String specialisation, Object prompt, boolean maxToken){ - return aiCaller(g, specialisation,prompt,null,maxToken,false); + try{ + JSONObject params = new JSONObject().put(CALLER_PARAM_SPE, specialisation) + .put(CALLER_PARAM_TOKEN,maxToken); + AICallerParams caller = new AICallerParams(prompt,params); + return caller.aiCall(g); + }catch (AITypeException e){ + AppLog.error(e,g); + return new JSONObject(); + } } public static JSONObject aiCaller(Grant g, String specialisation, Object prompt, boolean maxToken,boolean secure){ - return aiCaller(g, specialisation,prompt,maxToken,secure,false); + try{ + JSONObject params = new JSONObject().put(CALLER_PARAM_SPE, specialisation) + .put(CALLER_PARAM_TOKEN,maxToken) + .put(CALLER_PARAM_SECURE, secure); + AICallerParams caller = new AICallerParams(prompt,params); + return caller.aiCall(g); + }catch (AITypeException e){ + AppLog.error(e,g); + return new JSONObject(); + } } public static JSONObject aiCaller(Grant g, String specialisation, Object prompt, boolean maxToken,boolean secure,boolean isSafeSpe){ - return aiCaller(g, specialisation,prompt,null,maxToken,secure,isSafeSpe); + try{ + JSONObject params = new JSONObject().put(CALLER_PARAM_SPE, specialisation) + .put(CALLER_PARAM_TOKEN,maxToken) + .put(CALLER_PARAM_SECURE, secure) + .put(CALLER_PARAM_SAFE_SPE,isSafeSpe); + AICallerParams caller = new AICallerParams(prompt,params); + return caller.aiCall(g); + }catch (AITypeException e){ + AppLog.error(e,g); + return new JSONObject(); + } } public static JSONObject aiCaller(Grant g, String specialisation, Object prompt, JSONArray historic,boolean maxToken){ - return aiCaller(g, specialisation,prompt,historic,maxToken,false); + try{ + JSONObject params = new JSONObject().put(CALLER_PARAM_SPE, specialisation) + .put(CALLER_PARAM_TOKEN,maxToken) + .put(CALLER_PARAM_HISTORIC,historic); + AICallerParams caller = new AICallerParams(prompt,params); + return caller.aiCall(g); + }catch (AITypeException e){ + AppLog.error(e,g); + return new JSONObject(); + } } public static JSONObject aiCaller(Grant g, String specialisation, Object prompt, JSONArray historic,boolean maxToken,boolean secure){ - return aiCaller(g, specialisation,prompt,historic,maxToken,secure,false); + try{ + JSONObject params = new JSONObject().put(CALLER_PARAM_SPE, specialisation) + .put(CALLER_PARAM_TOKEN,maxToken) + .put(CALLER_PARAM_HISTORIC,historic) + .put(CALLER_PARAM_SECURE, secure); + AICallerParams caller = new AICallerParams(prompt,params); + return caller.aiCall(g); + }catch (AITypeException e){ + AppLog.error(e,g); + return new JSONObject(); + } } public static JSONObject aiCaller(Grant g, String specialisation, Object prompt, JSONArray historic,boolean maxToken,boolean secure,boolean isSafeSpe){ - int tokens = 1500; - if(!Tool.isEmpty(aiApiParam)) { - tokens = maxToken?aiApiParam.getInt(MAX_TOKEN_PARAM_KEY):0; + try{ + JSONObject params = new JSONObject().put(CALLER_PARAM_SPE, specialisation) + .put(CALLER_PARAM_TOKEN,maxToken) + .put(CALLER_PARAM_HISTORIC, historic) + .put(CALLER_PARAM_SECURE,secure) + .put(CALLER_PARAM_SAFE_SPE,isSafeSpe); + AICallerParams caller = new AICallerParams(prompt,params); + return caller.aiCall(g); + }catch (AITypeException e){ + AppLog.error(e,g); + return new JSONObject(); } - return new JSONObject(aiCaller(g, specialisation,prompt,historic,secure,isSafeSpe,tokens)); } public static JSONObject aiCaller(Grant g, String specialisation, JSONArray historic, Object prompt){ - return aiCaller(g, specialisation,prompt,historic,true,false); + try{ + JSONObject params = new JSONObject().put(CALLER_PARAM_SPE, specialisation) + .put(CALLER_PARAM_HISTORIC, historic); + AICallerParams caller = new AICallerParams(prompt,params); + return caller.aiCall(g); + }catch (AITypeException e){ + AppLog.error(e,g); + return new JSONObject(); + } } - private static String aiCaller(Grant g, String specialisation, Object prompt ,JSONArray historic, int maxToken){ - return aiCaller(g, specialisation,prompt,historic,false,maxToken); - + public static JSONObject aiCaller(Grant g, String specialisation, JSONArray historic,JSONObject providerParams ,Object prompt){ + AppLog.info("ai coller with provider: "+providerParams.toString(1)); + + try{ + JSONObject params = new JSONObject().put(CALLER_PARAM_SPE, specialisation) + .put(CALLER_PARAM_HISTORIC, historic) + .put("providerParams", providerParams); + AICallerParams caller = new AICallerParams(prompt,params); + return caller.aiCall(g); + }catch (AITypeException e){ + AppLog.error(e,g); + return new JSONObject(); + } } + /** * call aiCaller with specification for code usable in Simplicité. * @param g @@ -584,7 +715,16 @@ private static String aiCaller(Grant g, String specialisation, Object prompt ,JS * @return */ public static JSONObject aiCodeHelper(Grant g, String prompt,JSONArray historic){ - return new JSONObject(aiCaller(g, "you are java expert, optimize your function, answer only function",prompt,historic,aiApiParam.getInt("code_max_token"))); + try{ + JSONObject params = new JSONObject().put(CALLER_PARAM_SPE, "you are java expert, optimize your function, answer only function") + .put(CALLER_PARAM_HISTORIC, historic) + .put(CALLER_PARAM_TOKEN, aiApiParam.getInt("code_max_token")); + AICallerParams caller = new AICallerParams(prompt,params); + return caller.aiCall(g); + }catch (AITypeException e){ + AppLog.error(e,g); + return new JSONObject(); + } } /** @@ -721,20 +861,20 @@ public static String removeAcent(String text){ } private static String replaceSymboleBySafeHTML(String text){ - text = text.replaceAll("\\n", "
") - .replaceAll("\\{", "{") - .replaceAll("\\}", "}") - .replaceAll("\\(", "(") - .replaceAll("\\)", ")") - .replaceAll("\\[", "[") - .replaceAll("\\]", "]") - .replaceAll("\\.", ".") - .replaceAll("\\,", ",") - .replaceAll("\\`", "`") - .replaceAll("\\\"", """) - .replaceAll("\\@", "@") - .replaceAll("\\/", "/") - .replaceAll("\\-", "-"); + text = text.replace("\\n", "
") + .replace("\\{", "{") + .replace("\\}", "}") + .replace("\\(", "(") + .replace("\\)", ")") + .replace("\\[", "[") + .replace("\\]", "]") + .replace("\\.", ".") + .replace("\\,", ",") + .replace("\\`", "`") + .replace("\\\"", """) + .replace("\\@", "@") + .replace("\\/", "/") + .replace("\\-", "-"); return text; } /** @@ -768,15 +908,16 @@ public static JSONObject actionAiCaller(Grant g, String specialisation, String p public static JSONObject expresionAiCaller(Grant g, String specialisation, String prompt,ObjectDB obj){ try { String parsedPrompt = parseExpresion(prompt,obj); - String res = aiCaller(g, specialisation,parsedPrompt,null,3500); - return new JSONObject(res); - } catch (ScriptException e) { + JSONObject params = new JSONObject().put(CALLER_PARAM_SPE, specialisation) + .put(CALLER_PARAM_TOKEN, 3500); + AICallerParams caller = new AICallerParams(parsedPrompt,params); + return caller.aiCall(g); + } catch (ScriptException | AITypeException e) { AppLog.error(e, g); return new JSONObject(); } } - public static String parseExpresion(String prompt,ObjectDB obj) throws ScriptException{ String regex="(\\[[^\\[\\]]*\\])"; Pattern pattern = Pattern.compile(regex); diff --git a/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java b/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java index 4744ff4..bc38b53 100644 --- a/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java +++ b/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java @@ -8,6 +8,7 @@ import com.simplicite.util.tools.*; import org.json.JSONArray; +import org.json.JSONException; import org.json.JSONObject; /** @@ -36,6 +37,8 @@ public Object post(Parameters params) throws HTTPException { if (Tool.isEmpty(type)) type = "default"; JSONObject swagger = params.has("swagger")?new JSONObject(params.getParameter("swagger")):null; switch (type) { //use switch for future extension + case "chatBot": + return chatbotCaller(prompt,params); case "metrics": lang = params.getParameter("lang"); return AiMetrics.getJavaScriptMetrics(prompt, swagger,lang).toString(1); @@ -68,13 +71,20 @@ public Object post(Parameters params) throws HTTPException { String text = AITools.speechToText(audio64); return new JSONObject().put("msg",text); default: + AppLog.info("isDefault : "); if(Tool.isEmpty(prompt) && !Tool.isEmpty(req) && req.has(PARAMS_PROMPT_KEY)){ + AppLog.info("isDefault : updateFieldByRequest"); return updateFieldByRequest(req); - }else if (!Tool.isEmpty(prompt) ) { - return updateFieldByParam(prompt,params); - }else if(Tool.isEmpty(prompt) && !Tool.isEmpty(objectName) && !Tool.isEmpty(objectID)){ - return frontAiCaller(objectName, objectID); - } else { + }else if (!Tool.isEmpty(objectName) && !Tool.isEmpty(objectID) ) { + + if(!Tool.isEmpty(prompt)){ + AppLog.info("isDefault : updateFieldByParam"); + return updateFieldByParam(prompt,params,objectID,objectName); + }else{ + AppLog.info("isDefault : frontAiCaller"); + return frontAiCaller(objectName, objectID); + } + }else{ return error(400, "Call me with a prompt or a object param please!"); } } @@ -130,7 +140,7 @@ private Object updateFieldByRequest(JSONObject req){ } return prompt; } - private Object updateFieldByParam(String prompt, Parameters params){ + private Object updateFieldByParam(String prompt, Parameters params,String objectID,String objectName ){ Grant g = getGrant(); boolean isJsonPrompt = true; JSONArray jsonPrompt = optJSONArray(prompt); @@ -140,12 +150,10 @@ private Object updateFieldByParam(String prompt, Parameters params){ int histDepth = AITools.getHistDepth(); JSONObject res; String specialisation = params.getParameter("specialisation"); - String objectName = params.getParameter(JSON_OBJECT_NAME_KEY); - String objectID = params.getParameter(JSON_OBJECT_ID_KEY); String historicString = params.getParameter("historic"); ObjectDB obj = null; - if(!Tool.isEmpty(objectName) && !Tool.isEmpty(objectID) && !isJsonPrompt){ + if(!isJsonPrompt){ obj = Grant.getSystemAdmin().getTmpObject(objectName); synchronized(obj.getLock()){ obj.select(objectID); @@ -154,17 +162,33 @@ private Object updateFieldByParam(String prompt, Parameters params){ }else{ JSONArray historic = optHistoric(historicString, histDepth); - if(isJsonPrompt){ - res = AITools.aiCaller(g, specialisation, historic, jsonPrompt); - }else{ - res = AITools.aiCaller(g, specialisation, historic, prompt); - } + res = AITools.aiCaller(g, specialisation, historic, jsonPrompt); } return new JSONObject() .put("request", prompt) .put("response", res); } + private Object chatbotCaller(String prompt, Parameters params){ + Grant g = getGrant(); + boolean isJsonPrompt = true; + JSONArray jsonPrompt = optJSONArray(prompt); + if(Tool.isEmpty(jsonPrompt)){ + isJsonPrompt = false; + } + int histDepth = AITools.getHistDepth(); + JSONObject res; + String specialisation = params.getParameter("specialisation"); + String historicString = params.getParameter("historic"); + String providerParamsString = params.getParameter("providerParams"); + AppLog.info(providerParamsString); + JSONArray historic = optHistoric(historicString, histDepth); + JSONObject providerParams = optJSONObject(providerParamsString); + res = AITools.aiCaller(g, specialisation, historic, providerParams, isJsonPrompt ? jsonPrompt : prompt); + return new JSONObject() + .put("request", prompt) + .put("response", res); + } private JSONArray optJSONArray(String prompt){ try { return new JSONArray(prompt); @@ -172,6 +196,15 @@ private JSONArray optJSONArray(String prompt){ return new JSONArray(); } } + private JSONObject optJSONObject(String object){ + if(Tool.isEmpty(object)) return new JSONObject(); + try{ + return new JSONObject(object); + }catch(JSONException e){ + return new JSONObject(); + } + + } private JSONArray optHistoric(String historicString, int histDepth){ if (Tool.isEmpty(historicString)) return null; JSONArray historic = new JSONArray(); From ac8e65c73900447a4b6e73f3de7e466bc188347c Mon Sep 17 00:00:00 2001 From: Candice Bimont Date: Tue, 26 Nov 2024 09:26:00 +0100 Subject: [PATCH 61/74] better parameter gestion --- resources/Disposition/default/AiJsTools.js | 58 ++++++++---- resources/ObjectExternal/AIChatBot/SCRIPT.js | 6 +- resources/ObjectInternal/AIProvider/CLASS.js | 47 +++++++--- .../commons/AIBySimplicite/AIData.java | 4 +- .../commons/AIBySimplicite/AITools.java | 88 +++++++++++-------- .../extobjects/AIBySimplicite/AIRestAPI.java | 32 +++---- .../objects/AIBySimplicite/AIProvider.java | 5 ++ .../workflows/AIBySimplicite/AIGenData.java | 8 +- .../AIBySimplicite/AIModuleCreate.java | 11 ++- 9 files changed, 164 insertions(+), 95 deletions(-) diff --git a/resources/Disposition/default/AiJsTools.js b/resources/Disposition/default/AiJsTools.js index 6c21cd5..b7c3d41 100644 --- a/resources/Disposition/default/AiJsTools.js +++ b/resources/Disposition/default/AiJsTools.js @@ -3,34 +3,47 @@ var AiJsTools = AiJsTools || (function(param) { let url = Simplicite.ROOT+"/ext/AIRestAPI"; // authenticated webservice let app = $ui.getApp(); let isSpeechRecognitionSupported = null; - let provider = "Open AI";//param; + let provider="provider";//param; let providerObj; let providerParams; getProviderParams(); + getProvider(); let botName= "SimpliBot"; getBotName(); + console.log(botName); let userName = app.getGrant().login; if(app.getGrant().firstname ){ userName =app.getGrant().firstname; } async function getProviderParams() { + console.log("provider: ",provider); let obj = app.getBusinessObject("AIProvider"); obj.search(function(r) { + console.log("result: ",r); if (r && r.length > 0) { obj.select(function(params) { providerObj = obj; - providerParams=obj.getUserParameters()// Affiche les paramètres sélectionnés + providerParams=obj.getUserParameters();// Affiche les paramètres sélectionnés console.log(providerParams); }, r[0].row_id, null); } else { - console.log("Aucun résultat trouvé."); + console.log("Aucun résultat trouvé.",provider); } - }, {'aiPrvProvider': 'Open AI'}, null); + }, {'aiPrvProvider': provider}, null); } function getUserProviderParams(){ return providerParams; } + function getProvider(){ + let url = Simplicite.ROOT+"/ext/AIRestAPI"; // authenticated webservice + let postParams = {"reqType":"provider"}; + app._call(false, url, postParams, function callback(botResponse){ + provider = botResponse.provider; + console.log("provider set: ",provider); + }); + return null; + } function getBotName(){ let url = Simplicite.ROOT+"/ext/AIRestAPI"; // authenticated webservice let postParams = {"reqType":"BOT_NAME"}; @@ -45,6 +58,7 @@ var AiJsTools = AiJsTools || (function(param) { let url = Simplicite.ROOT+"/ext/AIRestAPI"; // authenticated webservice let postParams = {"reqType":"CHECK_SPEECH_RECOGNITION"}; await app._call(false, url, postParams, function callback(botResponse){ + console.log("test ai: bot",botResponse); isSpeechRecognitionSupported = botResponse?.isSpeechRecognitionSupported ?? false; }); } @@ -98,7 +112,7 @@ var AiJsTools = AiJsTools || (function(param) { if(Speech && isSpeechRecognitionSupported){ defaultButton(ctn,"speech"); } - addLLMParams(provider,ctn); + addLLMParams(ctn); $(window).resize(function() { resizeUp($(ctn).parent(),$(ctn).parent().parent().find(".chat-messages")); }); @@ -383,6 +397,7 @@ var AiJsTools = AiJsTools || (function(param) { let div= document.createElement("div"); div.className = "bot-messages"; let strong = document.createElement("strong"); + console.log(botName); strong.textContent= botName+": "; div.append(strong); let span = document.createElement("span"); @@ -399,9 +414,9 @@ var AiJsTools = AiJsTools || (function(param) { div.append(span); return div; } - function addLLMParams(provider,ctn){ - - if(provider == "Open AI"){ + function addLLMParams(ctn){ + console.log('addLLMParams'); + if(provider == "Open AI" || provider == "Mistral AI"){ let htmlButton = document.createElement('button'); htmlButton.id = "params"; htmlButton.className = "chat-icon-button fas fa-cog"; @@ -410,7 +425,7 @@ var AiJsTools = AiJsTools || (function(param) { $(ctn).find('.user-message').after(htmlButton); } } - function updateLLMParams(provider){ + function updateLLMParams(){ console.log("params: ",providerParams); // Créez un formulaire HTML à partir des gptParams let formHtml = providerObj.getUserParametersForm(providerParams); @@ -427,17 +442,28 @@ var AiJsTools = AiJsTools || (function(param) { } function saveLLMParams(){ - const formData = new FormData(document.getElementById('llmParamsForm')); + formData = document.getElementById('llmParamsForm'); const updatedParams = {}; - formData.forEach((value, key) => { - console.log(key,": ",value); - updatedParams[key] = value; - }); + for (const [key, value] of Object.entries(providerParams)) { + + updatedParams[key] = formData.querySelector(`#${key}`).value; + + } providerParams = updatedParams; console.log("save: ", gptParams); } + function checkMinMAx(min,max,input){ + let value = parseFloat(input.value); // Récupérer la valeur de l'élément input + if (value > max) { + input.value = max; // Limite à la valeur maximale + } else if (value < min) { + input.value = min; // Limite à la valeur minimale + } + console.log("change min: ", min, ",max: ", max, " ", input.value); + } + console.log("return"); return { useAsync: useAsync, url: url, @@ -452,6 +478,8 @@ var AiJsTools = AiJsTools || (function(param) { getDisplayBotMessage: getDisplayBotMessage, loadResultInAceEditor:loadResultInAceEditor, removeimg:removeimg, - getUserProviderParams:getUserProviderParams + getUserProviderParams:getUserProviderParams, + checkMinMAx:checkMinMAx, + providerObj:providerObj }; })(); diff --git a/resources/ObjectExternal/AIChatBot/SCRIPT.js b/resources/ObjectExternal/AIChatBot/SCRIPT.js index a38b59e..40701fe 100644 --- a/resources/ObjectExternal/AIChatBot/SCRIPT.js +++ b/resources/ObjectExternal/AIChatBot/SCRIPT.js @@ -1,4 +1,5 @@ var AIChatBot = AIChatBot || (function() { + console.log("chatbot"); let specialisation=""; const app = $ui.getApp(); //addImg,takeImg,Speech @@ -18,8 +19,9 @@ var AIChatBot = AIChatBot || (function() { chatbotSendMessage(ctn); } }); - - $ui.loadScript({url: $ui.getApp().dispositionResourceURL("AiJsTools", "JS"),onload: function(){ AiJsTools.addChatOption(ctn.querySelector('.ai-user-input'),addImgVisible,takeImgVisible,SpeechVisible);}}); + console.log("AIJSTooL"); + $ui.loadScript({url: $ui.getApp().dispositionResourceURL("AiJsTools", "JS"),onload: function(){ AiJsTools.addChatOption(ctn.querySelector('.ai-user-input'),addImgVisible,takeImgVisible,SpeechVisible);console.log(AiJsTools.provider);}}); + ctn.querySelector('#chatbot_send_button').onclick = function() { AIChatBot.chatbotSendMessage(ctn); }; diff --git a/resources/ObjectInternal/AIProvider/CLASS.js b/resources/ObjectInternal/AIProvider/CLASS.js index ccf74e1..b965a93 100644 --- a/resources/ObjectInternal/AIProvider/CLASS.js +++ b/resources/ObjectInternal/AIProvider/CLASS.js @@ -238,6 +238,7 @@ displaySearch(ctn, obj, p, cbk) { */ onLoadSearch(ctn, obj, p) { // empty by default + console.log("onLoadSearch"); super.onLoadSearch(ctn, obj, p); } @@ -368,27 +369,49 @@ onUnloadTimesheet(ctn, obj, ts) { getUserParametersForm(providersParams){ const grantLang = $grant.lang == 'FRA'?'FRA':'ENU'; + let form = document.createElement('form'); + form.id = "llmParamsForm"; console.log("getUserParameters"); let context = this.item.aiPrvUserParameters; - let formHtml = '
'; - if(!context) return ""; + if (!context) return ""; + for (const [key, value] of Object.entries(context)) { let label = value.label[grantLang]; let help = value.help[grantLang]; let inputValue = providersParams ? providersParams[key] : value.default; - console.log(inputValue," : ",value.default); - if(!inputValue) inputValue =value.default; - formHtml += `
- -
- -
-
`; + let min = + console.log(inputValue, " : ", value.default); + if (!inputValue) inputValue = value.default; + + var inputElement = $tools.input({ + type: 'number', // Type de l'input + id: key, // ID de l'input + value: inputValue, // Valeur de l'input + autocomplete: 'off', // Désactiver l'autocomplétion + class: "form-control js-focusable", //class + style:"width:auto;", + step:0.1, + min:value.min, + max:value.max, + onchange:"let min = "+value.min+";let max = "+value.max+";if (this.value < min) {this.value = min;} else if (this.value > max) {this.value = max;}console.log(min,\": \",max,\" : \",this.value);" + //()=>{let min = "+value.min+";let max = "+value.max+";if (this.value < min) {this.value = min;} else if (this.value > max) {this.value = max;}} + }); + var inputContainer = $("
",{ + class: 'field-container flex-nowrap', // Type de l'input + }); + inputContainer.append(inputElement); + var helpButton = $tools.buttonHelp(key, help, label,$('')); + helpButton.class= + inputContainer.append(helpButton); + let group = $tools.formGroup("control-group", label, inputContainer, null, null); + + //group[0].querySelector(".control-group").appendChild(helpButton[0]); + form.appendChild(group[0]); } - formHtml += ''; - return formHtml; + return form; } + getUserParameters(){ console.log("getuserparams"); let params =this.item.aiPrvUserParameters; diff --git a/src/com/simplicite/commons/AIBySimplicite/AIData.java b/src/com/simplicite/commons/AIBySimplicite/AIData.java index 75b42f9..f7d2dde 100644 --- a/src/com/simplicite/commons/AIBySimplicite/AIData.java +++ b/src/com/simplicite/commons/AIBySimplicite/AIData.java @@ -1058,9 +1058,11 @@ private static float randomFloat(float max){ private static void devSaveGenerationDataCost(String mldId, JSONObject cost){ if(!Tool.isEmpty(ModuleDB.getModuleId("DevAIAddon", false))){ Grant admin = Grant.getSystemAdmin(); + admin.addAccessObject("DaaDataGeneration"); + admin.addAccessCreate("DaaDataGeneration"); admin.addAccessRead(DEVOBJ_GENERATE_MLDS); admin.addAccessCreate(DEVOBJ_GENERATE_MLDS); - admin.addAccessCreate("DaaDataGeneration"); + ObjectDB obj = admin.getTmpObject(DEVOBJ_GENERATE_MLDS); obj.resetFilters(); obj.setFieldFilter("daaGmlModuleId", mldId); diff --git a/src/com/simplicite/commons/AIBySimplicite/AITools.java b/src/com/simplicite/commons/AIBySimplicite/AITools.java index c39ccef..1ebcd0f 100644 --- a/src/com/simplicite/commons/AIBySimplicite/AITools.java +++ b/src/com/simplicite/commons/AIBySimplicite/AITools.java @@ -98,32 +98,23 @@ public AITypeException(String object, String classname, String needClass) { super("Invalid type for "+object+": "+classname+" need "+needClass); } } + private static class AICallerParams { private String specialisation; private JSONArray prompt; private JSONArray historic; private JSONObject providerParams; private int maxToken = 1500; - private boolean secure = false; - private boolean isSafeSpe = false; + private AICallerParams(Object promptObject,JSONObject params) throws AITypeException{ - //prompt to JSONArray - if(promptObject instanceof String){ - prompt = new JSONArray(); - String strPrompt = normalize((String)promptObject,secure); - prompt.put(getformatedContentByType(strPrompt,TYPE_TEXT,false)); - - }else if(promptObject instanceof JSONArray){ - prompt= (JSONArray)promptObject; - }else{ - AppLog.info("Prompt must be a String or a JSONArray"); - throw new AITypeException("prompt", promptObject.getClass().getName(), "String or JSONArray"); - } - specialisation = params.optString(CALLER_PARAM_SPE); + boolean secure = params.optBoolean(CALLER_PARAM_SECURE, false); + boolean isSafeSpe = params.optBoolean(CALLER_PARAM_SAFE_SPE, false); + setPrompt(promptObject, secure); + setSpecialisation(params.optString(CALLER_PARAM_SPE),isSafeSpe); historic = params.optJSONArray(CALLER_PARAM_HISTORIC, new JSONArray()); providerParams = params.optJSONObject("providerParams", new JSONObject()); - secure = params.optBoolean(CALLER_PARAM_SECURE, secure); - isSafeSpe = params.optBoolean(CALLER_PARAM_SAFE_SPE, isSafeSpe); + + if(!Tool.isEmpty(aiApiParam)) { maxToken=aiApiParam.getInt(MAX_TOKEN_PARAM_KEY); } @@ -136,28 +127,41 @@ private AICallerParams(Object promptObject,JSONObject params) throws AITypeExcep } } } + private void setSpecialisation(String spe,boolean isSafe){ + spe = removeAcent(spe); + if(!isSafe) spe = JSONObject.quote(normalize(spe,true)); + if("\"\"".equals(spe)) spe = ""; + specialisation = spe; + } + private void setPrompt(Object promptObject,boolean isSafe) throws AITypeException{ + //prompt to JSONArray + if(promptObject instanceof String){ + prompt = new JSONArray(); + String strPrompt = normalize((String)promptObject,isSafe); + prompt.put(getformatedContentByType(strPrompt,TYPE_TEXT,false)); + + }else if(promptObject instanceof JSONArray){ + prompt= (JSONArray)promptObject; + }else{ + AppLog.info("Prompt must be a String or a JSONArray"); + throw new AITypeException("prompt", promptObject.getClass().getName(), "String or JSONArray"); + } + prompt = parsedPrompts(prompt,isSafe); + } + /** * Function to format the call to chatAI API. * Need the api key parameter set up with your key. * Use the aiApiParam hist_depth parameter to limit the number of exchanges in the historic (useful to limit the number off token of requests). * @param g Grant - * @param specialisation Prompt to specialise chatbot (ex: You're a java developer). - * @param prompt - * @param historic exchange historic for contextual response - * @param maxToken number of tokens allow in response * @return If API return code is 200: API answer else: error return. */ public JSONObject aiCall(Grant g){ return new JSONObject( aiCaller(g)); } private String aiCaller(Grant g){ - specialisation = removeAcent(specialisation); - if(!isSafeSpe) specialisation = JSONObject.quote(normalize(specialisation,true)); - if("\"\"".equals(specialisation)) specialisation = ""; - prompt = parsedPrompts(prompt,secure); String model =getAIParam(MODEL_KEY); boolean isClaudeAPI = CLAUDE_LLM.equals(llm); - if(Tool.isEmpty(completionUrl)){ AppLog.info("completion url not set", g); return ""; @@ -175,18 +179,7 @@ private String aiCaller(Grant g){ if(maxToken>0) postData.put(MAX_TOKEN, maxToken); if(!Tool.isEmpty(providerParams)){ - for(String key : providerParams.keySet()) { - Object data = providerParams.get(key); - if(!Tool.isEmpty(data)){ - try{ - float dataFloat = parseFloatParam(data); - postData.put(key,dataFloat); - }catch(AITypeException e){ - AppLog.warning(e.getMessage()); - } - } - - } + addProviderParamsToPost(postData); } if(!Tool.isEmpty(model)) postData.put(MODEL_KEY, model); @@ -233,6 +226,20 @@ private String aiCaller(Grant g){ return ""; } + private void addProviderParamsToPost(JSONObject postData){ + for(String key : providerParams.keySet()) { + Object data = providerParams.get(key); + if(!Tool.isEmpty(data)){ + try{ + float dataFloat = parseFloatParam(data); + postData.put(key,dataFloat); + }catch(AITypeException e){ + AppLog.warning(e.getMessage()); + } + } + + } + } private static float parseFloatParam(Object param) throws AITypeException { if(param instanceof Number) return ((Number)param).floatValue(); @@ -1477,5 +1484,8 @@ public static boolean isConfigurable(){ return !IS_ENV_SETUP; } - + public static String provider(){ + AppLog.info(aiProvider); + return aiProvider; + } } \ No newline at end of file diff --git a/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java b/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java index bc38b53..0dd49b5 100644 --- a/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java +++ b/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java @@ -28,6 +28,7 @@ public Object get(Parameters params) throws HTTPException { @Override public Object post(Parameters params) throws HTTPException { try { + AppLog.info("_____________________Test_________________"); String prompt =params.getParameter(PARAMS_PROMPT_KEY); String objectName = params.getParameter(JSON_OBJECT_NAME_KEY); String type = params.getParameter(JSON_REQ_TYPE); @@ -35,8 +36,15 @@ public Object post(Parameters params) throws HTTPException { JSONObject req = params.getJSONObject(); String lang; if (Tool.isEmpty(type)) type = "default"; + if (Tool.isEmpty(prompt) && !Tool.isEmpty(req) && req.has(PARAMS_PROMPT_KEY)) type = "requestField"; + else if (!Tool.isEmpty(objectName) && !Tool.isEmpty(objectID) ) type = Tool.isEmpty(prompt)?"frontAiCall":"paramField"; + JSONObject swagger = params.has("swagger")?new JSONObject(params.getParameter("swagger")):null; + AppLog.info(type); switch (type) { //use switch for future extension + case "provider": + + return new JSONObject().put("provider",AITools.provider()); case "chatBot": return chatbotCaller(prompt,params); case "metrics": @@ -70,23 +78,15 @@ public Object post(Parameters params) throws HTTPException { String audio64 = params.getParameter("file"); String text = AITools.speechToText(audio64); return new JSONObject().put("msg",text); + case "requestField": + return updateFieldByRequest(req); + case "paramField": + return updateFieldByParam(prompt,params,objectID,objectName); + case "frontAiCall": + return frontAiCaller(objectName, objectID); default: - AppLog.info("isDefault : "); - if(Tool.isEmpty(prompt) && !Tool.isEmpty(req) && req.has(PARAMS_PROMPT_KEY)){ - AppLog.info("isDefault : updateFieldByRequest"); - return updateFieldByRequest(req); - }else if (!Tool.isEmpty(objectName) && !Tool.isEmpty(objectID) ) { - - if(!Tool.isEmpty(prompt)){ - AppLog.info("isDefault : updateFieldByParam"); - return updateFieldByParam(prompt,params,objectID,objectName); - }else{ - AppLog.info("isDefault : frontAiCaller"); - return frontAiCaller(objectName, objectID); - } - }else{ - return error(400, "Call me with a prompt or a object param please!"); - } + AppLog.info("AI API ERROR: "+type+params.toJSON()); + return error(400, "Call me with a predefined request type, prompt or a object param please!"); } } catch (Exception e) { diff --git a/src/com/simplicite/objects/AIBySimplicite/AIProvider.java b/src/com/simplicite/objects/AIBySimplicite/AIProvider.java index 7c3a3ab..b8d8f4e 100644 --- a/src/com/simplicite/objects/AIBySimplicite/AIProvider.java +++ b/src/com/simplicite/objects/AIBySimplicite/AIProvider.java @@ -22,6 +22,11 @@ public class AIProvider extends ObjectDB { private static final String PING_ENDPOINT = "aiPrvPingUrl"; private static final String STT_ENDPOINT = "aiPrvSttUrl"; private static final Map DEFAULT_EDNPOINT = Map.of(MODELS_ENDPOINT, "v1/models", COMPLETION_ENDPOINT, "v1/chat/completions", PING_ENDPOINT, "v1/ping", STT_ENDPOINT, "v1/audio/transcriptions"); + @Override + public void postLoad() { + traceHooks(TRACE_HOOKS_FULL); + super.postLoad(); + } private JSONObject getDefaultFields(){ return new JSONObject(getGrant().T("AI_DEFAULT_PARAM")); } diff --git a/src/com/simplicite/workflows/AIBySimplicite/AIGenData.java b/src/com/simplicite/workflows/AIBySimplicite/AIGenData.java index 2c8e0e5..90f96c8 100644 --- a/src/com/simplicite/workflows/AIBySimplicite/AIGenData.java +++ b/src/com/simplicite/workflows/AIBySimplicite/AIGenData.java @@ -3,7 +3,7 @@ import com.simplicite.commons.AIBySimplicite.AIData; import com.simplicite.commons.AIBySimplicite.AITools; import com.simplicite.util.*; - +import com.simplicite.util.tools.HTMLTool; import com.simplicite.webapp.ObjectContextWeb; @@ -82,7 +82,7 @@ public String genData(Processus p, ActivityFile context, ObjectContextWeb ctx, G "}\r\n" + // "refactorButtons();"; - return context.getDataValue("Data", "generate")+""; + return context.getDataValue("Data", "generate")+HTMLTool.jsBlock(js); } @Override @@ -106,9 +106,9 @@ public String callIA(Processus p, ActivityFile context, ObjectContextWeb ctx, Gr return "
"+error+"
"; } if(!Tool.isEmpty(dataJson)){ - return "
"+""; + return "
"+HTMLTool.jsBlock(aceEditor); } - return "
"+""; + return "
"+HTMLTool.jsBlock(aceEditor); } public String testFucntion(){ diff --git a/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java b/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java index 84be522..f17974b 100644 --- a/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java +++ b/src/com/simplicite/workflows/AIBySimplicite/AIModuleCreate.java @@ -59,8 +59,6 @@ public class AIModuleCreate extends Processus { private static final String ACTIVITY_NEW_SCOPE="AIC_0017"; private static final String AI_SETTING_NEED="AI_SETTING_NEED"; private static final String EXISTING_OBJECT="exisitingObject"; - private static final String BEGIN_SCRIPT=""; private static final String DOMAIN="Domain"; private static final String MODULE_NAME_FIELD="mdl_name"; private static final String TSL_VALUE_FIELD="tsl_value"; @@ -203,9 +201,9 @@ public String ai(Processus p, ActivityFile context, ObjectContextWeb ctx, Grant listResult.add(context.getDataValue("Data", DATA_PRE)); listResult.add(context.getDataValue("Data", DATA_JSON)); listResult.add(context.getDataValue("Data", DATA_POST)); - if(Tool.isEmpty(listResult)) return ACE_DIV+EMPTY_TEXTAREA+BEGIN_SCRIPT+aceEditor+END_SCRIPT; + if(Tool.isEmpty(listResult)) return ACE_DIV+EMPTY_TEXTAREA+HTMLTool.jsBlock(aceEditor); - return "

"+listResult.get(0)+"

"+ACE_DIV+""+"

"+listResult.get(2)+"

"+BEGIN_SCRIPT+aceEditor+END_SCRIPT; + return "

"+listResult.get(0)+"

"+ACE_DIV+""+"

"+listResult.get(2)+"

"+HTMLTool.jsBlock(aceEditor); } @@ -339,9 +337,9 @@ public String gen(Processus p, ActivityFile context, ObjectContextWeb ctx, Grant } DataFile allids = context.getDataFile("Data", "allIds",false); if(Tool.isEmpty(allids)){ - return "

"+g.getText("AI_SUCCESS")+"

-
\ No newline at end of file +
+
\ No newline at end of file diff --git a/resources/ObjectExternal/AiMonitoring/HTML.html b/resources/ObjectExternal/AiMonitoring/HTML.html index 87c055e..2e8c189 100644 --- a/resources/ObjectExternal/AiMonitoring/HTML.html +++ b/resources/ObjectExternal/AiMonitoring/HTML.html @@ -33,4 +33,5 @@

Specific Parameters for {{provider}}

-
\ No newline at end of file +
+
\ No newline at end of file diff --git a/resources/ObjectExternal/AiMonitoring/SCRIPT.js b/resources/ObjectExternal/AiMonitoring/SCRIPT.js index f19e078..7a6f501 100644 --- a/resources/ObjectExternal/AiMonitoring/SCRIPT.js +++ b/resources/ObjectExternal/AiMonitoring/SCRIPT.js @@ -14,6 +14,19 @@ var AiMonitoring = (function() { }else{ $('#aimonitoring').append($T('AI_SETTING_NEED')); } + let buttonText = $T('AI_SETTING_BUTTON'); + if(buttonText === 'AI_SETTING_BUTTON') buttonText = "Setting AI"; + let button = $("').addClass("btn btn-secondary btn-ai"); // Création d'un nouveau bouton avec jQuery + button.click(function() { + AiJsTools.commentCode(); + }); + let nextBtn = nextAction?ctn.find(`button[data-action="${nextAction}"]`):null; + if(nextBtn){ + nextBtn.before(button); + }else{ + $(ctn).append(button); // Ajout du bouton à la barre d'édition + } + } + return { useAsync: useAsync, url: url, @@ -469,6 +612,8 @@ var AiJsTools = AiJsTools || (function(param) { loadResultInAceEditor:loadResultInAceEditor, removeimg:removeimg, getUserProviderParams:getUserProviderParams, - checkMinMAx:checkMinMAx + checkMinMAx:checkMinMAx, + commentCode:commentCode, + addCommentCodeButton:addCommentCodeButton }; -})(); +})(); \ No newline at end of file diff --git a/resources/Disposition/default/VIEW_AI.png b/resources/Disposition/default/VIEW_AI.png new file mode 100644 index 0000000000000000000000000000000000000000..491688ffbdbace8fba5d67b7691ca75797514070 GIT binary patch literal 12643 zcmeHt^;erg)Fu!J1cDTY;tkf~Qd|n9cxiEW*HEB9(6kWR0tG^GZ-Ewfw-j33Dems> zzTx}6-96v_uz$dwJ;|Jtck;}gJMY|?=ia&V`ORxZLVQ|$3=9lHWu=#z7#Nr*4+Rg1 zuIU+@|AKz_=pZluMp<5-3Hr{>*1_2Z1A`+bAVx~5O_uJj*@%k5Q9s7DCHeLniU9~lF~+8O~Slr0v)A~?L=qp`scPk zmU-c;JhnFStm({OIr3j!%JtiX9#h&?8QSgo9Z@0hr&JKzLW(gcQl!$0kO=Xozgp$K z=|+;1IZQ?QT`1B8eK8iOduqO-FH86o(m{NO+tMH$KBDES$w73|IC0h?N-~3ENH~2b zUA;R7S_lFbSAK07!(NkCcJr+4e8g8uXl(2)9}1=%M~V-+64z5%T>*C!3;Pi##3eO869a<@L;2+kZJ(*# zS>HrsowTsSb8RngFVfbpN`EZkbSB^S4yQ#kr8u+jedptl;OIpN2!OZvu$F)yqhEf) z|3yNs{l0T}7UEp)RvsqB46*1M8|{%gR;>DJFE>0}HIomM8PFmoj?z4znHM_`+@5JZ zH;#rVBme&w;{)rPrcW_o7x`DDOLlmNv8XXrJt`U1fMQv2_;miL!h5j(W{%{O?rS8R zCx^Ln-$uPY`E@9iB}VY&@k3HJUZG>d94HpB9xI&=!sK+3R1EYm;Z>XJ=Rpl_+wWI2pVElt6%;; z6rzC`4i07Ibm+9amU~c2JA%{qOrp`&?g5Lr&M}a^9Hwwo_@7c4HqLXina?L^9u!>= zTz1H_SB!Ufk3hc;+KtBAs%wjdJbaPmEIzhYWj_XJR>TKUA=4ST@Yef{St6Wiel#; zsbPFy)e&+_U~riWF_O|iys_`Zo57MY`z*rr3^AK~9+{^)5%Q{gZ7ZtVd)~OQG>&it|DVfpUirbh1~gKe&9v$PF?ik=$BxQ^`7iMeiEvBK>*8o zR=k4;BS}Jc|uHt zow+^`5z^XnUzCp5^Mp%%p$QwNcm28220Ku7)NAOmXiu z3z^E{C`mJ!p+t*KLat;dFPkEn;t9^>m~eB0M{qcG_v)g3{M0qlk$rI5BMM96n=8Qh zb#De;yVx@olW4QwP}qeYiy2_7pkmfccEJ*M@m4gB^(#=hie%%Mqj20*#XGu(k@D;S zn4^t-sh#YTV)e=Y@dY$3!HOBmEXIRxmOC=UoR|j*6=RApyQ?=b&SH`Y z13wY{)_I9q(_INLWrgx=Lls0*O?#O0s2xvF^CU*1XBZ`Dz01O%k*twTMn(Fhc51iz zhf1qhlZN{Uy|y(&BWdk6df;mUuJ1tbATal3%I=oH$-c&9V#q$JShwRzkGi!OH{Af8 zDs!G8Rse{vu=jd`AeF)JSf;E&^lHsCkLDn=1Z_h29Z#uk z=-FupwwT+TVQ^o64~7hg8!LpVp_cWeh)_0(>Hf%G1K5Sc)(&g_+Uh40bYK&rmt{+p0q%p4H;H^- zy}>8HJ)uT>Agt-1<}Jr0uR%p=T9P|gLqQ3L%vds*(r&`tTWl=sp|OYjYB~3k?t06` zkfa~X{-C9LPNzAiXc`*Bgcif_D&F&Lt^JP|UF5s>)?))f+|C*aVT(`gRxT0sSk zIe+CALZGDMM))~&Vm=XgppyP zZ&la)^ouhG0y{|%P-*x`;j5=#Cki$e$rGY={tghvfOqQ-L!jV418?UPk=IUQ)@&hT ztKQ>hn^}$UK!WUd%#q_=)@$>5zSIq{Ot|(r3QQ@onUgoxhR?v(Kr}o)#Yj3Vg zr}f>Vr6H89&ftpar?9ZG;^dZkow>LrmdkHri%%fRM$SEHJB#@Iq)RWGF=t#7e-7J1 zD*yIez#{VMhLo!OUnf5IZ<>g?c64@Y&QQA``{R)h>3srqlnU|1vEAq!my?uSoxPVx zKI%ZkaOL*^yh)uNC1LsZkLc^vCIP<^b&Rh2=zs=rw7SY)xYA8RvG^HY`p&hz-DwgP ztbA|shBrWWjs~W5lvkp(U=Djn{P!#Kk1f7lZ|0+D3sar5pJ9qiIXf1d+TV_4jh6Sy zxV`xwudT%_zP6Ms6mOGEHPf&#y_40DYZiYcltL0)Ju&C08zFp+m2$p+^zt?HJCWiG z-AHK_M71dB-Z~pjf4{3f-TrmWt>bJ)Fr@buyBSz$_P0SOCcfWo%t$8wI=40h*tJE_-%Vb>hFy8POL~;Z{+nLZ6)@b zl25UbukCFnpu z+vJ=lW;C^jS^Dk$n@CSlVDk-a^`mxV?|mY|UwE7d10NsZ!oYtMg~5bHmt^qROy`Pd z!r&B3qrI@hF2@_AVf=ba0iz+*EJ{?vL)eZS?zgm}UD*9gg>l=vTzAJ_nyq@>^~cX^ zuLWc?Nl6hq1j|Kem6*6;$fP8|WUqyoYT0e0ZApz*&MA+OY-A@_7@h~IJ!ojvCk-ycSEduJzcuIlyTpPV95)Iq=uAHn12MVy(2#D@*~?A5~bloH9s)((5>a*6nKa`k%9X9z|6of(k`Tlc0Y_`7-X zb2rp^_~1^TywiGWi@)1qk#qt@JQJ7GB?D6m9oZ{ysidoq0i=;H*)Yw{{^=zIzFPPL zwY)X`TG&OxJ2UbAjTy9NY!B?8!|&4l`iwE5AVrc{oLkr7%;aB;?ZY89=>`Gw{U8*bpgDC6cf40HIOT>SRs*xSe`!Gbu|^z;mTO zc!wz^Ajp3AM!Th2%H;wk^!~Q|1AB?<0>0dtM3&9u406nu)F}o^0FNPZ4+x(0EHe|0 zJm*sQ{Pk~A9d{QWLu)!o2V4X~gnEpc7)%c8*UaV^#6+)ob?OuGk#L8u5(>Hdz^Qg6 z#98h=B;=moX!Nzx?&Y z_7xJ8!PY)>alUWa+uISwe`&|9KnrN%KF7|Y7Fo8wv&e)~OC%e8KGZ{f!XImXyi}rG z%NMZ?`wpp+4g6`9s>rdTuL!lb8CcAH+ zEC>E*7AVwS(K=DQPb9vx*L^DybDz~%&{NbafG6^(Hn#J`a;|T(260WC^)6~Suk|g% zMWrTzl-n4J%_QN4RFxBMDKNJOmswCVsO^0LVv$B_aE zn+W&j9Ge~#=&D6lmf3U}WeMMl;dRLBukgiWBR80)>+GmMuTSQuW&z%0_w4cev%Th? zjpWLzI;Ij5a#qD_dH+jElV77$%}PIT-clytDKlYSP~j?_@Dl2wJpY2>6?YP&p?DPb z8LmH@CK9->OM8TinANxC%$FLp@+q~SkNYFvb7WO697ND|G>t`t(L_YAOdI`JKUoG6 zVO^K=>oW~(4Zg(69TvCUv}_>~A3AoE6jBR-Pt!>w|M4aaBk%nuq8f94CDB|Rg=N`q zD+MJsApGl7`-sueUTFMHGh|0$ML8@6QZ$T{B^>04$0K2^1!rg`%buWZJ?68N>m;fugoV%k=UPET3Jisy_HBknmVlOQ>s}J z$HCt8x=3tUDrN>6!y}n;@+!Iwe#tj~+^+fDgc;v<$ss`DREV;)c}U7V$H4%~I4mJs zygH)ucUI0et?Jujc=}CQ?dR@I2M&AczNNwBmQNO!+}9s&g~O7vuSh9ltlPuNE{%#5 zXbMcrBr{av2~*}j)V>~S7V3%sEyoY2Xu+-g_OusB!;-Vb`4dRa(a~*`!58tQtgyDt z&66zv53_c5nvoKw_e)k3+Pg58W<$VrMmXUV)n3bd^$68$x$nS%ue>?bXz0#GI5<&=`R>5ZQEpIK*W221;y9gab zwhU@gZ|q0ayK^zWQ$1`+EHaqze=XjfO1*(}l=Vp=IU_1E88;*V1h85`O!biak%zq# zW0JW?*Xv*t%~3xP@@-a5#VlIJGm*k=HggB%Gu}TL9Z7|6hi-eG({3R1C#_DbUxkhF zWK8i7>hZ&8BW*&Us-K$!J<99$bv*CUc1+y31&!4Xb{zw_BP8qz&8yr6Umh(;WMNED6GcanZLQGouW)$ z5{}W1Oa}iGF&z^=*59C&DH@51$q}ljO)O?m(!SrpjX>FC@^a7&J z)!9S{_S#V1JXlE$IWE~++}Z^6RQzDW?w8Dm?>_I-o-XEPJNnD_Jm|*{lq|2w!EBeI z(5fkL?5PIDl1|~cm+?e;@$kKV*DTh~_F(K&w<&;>|6WQHS3mJxgR7`W&x;?A^H&9K zjzfH+gLq50^KO)B&X!E@R{gA55I^*zQy$rs9A*hP@4gR9(_U1T59x8+u`LOD_Bs(j zca+hjR#%sjctL<&PU2NYTWjoKgy8%E7r#x*Q zXHCa;+1-2L_r#pP+}oD3zW(>-aJ0V5Lv)Kv+uc;bq z;$(=6?O+%GxrOK-3Nn{lhHkIxH1k_g@5PxsAJ^B#2(*Nix8yZ^l~~1B(l% z8{^ahYxr`n-}+6X`@LFtheee(7{U>-wac@bUz87WVqnxCD02yT14y#*L^r zyObD`W_i`S3Jb8?^av2r2f@aM|_$PQ`yid(t2PJp0iaQuyRrc`8$NU(e-#QX2r+O?(M$RqbP+!nWH zXpKb6J8G3J4J6s+qiyf15cf1*10o%l%rIF<8whno&ghmA0wtWBIWBA3>=kv|_(Xhh zZ@S3$tuomTRRcPV=6il$B8|-5%E$s(sNET0+3Eb=-%w{tRdm~bRwm`GwPPsyaaXVNe0J$u zUeYcPT_8@7K)3O9#E`MQ?dLbO9LK#|DcE{DSJn>vv!@vRNT;5_4O4_n6HG{=wo5`{y021eN?b8hqZ^kRPoR{S91* zEms6lz<`I{QJB^xRjtyn>}@>ah6ho%B|ez7FI*4;;GD5%Qy#UXIT%2DQI~v3g?M={ z#tn?DDi0!lI((j5ro5;9hQt^WXdgylOb&Q8&%j_MvCo1inW{o+a>1d}ZQ_cEu^W$g zdEiyI{O!*_KJl~9I78P+TGP=EmrSdxrx6j&MgjP=c%Sql-Gqx%iapndV)Ewe1Giar z%I-(;Ukbvz-dAMfrzozVk667t7lEc-vitKs>9)><#w4sOnEFT^ z^^^K|ytN*)Diw806DnQAX#{Wq0L6t{nNu#_?;C!B{XN^p^m z_J>9uZN-4;`^-N0P?p9~ynWP8-r}&mc;I%aRI=4N5KMM}5Ccf*{GLmn&Op@!n-qQm zeiwmriga{t+hMebh^6fDa3H zzfeknn+h*VOV!{^Lb;e30M6D5TO&vQD}VOAJVu2w1QYJAym?9md8Dl}^>j)Hvf*m3 zG7F;SjG06E|Dp=^Hx_^0AMURWYp+r}2jbxM|yBAb}V{I11}5M3i=7Hdv!(-Awgjf+{Ud z^|q7|T42LrUy3b!rRpMcG$;m0#0>E68>uB@7DSS~lB2_McFq~LYX3Ml%5yrR2llkv z_`bjAi||iXD}Tm}o}vbOQNpvKOS{&I8_dwt z72ozR@M78ruTc+1&1#Ci_y%>**ThhjIXLE|~ zq9;fNI=d=JPf&)f`yQ%qGZD%W587v{=HQ<_?BUq>s)7s)m^H|crNVBHAjiE}zf@YA ztTtZ#nR^1~U1T8v)?23=V2sMv4meJwLp&h-3|P)inU6P+zP6a!yNiK(uFqi0zpYy_ zU!Gymf<2Yjl5pM#hg~-nDocyRcVc5LU)$~r%e*4=?2@d&$lncaN%7k3-+cl0BUxe~ z@rIY0#_j8}A8;Meg{{qu8+AQMJqAfh&YHn# z1U9OCDj^Xpk@b%Yp;Bt~*qOXk!MoZ0xGw#PC&`Xd){AyW#>NVk)SfX8?Z=43q?MbO zfjiH)*l{#+i;>~qgM);3DuT!gy3D>tm}0qM^x#>5n48tDIsdSR955*BV;pjSB484X zN^Hc5B%p3M>7&3td+Oc65Z5b6ka=vNyRkjg-t{{2b$kB-PPAT7X)o?`dWBnFOx$PzP<04)Rw9^&M0SY zk^~g$tf}*|m3oQB)Uh^DGIdFMAd2gUdL}9GJc1Wr-n9`$ukg}3lxj_=>PG=hF%i1I zKs_6ajIDYG8(Jwmyoh!{X)lMfbEjnR_o zwYer}JrUJ8r@gIi2TxG04Mj0-SlWt4`qKlimQhKlqK^|lF?NVkiJkW!S*G=&r?GON zRgg}0r2^X!-cCFH*9HZ~62THFZa11jpFlOhE8vV6QVLi7uNJ@y(-%KqY&)YDK@J4< z1g^aEVo`HG3)Sx6vi;%j!HvJqVo|G1MmoVURa?ZmURe~G-jxh1O6p}XW-cN&$;=8a zO)MJHn!%`I0f9oMN4m)*^v{^j~e<<8ZI&%&`tEKi5>SLfK0l z(il|6>W<*e0=$@dm@?bj>;MyC@+Gp#ubpqPzhXRB^)Q+@#TStR&R@|tUhHL_H?+iK zwy+-+Km|l}HzVA&Y2?;Q+H7^{`~MYr)T0k)V8Ld9dCYW?L7gV%JHh15B@EKnOnlP2 z%lYhZnxGGYxvf@il)GWQDB{-G{NkPlIHijBrMJy1OqYKH^Jp2T*jE{=aDw3D%ne?5 zL)Hw%f2gS7jBH~U(&W4=xn{#Wy6uYnUVC{ zA7QCp#gQ}*L%i+g*YZXb$3-3V7>Jm*D_Hwh8n*cl4Y%5yX(D{->ry=>Evewo3M;&d zNyQd`-3KCG0F!6ZNZwUhm=6-=puMT$Dg`ozh9^vhL$XS3eGH9NcZ=X|X-?zGDDBKi zS-r~-HBo{v&=M!oYDANV?hGtS)pU=9WL2;Mj-&{x404AY)8A=2(*TK7v7D2AC-u2$_ zolWxUO`2`zv;sB3gA8E33e{RHjq>8*ms2!k&csx|Uq|5-hCh9h?^WHev!SF?Y1$0m z>-AS8bp;|uyQOE(mlnot$L9^4Qwl4-e19a`F01F>=1(dQ-wv*Fa%d@Tnr|*jV0H!- zdc=u$%j%U8kL+v0PZ6pPzn9=GSUQaMKKRp>xevk}Jyc2yi{Yjv27#O@0JDOsTi6_q zwTjI$TEidc`O+(sBJ`wCT(~gYxu;s2u3{~(aw+eBns0)x?HQ`7)f#xbk#mF|kHa^# zxH})g!EM9F5OutWUw;Gq-lyLhu}EMrs=W1kj#XXLKUVj}#WK_BfYwp47t_?l`aE6< zD9WO+d#UJn>=H9p7f5~!RFY7s%B_);(H^qChgH zZLrBZHN93M)E%dN#|vS)wXsQ$I6=?6){0qJVirIWv;+3kv%f|g>bC_N({1BZui|#A z(qA+?&aX6soQYH4{@%?nz_oBqW6j%7c+V<5I1tPhT%*qDxQrg18ajq)nKwR(eu zn;s7McQ-6_Qlc8g@jbSkGgX20?6KtmYZylHSsFE1rul7rHT`Jr&h!)DoVH`gF;R9_ zo97Z9yX+80b2ogiD|;owb%6_i-w>Gy<}}CxGCtgyi_gdd>dr`98Kl42e0Sv z(MNpVL2l}cZf(l&Kt8GmSby?6z3P8qCCx#Q(d9a{B^M<* zfFL^X&A)f8=IT0DSO+Yn4mi~kZ-!iBx3;MLF(-y;>MOSZ$4`6S=z^exP$oVs`wfXY zqLq=sb9!9Nam{)!9A^*TsX~f|DN>~ZJHgBb-kF|Lnw_X<$J<`a_uLj{dt)_()5ZZV zUl~3=yYa+K@kx%?osUab>n2@$9G}H2!eu!zv368BDQkAQZkL{(b2mx4abm4muHp9C zE+WY3yxC=H?WE@6Z#%Klx}SD=_szRq+143mdYLjMRed@`wt#@u3=c_eRlo>Xa-}O9 zk^y)+n1MUFmTzAHZ(bVsDBC|$E(B!+%$-_mo(#OA*ywpwUH5d#IrIK@o!*>4qhoks zS9$Y3-P8>}rwtG6{m+(ncN*+`)pYdetaU!FU@$L+uj*T&ZJovEE*`KNgMuTJ43-P9 zURzQG<9cyhC*0=z=}fN6>;30WLk%ct)IL|JHZ3E7p8acV~s z--RF*9j)yFO@ADK^Wb;C6GBU}N}0Owm?S1Lz@E6F< zQ!3LM{Tb`EeVd8VE*h|}W9sbe&f_b9ltiFc zh{9nyYxKjfysIW_Q1*)?D-hU|lQ11^qaD%z1w%{cJji5?2Cg!zV*DmmqDa7@#Begg z&zq;je2no~&{H{XjKEVL=pZ`<_5hfu#2TTyVX86sfW=#?F|0F166A9mcvdWAv2 z9V+O_$xVqVVg$@HyE9LGyrD^JVgbqyOtJ*sWhBhxc+y7^V>IaFJH#<;O6Y#ifg*Tv z)UliGXtGD&6KOX*9Sa^BEiNkPHV zmlm0-!c3a_6|m`M^MtLxZgAd(CJ4HvJnZ_lE93XlOoaA!?nz%SA^PRycO_l*p#;q7 zq;tMc{Uh`Th>}r7ZBk{(C*+Upk?&p1_GAjf)F3*faidr6x-*K52Cftg;=w;rLAM&|AA}b_;bM{S U(9%5m{ym1W!t0mCa^@fY2jfdR_5c6? literal 0 HcmV?d00001 diff --git a/resources/Disposition/responsive5/SCRIPT_AI.js b/resources/Disposition/responsive5/SCRIPT_AI.js new file mode 100644 index 0000000..b7bba30 --- /dev/null +++ b/resources/Disposition/responsive5/SCRIPT_AI.js @@ -0,0 +1,40 @@ +/* Specific client script */ +(function($) { + // Event handler for when the UI is loaded + $(document).on("ui.loaded", function() { + // Customize UI here before the home page is displayed + }); + + // Event handler for when the UI is ready + $(document).on("ui.ready", function() { + // Customize UI here + console.log("-------------------------------S_AI DISP LOAD---------------------------------------"); + + // Load a specific script for AI tools + $ui.loadScript({ + url: $ui.getApp().dispositionResourceURL("AiJsTools", "JS"), // URL to load the script from + onload: _ => { console.log("AiJsTools loaded"); } // Callback function when the script is loaded + }); + + // Event handler for keyup events + $(document).on("keyup", (e) => { + + if (e.ctrlKey /*&& e.altKey*/ && e.key === 'q' && $('.code-editor').length > 0) { // Check if Ctrl (and Alt) key and 'q' key are pressed and a code editor is present + e.preventDefault(); // Prevent the default action + e.stopPropagation(); // Stop the event from propagating + AiJsTools.commentCode(); // Call the function to comment the code + } + }); + }); + + // Event handler for before unload + $(document).on("ui.beforeunload", function() { + // Code to execute before the window is unloaded + }); + + // Event handler for unload + $(document).on("ui.unload", function() { + // Code to execute when the window is unloaded + }); +})(jQuery); +//These comments should help clarify the purpose and functionality of each section of the code. \ No newline at end of file diff --git a/resources/ObjectExternal/AIChatBot/SCRIPT.js b/resources/ObjectExternal/AIChatBot/SCRIPT.js index 87f7724..5b61cf9 100644 --- a/resources/ObjectExternal/AIChatBot/SCRIPT.js +++ b/resources/ObjectExternal/AIChatBot/SCRIPT.js @@ -34,7 +34,7 @@ var AIChatBot = AIChatBot || (function() { } function createHistoric(item){ - historicObject.save((newItem)=>{console.log("historic created",newItem)},item); + historicObject.save((newItem)=>{console.log("historic created",newItem);},item); } function chatbotSendMessage(ctn) { let userMessage = ctn.querySelector('#chatbot_input_message').value; @@ -81,7 +81,7 @@ var AIChatBot = AIChatBot || (function() { } - + let userImg = $(ctn).find("#input-img img")?.attr("src"); // Efface le champ de saisie utilisateur if(AiJsTools){ AiJsTools.resetInput(ctn.querySelector('.ai-chat-input-area')); @@ -99,11 +99,13 @@ var AIChatBot = AIChatBot || (function() { let result = botResponse.response.choices[0].message.content; result = escapeHtml(result); result = $view.markdownToHTML(result).html(); - $(ctn).find(".bot-messages:last-child span").html(result); - addHistoric(userMessage,result,$grant.getLogin()); + $(ctn).find(".bot-messages:last-child span").html(result); + console.log("botResponse",botResponse); + console.log("addHistoric(",userMessage,",",result,",",userImg,",",botResponse.response.usage,",",$grant.getLogin(),")"); + addHistoric(userMessage,result,userImg,botResponse.response.usage,$grant.getLogin()); }else{ $(ctn).find(".bot-messages:last-child span").text("Sorry, an error occurred"); - addHistoric(userMessage,"Sorry, an error occurred",$grant.getLogin()); + addHistoric(userMessage,"Sorry, an error occurred",null,null,$grant.getLogin()); } enableChatbot(ctn); chatMessages.scrollTop = chatMessages.scrollHeight; @@ -129,20 +131,40 @@ var AIChatBot = AIChatBot || (function() { $(ctn).find("#chatbot_send_button").prop("disabled", false); $(ctn).find("#chatbot_input_message").prop("disabled", false); } - function addHistoric(userMessage,botMessage,login){ + function addHistoric(userMessage,botMessage,userImg,cost,login){ if(!historicObject) return; let botn = "bot"; if(AiJsTools){ botn = AiJsTools.botName; } + let promptHist = $app.getBusinessObject("AdaPromptsLogger"); + promptHist.getForCreate((item)=>{ + + item.adaPlogPhyId = historicObject.getRowId(); + item.adaPlogPrompt = userMessage; + item.adaPlogResponse = botMessage; + item.adaPlogCost = cost; + if(userImg)item.adaPlogImage =userImg; + console.log("item to create",item); + app._call(true, Simplicite.ROOT+"/ext/AdaSavePrompt", {obj:item}, function callback(botResponse){ + if(!(botResponse.hasOwnProperty('type') && botResponse.type == 'error')){ + console.log("prompt saved"); + }else{ + console.log("error prompt save",botResponse); + } + }); + }); + /*oldhist let message = ""; if(historicObject.item.adaPhyChat){ message = historicObject.item.adaPhyChat; } + message += `\n# ${login}\n${userMessage}\n\n# ${botn}\n${botMessage}\n\n`; historicObject.item.adaPhyChat = message; historicObject.item[`adaPhyUserPrompts`] = userMessage; historicObject.save(); + */ } return { render: render, chatbotSendMessage: chatbotSendMessage}; diff --git a/resources/ObjectExternal/AIMetricsChat/SCRIPT.js b/resources/ObjectExternal/AIMetricsChat/SCRIPT.js index 1bd235a..c09776e 100644 --- a/resources/ObjectExternal/AIMetricsChat/SCRIPT.js +++ b/resources/ObjectExternal/AIMetricsChat/SCRIPT.js @@ -323,4 +323,4 @@ var AIMetricsChat = AIMetricsChat || (function() { saveAsCrosstable: saveAsCrosstable, displayHistItemById: displayHistItemById }; -})(); +})(); \ No newline at end of file diff --git a/resources/ObjectExternal/AIProcessResource/CHAT_BOT_SCRIPT.js b/resources/ObjectExternal/AIProcessResource/CHAT_BOT_SCRIPT.js index d660d9d..0d98a3d 100644 --- a/resources/ObjectExternal/AIProcessResource/CHAT_BOT_SCRIPT.js +++ b/resources/ObjectExternal/AIProcessResource/CHAT_BOT_SCRIPT.js @@ -178,5 +178,4 @@ var AIWfChatBot = AIWfChatBot || (function() { $(document).ready(function() { AIWfChatBot.render(); -}); - +}); \ No newline at end of file diff --git a/resources/ObjectInternal/AIProvider/CLASS.js b/resources/ObjectInternal/AIProvider/CLASS.js index 6349364..1e7e62d 100644 --- a/resources/ObjectInternal/AIProvider/CLASS.js +++ b/resources/ObjectInternal/AIProvider/CLASS.js @@ -422,4 +422,4 @@ getUserParameters(){ return defaultValue; } -}; // class Simplicite.UI.BusinessObjects.AIProvider +}; // class Simplicite.UI.BusinessObjects.AIProvider \ No newline at end of file diff --git a/src/com/simplicite/commons/AIBySimplicite/AITools.java b/src/com/simplicite/commons/AIBySimplicite/AITools.java index ee23313..da905e0 100644 --- a/src/com/simplicite/commons/AIBySimplicite/AITools.java +++ b/src/com/simplicite/commons/AIBySimplicite/AITools.java @@ -19,6 +19,8 @@ import java.text.Normalizer; import java.util.regex.Matcher; import java.util.regex.Pattern; + + import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.core.type.TypeReference; import com.simplicite.util.tools.*; @@ -65,7 +67,7 @@ public class AITools implements java.io.Serializable { private static final String CALLER_PARAM_SECURE = "secure"; private static final String CALLER_PARAM_SAFE_SPE ="isSafeSpe"; private static final String CALLER_PARAM_TOKEN ="maxToken"; - + private static final String CALLER_PARAM_CODE_SECURE = "code_secure"; private static final String MAX_TOKEN = "max_tokens"; public static final String TYPE_TEXT = "text"; public static final String TYPE_IMAGE_URL = "image_url"; @@ -105,11 +107,11 @@ private static class AICallerParams { private JSONArray historic; private JSONObject providerParams; private int maxToken = 1500; - private AICallerParams(Object promptObject,JSONObject params) throws AITypeException{ boolean secure = params.optBoolean(CALLER_PARAM_SECURE, false); boolean isSafeSpe = params.optBoolean(CALLER_PARAM_SAFE_SPE, false); - setPrompt(promptObject, secure); + boolean codeSecure = params.optBoolean(CALLER_PARAM_CODE_SECURE, false); + setPrompt(promptObject, secure,codeSecure); setSpecialisation(params.optString(CALLER_PARAM_SPE),isSafeSpe); historic = params.optJSONArray(CALLER_PARAM_HISTORIC, new JSONArray()); providerParams = params.optJSONObject("providerParams", new JSONObject()); @@ -133,13 +135,18 @@ private void setSpecialisation(String spe,boolean isSafe){ if("\"\"".equals(spe)) spe = ""; specialisation = spe; } - private void setPrompt(Object promptObject,boolean isSafe) throws AITypeException{ + private void setPrompt(Object promptObject,boolean isSafe,boolean codeSecure) throws AITypeException{ //prompt to JSONArray if(promptObject instanceof String){ prompt = new JSONArray(); - String strPrompt = normalize((String)promptObject,isSafe); - prompt.put(getformatedContentByType(strPrompt,TYPE_TEXT,false)); - + if(codeSecure){ + String strPrompt = normalizeCode((String)promptObject); + prompt.put(getformatedContentByType(strPrompt,TYPE_TEXT,true)); + }else{ + String strPrompt = normalize((String)promptObject,isSafe); + prompt.put(getformatedContentByType(strPrompt,TYPE_TEXT,false)); + } + }else if(promptObject instanceof JSONArray){ prompt= (JSONArray)promptObject; }else{ @@ -447,6 +454,22 @@ private static String getProvider(){ } return provider; } + public static JSONObject filterTokensJson(JSONObject original) { + JSONObject filtered = new JSONObject(); + if (original.has("total_tokens")) { + filtered.put("total_tokens", original.get("total_tokens")); + } + if (original.has("prompt_tokens")) { + filtered.put("prompt_tokens", original.get("prompt_tokens")); + } + if (original.has("completion_tokens")) { + filtered.put("completion_tokens", original.get("completion_tokens")); + } + return filtered; + } + public static boolean isProvider(String provider,String key){ + return (aiProvider.equals(provider) && apiKey.equals(key)); + } /** * This method is used to patch the merged system parameters. * It checks if the old AI sysparams style exists and if so, it patches the new AI sysparams. @@ -748,6 +771,19 @@ public static JSONObject aiCodeHelper(Grant g, String prompt,JSONArray historic) return new JSONObject(); } } + public static JSONObject aiCodeCaller(Grant g,String specialisation, String code){ + try{ + JSONObject params = new JSONObject().put(CALLER_PARAM_SPE, specialisation) + .put(CALLER_PARAM_TOKEN, aiApiParam.getInt("code_max_token")) + .put(CALLER_PARAM_CODE_SECURE,true); + AppLog.info("CODE "+code); + AICallerParams caller = new AICallerParams(code,params); + return caller.aiCall(g); + }catch (AITypeException e){ + AppLog.error(e,g); + return new JSONObject(); + } + } /** * Format an exchange to AI API format. @@ -868,6 +904,9 @@ public static String normalize(String text, boolean secure){ text = removeAcent(text); return secure?Normalizer.normalize(text, Normalizer.Form.NFD).replaceAll("[\u0300-\u036F]", "").replaceAll("[^\\w\\(\\),`{}.\\[\\]\"@\\/:-]", " "):normalize(text); } + public static String normalizeCode(String text){ + return removeAcent(text); + } public static String removeAcent(String text){ text = text.replaceAll("(?u)[éèêë]", "e") .replaceAll("(?u)[àâä]","a" ) diff --git a/src/com/simplicite/dispositions/AIBySimplicite/AiEnhancedSimplicite.java b/src/com/simplicite/dispositions/AIBySimplicite/AiEnhancedSimplicite.java new file mode 100644 index 0000000..5ded217 --- /dev/null +++ b/src/com/simplicite/dispositions/AIBySimplicite/AiEnhancedSimplicite.java @@ -0,0 +1,53 @@ +package com.simplicite.dispositions.AIBySimplicite; + +import java.util.*; + +import com.simplicite.util.*; +import com.simplicite.util.exceptions.*; +import com.simplicite.util.engine.PermaLinks; +import com.simplicite.util.tools.*; +import com.simplicite.webapp.HTMLPage; +import com.simplicite.webapp.ResponsivePage; +/** + * Disposition AiEnhancedSimplicite + */ +public class AiEnhancedSimplicite extends com.simplicite.dispositions.UI.Bootstrap { + private static final long serialVersionUID = 1L; + + /** + * Display method + * @param params Request parameters + */ + @Override + public String display(Parameters params) { + Grant g = getGrant(); + try + { + String dl = params.getParameter("deeplink"); + + // permalink to deeplink + if (dl==null) + { + String pl = params.getParameter("permalink"); + if (pl!=null) try + { + dl = PermaLinks.deeplink(g, pl); + } + catch (GetException | GrantException e) + { + // Ignore the permalink + } + } + + ResponsivePage wp = new ResponsivePage(params.getRoot(), g.getWindowTitle(), g, dl); + + wp.appendJSInclude(HTMLPage.getResourceJSURL(g, "SCRIPT_AI")); + return wp.toString(); + } + catch (Exception e) // Catch any exception + { + AppLog.error(getClass(), "display", "Unexpected error while displaying dispositon " + getName(), e, g); + return e.getMessage(); + } + } +} \ No newline at end of file diff --git a/src/com/simplicite/extobjects/AIBySimplicite/AIExpTool.java b/src/com/simplicite/extobjects/AIBySimplicite/AIExpTool.java index 7556234..f325d39 100644 --- a/src/com/simplicite/extobjects/AIBySimplicite/AIExpTool.java +++ b/src/com/simplicite/extobjects/AIBySimplicite/AIExpTool.java @@ -18,6 +18,4 @@ public class AIExpTool extends ExternalObject { // or com.simplicite.webapp.web. public Object display(Parameters params) { return javascript("alert(\"not front object\")"); } -} - - +} \ No newline at end of file diff --git a/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java b/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java index 257ce2b..5df9587 100644 --- a/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java +++ b/src/com/simplicite/extobjects/AIBySimplicite/AIRestAPI.java @@ -21,6 +21,7 @@ public class AIRestAPI extends com.simplicite.webapp.services.RESTServiceExterna private static final String OBJ_FIELD_NAME = "fieldName"; private static final String JSON_REQ_TYPE = "reqType"; private static final String JSON_SWAGGER = "swagger"; + private static final String PARAMS_CONTENT_KEY = "content"; @Override public Object get(Parameters params) throws HTTPException { return error(400, "Call me in POST please!"); @@ -68,6 +69,10 @@ public Object post(Parameters params) throws HTTPException { return updateFieldByParam(prompt,params,objectID,objectName); case "frontAiCall": return frontAiCaller(objectName, objectID); + case "commentCode": + String content =params.getParameter(PARAMS_CONTENT_KEY); + return commentCode(content); + default: AppLog.info("AI API ERROR: "+type+params.toJSON()); return error(400, "Call me with a predefined request type, prompt or a object param please!"); @@ -79,6 +84,12 @@ public Object post(Parameters params) throws HTTPException { } } + private Object commentCode(String code){ + Grant g = Grant.getSystemAdmin(); + AppLog.info(code); + JSONObject commentedCode = AITools.aiCodeCaller(g,"You add comment on the code provided.e",code); + return commentedCode; + } private Object metricsPost(Parameters params,String prompt){ JSONObject swagger = params.has(JSON_SWAGGER)?new JSONObject(params.getParameter(JSON_SWAGGER)):null; String lang = params.getParameter("lang"); From 6d19692ba8b9a1af765fa3eaa5c9c98ea3685c63 Mon Sep 17 00:00:00 2001 From: "cbi (Candice Bimont)" Date: Mon, 24 Feb 2025 09:22:07 +0100 Subject: [PATCH 70/74] fix group --- AIBySimplicite.json | 1237 ++++++++++++++------------ files/Model/Model-AIModuleCreate.png | Bin 90700 -> 92901 bytes files/Model/Model-AIModuleCreate.svg | 2 +- module-info.json | 4 +- pom.xml | 8 +- 5 files changed, 655 insertions(+), 596 deletions(-) diff --git a/AIBySimplicite.json b/AIBySimplicite.json index 22e36c5..18a1542 100644 --- a/AIBySimplicite.json +++ b/AIBySimplicite.json @@ -7,7 +7,7 @@ "mdl_version": "0.30", "mdl_type": "T", "mdl_icon": null, - "mdl_url": "{\n \"origin\": {\"uri\": \"https://github.com/simplicitesoftware/module_ai.git\"},\n \"type\": \"git\",\n \"branch\": \"6.1\"\n}", + "mdl_url": "{\n \"origin\": {\"uri\": \"https://github.com/simplicitesoftware/module_ai.git\"},\n \"type\": \"git\",\n \"branch\": \"rec\"\n}", "mdl_comment": "### Introduction\nExploratory module on the use of AI in Simplicite\n\n---\n\n### Import\nTo import this module, you have two options:\n\n#### Option 1: Git Repository\n\n1. Create a module named `AIBySimplicite`.\n2. Set the settings as:\n```json\n{\n\t\"origin\": {\n\t\t\"uri\": \"https://github.com/simplicitesoftware/module_ai.git\"\n\t},\n\t\"type\": \"git\",\n\t\"branch\": \"6.1\"\n}\n```\n3. Click on the Import module button.\n\n#### Option 2: App Store\n\n1. Navigate to the App Store in the Project domain.\n2. Go to the Tools tab.\n3. Select \"AI integrations\" from the list.\n4. Follow the on-screen instructions to import the module.\n\n---\n\n### Configure\nTo configure the AI connection, utilize the `configuring the wizard` process in the `AI assistant` domain in extended mode.\n\nSelect the model (LLM) you wish to use, configure the API key, and the URL of your API.\n\n**Follow the process:**\n\nAfter configuring, you will obtain the details of your now active configuration. This summary is available on the homepage of the domain.\n\n
\n Parameters details<\/summary>\n\n##### hist_depth\nDefines the number of messages in the history used for the context. The greater this number, the more tokens the request uses, but the more relevant is the response.\n\n##### max_token\n*optional* \nLimits the number of tokens in the AI response.\n\n###### default_max_token\nMaximum number of tokens in a usual context.\n\n###### code_max_token\nMaximum number of tokens for technical calls.\n\n<\/details>\n\n---\n\n### wizzard\n#### Module generation\nUse AI to co-create or update a module based on your business needs\n`Module generation` in `AI assistant` domain.\n\n#### Data generation\nUse AI to generate test data for a module.\n`Data generation` in `AI assistant` domain.\n\n#### Business chatbot\nA shortcut to a chatbot contextualized according to the form on which it is opened.\nThe user must have `AI_BUSINESS` rights.\nThe `Personal data`, `Confidential data` and `Intimate` fields are not sent to the AI.\n\n\n#### Metrics\nGenerating AI graphs on a module's data\nIn a `view` add an `external page` of source `External object`: `AIMetricsChat?module=`\n\nFor detailed examples on how to generate modules, interact with business chatbots, and visualize metrics, please refer to the example available at the following link:\n[Explore AI Assistant Prompt Examples](https://github.com/simplicitesoftware/module_ai/blob/51425242c08e8f224ecc8d15ebcd80ca8b205d4c/EXAMPLE.md)" }, "links": [ @@ -156,7 +156,7 @@ "mod_doc": { "path": "files/Model/Model-AIModuleCreate.svg", "mime": "image/svg+xml", - "name": "Model-AIModuleCreate.svg" + "name": "model.svg" }, "mod_image": { "path": "files/Model/Model-AIModuleCreate.png", @@ -3272,7 +3272,7 @@ "obo_btn_savecopy": true, "obo_btn_close": true, "obo_tray": true, - "obo_dashboard": true, + "obo_dashboard": ["1"], "obo_prefix": "ggd", "obo_search_ts": null, "obo_minrows": null, @@ -3350,7 +3350,7 @@ "obo_btn_savecopy": true, "obo_btn_close": true, "obo_tray": true, - "obo_dashboard": true, + "obo_dashboard": ["1"], "obo_prefix": null, "obo_search_ts": null, "obo_minrows": null, @@ -3429,7 +3429,7 @@ "obo_btn_savecopy": true, "obo_btn_close": true, "obo_tray": true, - "obo_dashboard": true, + "obo_dashboard": ["1"], "obo_prefix": "mh", "obo_search_ts": null, "obo_minrows": null, @@ -3512,7 +3512,7 @@ "obo_btn_savecopy": true, "obo_btn_close": true, "obo_tray": true, - "obo_dashboard": true, + "obo_dashboard": ["1"], "obo_prefix": "prv", "obo_search_ts": null, "obo_minrows": null, @@ -4534,7 +4534,7 @@ "obf_ref_export": true, "obf_copy": false, "obf_ref_order": null, - "obf_fld_visible": "1", + "obf_fld_visible": null, "obf_fld_required": null, "obf_fld_updatable": ["0"], "obf_fld_research": null, @@ -6226,7 +6226,7 @@ "acy_max_duration": null, "acy_duration_unit": null, "acy_alert_id__alt_name": null, - "acy_user_dlg": false, + "acy_user_dlg": true, "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -6245,7 +6245,7 @@ "acy_max_duration": null, "acy_duration_unit": null, "acy_alert_id__alt_name": null, - "acy_user_dlg": false, + "acy_user_dlg": true, "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -7239,28 +7239,28 @@ }, { "object": "BPMData", - "userkey": "AIGenData GGD-END Forward PARAM:1", + "userkey": "AIGenData GGD-END Forward Page", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIGenData", "dta_activity_id__acy_step": "GGD-END", "dta_group": "Forward", - "dta_name": "PARAM:1", + "dta_name": "Page", "dta_order": 1, - "dta_value": "GGD_0100.Field.row_id", + "dta_value": "[EXPR:HTMLTool.getFormURL(\"Module\", null, \"[PARAM:1]\", \"nav=add\")]", "dta_field_id__fld_name": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "BPMData", - "userkey": "AIGenData GGD-END Forward Page", + "userkey": "AIGenData GGD-END Forward PARAM:1", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIGenData", "dta_activity_id__acy_step": "GGD-END", "dta_group": "Forward", - "dta_name": "Page", + "dta_name": "PARAM:1", "dta_order": 1, - "dta_value": "[EXPR:HTMLTool.getFormURL(\"Module\", null, \"[PARAM:1]\", \"nav=add\")]", + "dta_value": "GGD_0100.Field.row_id", "dta_field_id__fld_name": null, "row_module_id__mdl_name": "AIBySimplicite" } @@ -7407,29 +7407,29 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate AIC_0005 Data Template", + "userkey": "AIModuleCreate AIC_0005 Data AREA:1", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0005", "dta_group": "Data", - "dta_name": "Template", + "dta_name": "AREA:1", "dta_order": 1, - "dta_value": "Base", - "dta_field_id__fld_name": null, + "dta_value": "0", + "dta_field_id__fld_name": "aiSelectProcess", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "BPMData", - "userkey": "AIModuleCreate AIC_0005 Data AREA:1", + "userkey": "AIModuleCreate AIC_0005 Data Template", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0005", "dta_group": "Data", - "dta_name": "AREA:1", + "dta_name": "Template", "dta_order": 1, - "dta_value": "0", - "dta_field_id__fld_name": "aiSelectProcess", + "dta_value": "Base", + "dta_field_id__fld_name": null, "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -7925,12 +7925,12 @@ }, { "object": "BPMData", - "userkey": "AiSettingsProcess ASP-0200 Data aiPrvSttUrl", + "userkey": "AiSettingsProcess ASP-0200 Data aiPrvCompletionUrl", "item": { "dta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "dta_activity_id__acy_step": "ASP-0200", "dta_group": "Data", - "dta_name": "aiPrvSttUrl", + "dta_name": "aiPrvCompletionUrl", "dta_order": 1, "dta_value": null, "dta_field_id__fld_name": null, @@ -7939,12 +7939,12 @@ }, { "object": "BPMData", - "userkey": "AiSettingsProcess ASP-0200 Data aiPrvCompletionUrl", + "userkey": "AiSettingsProcess ASP-0200 Data key", "item": { "dta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "dta_activity_id__acy_step": "ASP-0200", "dta_group": "Data", - "dta_name": "aiPrvCompletionUrl", + "dta_name": "key", "dta_order": 1, "dta_value": null, "dta_field_id__fld_name": null, @@ -7953,12 +7953,12 @@ }, { "object": "BPMData", - "userkey": "AiSettingsProcess ASP-0200 Data key", + "userkey": "AiSettingsProcess ASP-0200 Data aiPrvModelsUrl", "item": { "dta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "dta_activity_id__acy_step": "ASP-0200", "dta_group": "Data", - "dta_name": "key", + "dta_name": "aiPrvModelsUrl", "dta_order": 1, "dta_value": null, "dta_field_id__fld_name": null, @@ -7967,12 +7967,12 @@ }, { "object": "BPMData", - "userkey": "AiSettingsProcess ASP-0200 Data aiPrvModelsUrl", + "userkey": "AiSettingsProcess ASP-0200 Data aiPrvSttUrl", "item": { "dta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "dta_activity_id__acy_step": "ASP-0200", "dta_group": "Data", - "dta_name": "aiPrvModelsUrl", + "dta_name": "aiPrvSttUrl", "dta_order": 1, "dta_value": null, "dta_field_id__fld_name": null, @@ -8073,25 +8073,25 @@ "list": [ { "object": "BPMHelp", - "userkey": "AIModuleCreate AIC_0400 French", + "userkey": "AIModuleCreate AIC_0400 English", "item": { "hlp_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "hlp_activity_id__acy_step": "AIC_0400", - "hlp_lang": "FRA", + "hlp_lang": "ENU", "hlp_abstract": null, - "hlp_content": "

Exprimez votre besoin de la manière la plus concise possible<\/p>", + "hlp_content": "

Express your need as concisely as possible<\/p>", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "BPMHelp", - "userkey": "AIModuleCreate AIC_0400 English", + "userkey": "AIModuleCreate AIC_0400 French", "item": { "hlp_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "hlp_activity_id__acy_step": "AIC_0400", - "hlp_lang": "ENU", + "hlp_lang": "FRA", "hlp_abstract": null, - "hlp_content": "

Express your need as concisely as possible<\/p>", + "hlp_content": "

Exprimez votre besoin de la manière la plus concise possible<\/p>", "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -8134,6 +8134,7 @@ "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIGenData", "gta_activity_id__acy_step": "GDD_SETTINGS_END", + "gta_activity_id__acy_name": "GoToSettings", "gta_grant": [ "R", "W", @@ -8149,6 +8150,7 @@ "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIGenData", "gta_activity_id__acy_step": "GGD_0050", + "gta_activity_id__acy_name": "IsParam", "gta_grant": [ "R", "W", @@ -8164,6 +8166,7 @@ "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIGenData", "gta_activity_id__acy_step": "GGD_0075", + "gta_activity_id__acy_name": "NoParam", "gta_grant": ["W"], "row_module_id__mdl_name": "AIBySimplicite" } @@ -8175,6 +8178,7 @@ "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIGenData", "gta_activity_id__acy_step": "GGD_0100", + "gta_activity_id__acy_name": "SelectModule", "gta_grant": ["W"], "row_module_id__mdl_name": "AIBySimplicite" } @@ -8186,6 +8190,7 @@ "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIGenData", "gta_activity_id__acy_step": "GGD_0150", + "gta_activity_id__acy_name": "Confirm", "gta_grant": ["W"], "row_module_id__mdl_name": "AIBySimplicite" } @@ -8197,6 +8202,7 @@ "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIGenData", "gta_activity_id__acy_step": "GGD_0200", + "gta_activity_id__acy_name": "GenData", "gta_grant": ["W"], "row_module_id__mdl_name": "AIBySimplicite" } @@ -8208,6 +8214,7 @@ "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "gta_activity_id__acy_step": "AIC_0005", + "gta_activity_id__acy_name": "Choice", "gta_grant": [ "R", "W", @@ -8223,6 +8230,7 @@ "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "gta_activity_id__acy_step": "AIC_0010", + "gta_activity_id__acy_name": "CreateModule", "gta_grant": ["W"], "row_module_id__mdl_name": "AIBySimplicite" } @@ -8234,6 +8242,7 @@ "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "gta_activity_id__acy_step": "AIC_0015", + "gta_activity_id__acy_name": "TranslateDomain", "gta_grant": [ "R", "W", @@ -8249,6 +8258,7 @@ "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "gta_activity_id__acy_step": "AIC_0017", + "gta_activity_id__acy_name": "NewScope", "gta_grant": [ "R", "W", @@ -8264,6 +8274,7 @@ "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "gta_activity_id__acy_step": "AIC_0020", + "gta_activity_id__acy_name": "GrantUser", "gta_grant": [ "R", "W", @@ -8279,6 +8290,7 @@ "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "gta_activity_id__acy_step": "AIC_0050", + "gta_activity_id__acy_name": "isParam", "gta_grant": [ "R", "W", @@ -8294,6 +8306,7 @@ "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "gta_activity_id__acy_step": "AIC_0075", + "gta_activity_id__acy_name": "NoParam", "gta_grant": ["W"], "row_module_id__mdl_name": "AIBySimplicite" } @@ -8305,6 +8318,7 @@ "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "gta_activity_id__acy_step": "AIC_0100", + "gta_activity_id__acy_name": "SelectModule", "gta_grant": ["W"], "row_module_id__mdl_name": "AIBySimplicite" } @@ -8316,6 +8330,7 @@ "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "gta_activity_id__acy_step": "AIC_0200", + "gta_activity_id__acy_name": "SelectGroup", "gta_grant": ["W"], "row_module_id__mdl_name": "AIBySimplicite" } @@ -8327,6 +8342,7 @@ "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "gta_activity_id__acy_step": "AIC_0300", + "gta_activity_id__acy_name": "SelectDomain", "gta_grant": [ "W", "C" @@ -8341,6 +8357,7 @@ "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "gta_activity_id__acy_step": "AIC_0350", + "gta_activity_id__acy_name": "interaction", "gta_grant": ["W"], "row_module_id__mdl_name": "AIBySimplicite" } @@ -8352,6 +8369,7 @@ "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "gta_activity_id__acy_step": "AIC_0400", + "gta_activity_id__acy_name": "Prompt", "gta_grant": [ "R", "W", @@ -8367,6 +8385,7 @@ "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "gta_activity_id__acy_step": "AIC_0500", + "gta_activity_id__acy_name": "AI", "gta_grant": ["W"], "row_module_id__mdl_name": "AIBySimplicite" } @@ -8378,6 +8397,7 @@ "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "gta_activity_id__acy_step": "AIC_0600", + "gta_activity_id__acy_name": "Generation", "gta_grant": ["W"], "row_module_id__mdl_name": "AIBySimplicite" } @@ -8389,6 +8409,7 @@ "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "gta_activity_id__acy_step": "AIC_0700", + "gta_activity_id__acy_name": "RemoveModule", "gta_grant": ["W"], "row_module_id__mdl_name": "AIBySimplicite" } @@ -8400,6 +8421,7 @@ "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "gta_activity_id__acy_step": "ASP-0050", + "gta_activity_id__acy_name": "isGlobalParam", "gta_grant": [ "R", "W", @@ -8415,6 +8437,7 @@ "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "gta_activity_id__acy_step": "ASP-0075", + "gta_activity_id__acy_name": "Global", "gta_grant": ["W"], "row_module_id__mdl_name": "AIBySimplicite" } @@ -8426,6 +8449,7 @@ "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "gta_activity_id__acy_step": "ASP-0100", + "gta_activity_id__acy_name": "SelectProvider", "gta_grant": ["W"], "row_module_id__mdl_name": "AIBySimplicite" } @@ -8437,6 +8461,7 @@ "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "gta_activity_id__acy_step": "ASP-0200", + "gta_activity_id__acy_name": "Auth", "gta_grant": ["W"], "row_module_id__mdl_name": "AIBySimplicite" } @@ -8448,6 +8473,7 @@ "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "gta_activity_id__acy_step": "ASP-0400", + "gta_activity_id__acy_name": "OtherParam", "gta_grant": [ "R", "W", @@ -8463,6 +8489,7 @@ "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "gta_activity_id__acy_step": "ASP-0500", + "gta_activity_id__acy_name": "AddShortCut", "gta_grant": ["W"], "row_module_id__mdl_name": "AIBySimplicite" } @@ -8474,6 +8501,7 @@ "gta_group_id__grp_name": "AI_ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "gta_activity_id__acy_step": "ASP-0050", + "gta_activity_id__acy_name": "isGlobalParam", "gta_grant": [ "R", "W", @@ -8489,6 +8517,7 @@ "gta_group_id__grp_name": "AI_ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "gta_activity_id__acy_step": "ASP-0075", + "gta_activity_id__acy_name": "Global", "gta_grant": ["W"], "row_module_id__mdl_name": "AIBySimplicite" } @@ -8500,6 +8529,7 @@ "gta_group_id__grp_name": "AI_ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "gta_activity_id__acy_step": "ASP-0100", + "gta_activity_id__acy_name": "SelectProvider", "gta_grant": ["W"], "row_module_id__mdl_name": "AIBySimplicite" } @@ -8511,6 +8541,7 @@ "gta_group_id__grp_name": "AI_ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "gta_activity_id__acy_step": "ASP-0200", + "gta_activity_id__acy_name": "Auth", "gta_grant": ["W"], "row_module_id__mdl_name": "AIBySimplicite" } @@ -8522,6 +8553,7 @@ "gta_group_id__grp_name": "AI_ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "gta_activity_id__acy_step": "ASP-0400", + "gta_activity_id__acy_name": "OtherParam", "gta_grant": [ "R", "W", @@ -8537,6 +8569,7 @@ "gta_group_id__grp_name": "AI_ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "gta_activity_id__acy_step": "ASP-0500", + "gta_activity_id__acy_name": "AddShortCut", "gta_grant": ["W"], "row_module_id__mdl_name": "AIBySimplicite" } @@ -8548,6 +8581,7 @@ "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIGenData", "gta_activity_id__acy_step": "GDD_SETTINGS_END", + "gta_activity_id__acy_name": "GoToSettings", "gta_grant": [ "R", "W", @@ -8563,6 +8597,7 @@ "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIGenData", "gta_activity_id__acy_step": "GGD_0050", + "gta_activity_id__acy_name": "IsParam", "gta_grant": [ "R", "W", @@ -8578,6 +8613,7 @@ "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIGenData", "gta_activity_id__acy_step": "GGD_0075", + "gta_activity_id__acy_name": "NoParam", "gta_grant": ["W"], "row_module_id__mdl_name": "AIBySimplicite" } @@ -8589,6 +8625,7 @@ "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIGenData", "gta_activity_id__acy_step": "GGD_0100", + "gta_activity_id__acy_name": "SelectModule", "gta_grant": ["W"], "row_module_id__mdl_name": "AIBySimplicite" } @@ -8600,6 +8637,7 @@ "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIGenData", "gta_activity_id__acy_step": "GGD_0150", + "gta_activity_id__acy_name": "Confirm", "gta_grant": ["W"], "row_module_id__mdl_name": "AIBySimplicite" } @@ -8611,6 +8649,7 @@ "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIGenData", "gta_activity_id__acy_step": "GGD_0200", + "gta_activity_id__acy_name": "GenData", "gta_grant": ["W"], "row_module_id__mdl_name": "AIBySimplicite" } @@ -8622,6 +8661,7 @@ "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "gta_activity_id__acy_step": "AIC_0005", + "gta_activity_id__acy_name": "Choice", "gta_grant": [ "R", "W", @@ -8637,6 +8677,7 @@ "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "gta_activity_id__acy_step": "AIC_0010", + "gta_activity_id__acy_name": "CreateModule", "gta_grant": ["W"], "row_module_id__mdl_name": "AIBySimplicite" } @@ -8648,6 +8689,7 @@ "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "gta_activity_id__acy_step": "AIC_0015", + "gta_activity_id__acy_name": "TranslateDomain", "gta_grant": [ "R", "W", @@ -8663,6 +8705,7 @@ "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "gta_activity_id__acy_step": "AIC_0017", + "gta_activity_id__acy_name": "NewScope", "gta_grant": [ "R", "W", @@ -8678,6 +8721,7 @@ "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "gta_activity_id__acy_step": "AIC_0020", + "gta_activity_id__acy_name": "GrantUser", "gta_grant": [ "R", "W", @@ -8693,6 +8737,7 @@ "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "gta_activity_id__acy_step": "AIC_0050", + "gta_activity_id__acy_name": "isParam", "gta_grant": [ "R", "W", @@ -8708,6 +8753,7 @@ "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "gta_activity_id__acy_step": "AIC_0075", + "gta_activity_id__acy_name": "NoParam", "gta_grant": ["W"], "row_module_id__mdl_name": "AIBySimplicite" } @@ -8719,6 +8765,7 @@ "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "gta_activity_id__acy_step": "AIC_0100", + "gta_activity_id__acy_name": "SelectModule", "gta_grant": ["W"], "row_module_id__mdl_name": "AIBySimplicite" } @@ -8730,6 +8777,7 @@ "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "gta_activity_id__acy_step": "AIC_0200", + "gta_activity_id__acy_name": "SelectGroup", "gta_grant": ["W"], "row_module_id__mdl_name": "AIBySimplicite" } @@ -8741,6 +8789,7 @@ "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "gta_activity_id__acy_step": "AIC_0300", + "gta_activity_id__acy_name": "SelectDomain", "gta_grant": [ "W", "C" @@ -8755,6 +8804,7 @@ "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "gta_activity_id__acy_step": "AIC_0350", + "gta_activity_id__acy_name": "interaction", "gta_grant": ["W"], "row_module_id__mdl_name": "AIBySimplicite" } @@ -8766,6 +8816,7 @@ "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "gta_activity_id__acy_step": "AIC_0500", + "gta_activity_id__acy_name": "AI", "gta_grant": ["W"], "row_module_id__mdl_name": "AIBySimplicite" } @@ -8777,6 +8828,7 @@ "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "gta_activity_id__acy_step": "AIC_0600", + "gta_activity_id__acy_name": "Generation", "gta_grant": ["W"], "row_module_id__mdl_name": "AIBySimplicite" } @@ -8788,6 +8840,7 @@ "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "gta_activity_id__acy_step": "AIC_0700", + "gta_activity_id__acy_name": "RemoveModule", "gta_grant": [ "R", "W" @@ -8802,6 +8855,7 @@ "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "gta_activity_id__acy_step": "ASP-0050", + "gta_activity_id__acy_name": "isGlobalParam", "gta_grant": [ "R", "W", @@ -8817,6 +8871,7 @@ "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "gta_activity_id__acy_step": "ASP-0075", + "gta_activity_id__acy_name": "Global", "gta_grant": ["W"], "row_module_id__mdl_name": "AIBySimplicite" } @@ -8828,6 +8883,7 @@ "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "gta_activity_id__acy_step": "ASP-0100", + "gta_activity_id__acy_name": "SelectProvider", "gta_grant": ["W"], "row_module_id__mdl_name": "AIBySimplicite" } @@ -8839,6 +8895,7 @@ "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "gta_activity_id__acy_step": "ASP-0200", + "gta_activity_id__acy_name": "Auth", "gta_grant": ["W"], "row_module_id__mdl_name": "AIBySimplicite" } @@ -8850,6 +8907,7 @@ "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "gta_activity_id__acy_step": "ASP-0400", + "gta_activity_id__acy_name": "OtherParam", "gta_grant": [ "R", "W", @@ -8865,6 +8923,7 @@ "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "gta_activity_id__acy_step": "ASP-0500", + "gta_activity_id__acy_name": "AddShortCut", "gta_grant": ["W"], "row_module_id__mdl_name": "AIBySimplicite" } @@ -9332,7 +9391,7 @@ "res_file": { "path": "resources/Disposition/responsive5/SCRIPT_AI.js", "mime": "text/javascript", - "name": "script_ai.js" + "name": "SCRIPT_AI.js" }, "res_image": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -9356,7 +9415,7 @@ "res_file": { "path": "resources/Disposition/AiEnhancedSimplicite/SCRIPT.js", "mime": "text/javascript", - "name": "script.js" + "name": "SCRIPT.js" }, "res_image": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -9429,7 +9488,7 @@ "res_image": { "path": "resources/Disposition/default/VIEW_AI.png", "mime": "image/png", - "name": "VIEW_Ai.png" + "name": "VIEW_AI.png" }, "row_module_id__mdl_name": "AIBySimplicite" } @@ -9554,150 +9613,6 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, - { - "object": "Resource", - "userkey": "AIExpTool * STYLES", - "item": { - "res_object": { - "item": {"obe_name": "AIExpTool"}, - "icon": "img/system/external_object", - "label": "External object", - "userkeylabel": "AIExpTool", - "object": "ObjectExternal" - }, - "res_type": "CSS", - "res_lang": "ANY", - "res_code": "STYLES", - "res_cached": false, - "res_file": { - "path": "resources/ObjectExternal/AIExpTool/STYLES.less", - "mime": "text/x-less", - "name": "STYLES.less" - }, - "res_image": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "Resource", - "userkey": "AIExpTool * HTML", - "item": { - "res_object": { - "item": {"obe_name": "AIExpTool"}, - "icon": "img/system/external_object", - "label": "External object", - "userkeylabel": "AIExpTool", - "object": "ObjectExternal" - }, - "res_type": "HTML", - "res_lang": "ANY", - "res_code": "HTML", - "res_cached": false, - "res_file": { - "path": "resources/ObjectExternal/AIExpTool/HTML.html", - "mime": "text/html", - "name": "HTML.html" - }, - "res_image": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "Resource", - "userkey": "AIExpTool * SCRIPT", - "item": { - "res_object": { - "item": {"obe_name": "AIExpTool"}, - "icon": "img/system/external_object", - "label": "External object", - "userkeylabel": "AIExpTool", - "object": "ObjectExternal" - }, - "res_type": "JS", - "res_lang": "ANY", - "res_code": "SCRIPT", - "res_cached": false, - "res_file": { - "path": "resources/ObjectExternal/AIExpTool/SCRIPT.js", - "mime": "text/javascript", - "name": "SCRIPT.js" - }, - "res_image": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "Resource", - "userkey": "AIMetricsChat * STYLES", - "item": { - "res_object": { - "item": {"obe_name": "AIMetricsChat"}, - "icon": "img/system/external_object", - "label": "External object", - "userkeylabel": "AIMetricsChat", - "object": "ObjectExternal" - }, - "res_type": "CSS", - "res_lang": "ANY", - "res_code": "STYLES", - "res_cached": false, - "res_file": { - "path": "resources/ObjectExternal/AIMetricsChat/STYLES.less", - "mime": "text/x-less", - "name": "STYLES.less" - }, - "res_image": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "Resource", - "userkey": "AIMetricsChat * HTML", - "item": { - "res_object": { - "item": {"obe_name": "AIMetricsChat"}, - "icon": "img/system/external_object", - "label": "External object", - "userkeylabel": "AIMetricsChat", - "object": "ObjectExternal" - }, - "res_type": "HTML", - "res_lang": "ANY", - "res_code": "HTML", - "res_cached": false, - "res_file": { - "path": "resources/ObjectExternal/AIMetricsChat/HTML.html", - "mime": "text/html", - "name": "HTML.html" - }, - "res_image": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "Resource", - "userkey": "AIMetricsChat * SCRIPT", - "item": { - "res_object": { - "item": {"obe_name": "AIMetricsChat"}, - "icon": "img/system/external_object", - "label": "External object", - "userkeylabel": "AIMetricsChat", - "object": "ObjectExternal" - }, - "res_type": "JS", - "res_lang": "ANY", - "res_code": "SCRIPT", - "res_cached": false, - "res_file": { - "path": "resources/ObjectExternal/AIMetricsChat/SCRIPT.js", - "mime": "text/javascript", - "name": "SCRIPT.js" - }, - "res_image": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, { "object": "Resource", "userkey": "AiMonitoring * STYLES", @@ -9988,13 +9903,13 @@ }, { "object": "Resource", - "userkey": "AIPromptTool * STYLES", + "userkey": "AIExpTool * STYLES", "item": { "res_object": { - "item": {"obe_name": "AIPromptTool"}, + "item": {"obe_name": "AIExpTool"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIPromptTool", + "userkeylabel": "AIExpTool", "object": "ObjectExternal" }, "res_type": "CSS", @@ -10002,7 +9917,7 @@ "res_code": "STYLES", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AIPromptTool/STYLES.less", + "path": "resources/ObjectExternal/AIExpTool/STYLES.less", "mime": "text/x-less", "name": "STYLES.less" }, @@ -10012,13 +9927,13 @@ }, { "object": "Resource", - "userkey": "AIPromptTool * HTML", + "userkey": "AIExpTool * HTML", "item": { "res_object": { - "item": {"obe_name": "AIPromptTool"}, + "item": {"obe_name": "AIExpTool"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIPromptTool", + "userkeylabel": "AIExpTool", "object": "ObjectExternal" }, "res_type": "HTML", @@ -10026,7 +9941,7 @@ "res_code": "HTML", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AIPromptTool/HTML.html", + "path": "resources/ObjectExternal/AIExpTool/HTML.html", "mime": "text/html", "name": "HTML.html" }, @@ -10036,13 +9951,13 @@ }, { "object": "Resource", - "userkey": "AIPromptTool * SCRIPT", + "userkey": "AIExpTool * SCRIPT", "item": { "res_object": { - "item": {"obe_name": "AIPromptTool"}, + "item": {"obe_name": "AIExpTool"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIPromptTool", + "userkeylabel": "AIExpTool", "object": "ObjectExternal" }, "res_type": "JS", @@ -10050,7 +9965,7 @@ "res_code": "SCRIPT", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AIPromptTool/SCRIPT.js", + "path": "resources/ObjectExternal/AIExpTool/SCRIPT.js", "mime": "text/javascript", "name": "SCRIPT.js" }, @@ -10060,23 +9975,23 @@ }, { "object": "Resource", - "userkey": "AiGroupGuiDesc * AI_DOMAIN_TEMPLATE_DESC_ENU", + "userkey": "AIMetricsChat * STYLES", "item": { "res_object": { - "item": {"obo_name": "AiGroupGuiDesc"}, - "icon": "img/system/business_object", - "label": "Business object", - "userkeylabel": "AiGroupGuiDesc", - "object": "ObjectInternal" + "item": {"obe_name": "AIMetricsChat"}, + "icon": "img/system/external_object", + "label": "External object", + "userkeylabel": "AIMetricsChat", + "object": "ObjectExternal" }, - "res_type": "MD", + "res_type": "CSS", "res_lang": "ANY", - "res_code": "AI_DOMAIN_TEMPLATE_DESC_ENU", + "res_code": "STYLES", "res_cached": false, "res_file": { - "path": "resources/ObjectInternal/AiGroupGuiDesc/AI_DOMAIN_TEMPLATE_DESC_ENU.text", - "mime": "application/octet-stream", - "name": "AI_DOMAIN_TEMPLATE_DESC_ENU.text" + "path": "resources/ObjectExternal/AIMetricsChat/STYLES.less", + "mime": "text/x-less", + "name": "STYLES.less" }, "res_image": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -10084,11 +9999,155 @@ }, { "object": "Resource", - "userkey": "AiGroupGuiDesc * AI_DOMAIN_TEMPLATE_DESC_FRA", + "userkey": "AIMetricsChat * HTML", "item": { "res_object": { - "item": {"obo_name": "AiGroupGuiDesc"}, - "icon": "img/system/business_object", + "item": {"obe_name": "AIMetricsChat"}, + "icon": "img/system/external_object", + "label": "External object", + "userkeylabel": "AIMetricsChat", + "object": "ObjectExternal" + }, + "res_type": "HTML", + "res_lang": "ANY", + "res_code": "HTML", + "res_cached": false, + "res_file": { + "path": "resources/ObjectExternal/AIMetricsChat/HTML.html", + "mime": "text/html", + "name": "HTML.html" + }, + "res_image": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "Resource", + "userkey": "AIMetricsChat * SCRIPT", + "item": { + "res_object": { + "item": {"obe_name": "AIMetricsChat"}, + "icon": "img/system/external_object", + "label": "External object", + "userkeylabel": "AIMetricsChat", + "object": "ObjectExternal" + }, + "res_type": "JS", + "res_lang": "ANY", + "res_code": "SCRIPT", + "res_cached": false, + "res_file": { + "path": "resources/ObjectExternal/AIMetricsChat/SCRIPT.js", + "mime": "text/javascript", + "name": "SCRIPT.js" + }, + "res_image": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "Resource", + "userkey": "AIPromptTool * STYLES", + "item": { + "res_object": { + "item": {"obe_name": "AIPromptTool"}, + "icon": "img/system/external_object", + "label": "External object", + "userkeylabel": "AIPromptTool", + "object": "ObjectExternal" + }, + "res_type": "CSS", + "res_lang": "ANY", + "res_code": "STYLES", + "res_cached": false, + "res_file": { + "path": "resources/ObjectExternal/AIPromptTool/STYLES.less", + "mime": "text/x-less", + "name": "STYLES.less" + }, + "res_image": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "Resource", + "userkey": "AIPromptTool * HTML", + "item": { + "res_object": { + "item": {"obe_name": "AIPromptTool"}, + "icon": "img/system/external_object", + "label": "External object", + "userkeylabel": "AIPromptTool", + "object": "ObjectExternal" + }, + "res_type": "HTML", + "res_lang": "ANY", + "res_code": "HTML", + "res_cached": false, + "res_file": { + "path": "resources/ObjectExternal/AIPromptTool/HTML.html", + "mime": "text/html", + "name": "HTML.html" + }, + "res_image": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "Resource", + "userkey": "AIPromptTool * SCRIPT", + "item": { + "res_object": { + "item": {"obe_name": "AIPromptTool"}, + "icon": "img/system/external_object", + "label": "External object", + "userkeylabel": "AIPromptTool", + "object": "ObjectExternal" + }, + "res_type": "JS", + "res_lang": "ANY", + "res_code": "SCRIPT", + "res_cached": false, + "res_file": { + "path": "resources/ObjectExternal/AIPromptTool/SCRIPT.js", + "mime": "text/javascript", + "name": "SCRIPT.js" + }, + "res_image": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "Resource", + "userkey": "AiGroupGuiDesc * AI_DOMAIN_TEMPLATE_DESC_ENU", + "item": { + "res_object": { + "item": {"obo_name": "AiGroupGuiDesc"}, + "icon": "img/system/business_object", + "label": "Business object", + "userkeylabel": "AiGroupGuiDesc", + "object": "ObjectInternal" + }, + "res_type": "MD", + "res_lang": "ANY", + "res_code": "AI_DOMAIN_TEMPLATE_DESC_ENU", + "res_cached": false, + "res_file": { + "path": "resources/ObjectInternal/AiGroupGuiDesc/AI_DOMAIN_TEMPLATE_DESC_ENU.text", + "mime": "application/octet-stream", + "name": "AI_DOMAIN_TEMPLATE_DESC_ENU.text" + }, + "res_image": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "Resource", + "userkey": "AiGroupGuiDesc * AI_DOMAIN_TEMPLATE_DESC_FRA", + "item": { + "res_object": { + "item": {"obo_name": "AiGroupGuiDesc"}, + "icon": "img/system/business_object", "label": "Business object", "userkeylabel": "AiGroupGuiDesc", "object": "ObjectInternal" @@ -10430,34 +10489,34 @@ }, { "object": "TranslateAction", - "userkey": "AI_SENT English", + "userkey": "AIAutoGenModule English", "item": { "tsl_object": { - "item": {"act_name": "AI_SENT"}, + "item": {"act_name": "AIAutoGenModule"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AI_SENT", + "userkeylabel": "AIAutoGenModule", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Sent", + "tsl_value": "Model generation by AI", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "AI_SENT French", + "userkey": "AIAutoGenModule French", "item": { "tsl_object": { - "item": {"act_name": "AI_SENT"}, + "item": {"act_name": "AIAutoGenModule"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AI_SENT", + "userkeylabel": "AIAutoGenModule", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Envoyé", + "tsl_value": "Génération du modèle par l'IA", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } @@ -10532,136 +10591,136 @@ }, { "object": "TranslateAction", - "userkey": "AIAddData English", + "userkey": "AIButtonSkip English", "item": { "tsl_object": { - "item": {"act_name": "AIAddData"}, + "item": {"act_name": "AIButtonSkip"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIAddData", + "userkeylabel": "AIButtonSkip", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Data generation", + "tsl_value": "Button skip", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "AIAddData French", + "userkey": "AIButtonSkip French", "item": { "tsl_object": { - "item": {"act_name": "AIAddData"}, + "item": {"act_name": "AIButtonSkip"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIAddData", + "userkeylabel": "AIButtonSkip", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Génération de données", + "tsl_value": "Saut de bouton", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "AIAutoGenModule English", + "userkey": "AI_SENT English", "item": { "tsl_object": { - "item": {"act_name": "AIAutoGenModule"}, + "item": {"act_name": "AI_SENT"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIAutoGenModule", + "userkeylabel": "AI_SENT", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Model generation by AI", + "tsl_value": "Sent", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "AIAutoGenModule French", + "userkey": "AI_SENT French", "item": { "tsl_object": { - "item": {"act_name": "AIAutoGenModule"}, + "item": {"act_name": "AI_SENT"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIAutoGenModule", + "userkeylabel": "AI_SENT", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Génération du modèle par l'IA", + "tsl_value": "Envoyé", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "AIButtonSkip English", + "userkey": "AICalculateFieldJs English", "item": { "tsl_object": { - "item": {"act_name": "AIButtonSkip"}, + "item": {"act_name": "AICalculateFieldJs"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIButtonSkip", + "userkeylabel": "AICalculateFieldJs", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Button skip", + "tsl_value": "Save with AI", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "AIButtonSkip French", + "userkey": "AICalculateFieldJs French", "item": { "tsl_object": { - "item": {"act_name": "AIButtonSkip"}, + "item": {"act_name": "AICalculateFieldJs"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIButtonSkip", + "userkeylabel": "AICalculateFieldJs", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Saut de bouton", + "tsl_value": "Enregistrer avec IA", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "AICalculateFieldJs English", + "userkey": "AIAddData English", "item": { "tsl_object": { - "item": {"act_name": "AICalculateFieldJs"}, + "item": {"act_name": "AIAddData"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AICalculateFieldJs", + "userkeylabel": "AIAddData", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Save with AI", + "tsl_value": "Data generation", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "AICalculateFieldJs French", + "userkey": "AIAddData French", "item": { "tsl_object": { - "item": {"act_name": "AICalculateFieldJs"}, + "item": {"act_name": "AIAddData"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AICalculateFieldJs", + "userkeylabel": "AIAddData", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Enregistrer avec IA", + "tsl_value": "Génération de données", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } @@ -10992,17 +11051,17 @@ }, { "object": "TranslateField", - "userkey": "aiAddShortCut English", + "userkey": "aiGgdLang English", "item": { "tsl_object": { - "item": {"fld_name": "aiAddShortCut"}, + "item": {"fld_name": "aiGgdLang"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiAddShortCut", + "userkeylabel": "aiGgdLang", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Add the chatbot to your header ?", + "tsl_value": "Language", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11014,17 +11073,17 @@ }, { "object": "TranslateField", - "userkey": "aiAddShortCut French", + "userkey": "aiGgdLang French", "item": { "tsl_object": { - "item": {"fld_name": "aiAddShortCut"}, + "item": {"fld_name": "aiGgdLang"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiAddShortCut", + "userkeylabel": "aiGgdLang", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Ajoutez le chatbot à votre en-tête ?", + "tsl_value": "Langue", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11036,17 +11095,17 @@ }, { "object": "TranslateField", - "userkey": "aiAigroupviewUsed English", + "userkey": "aiGgdDescription English", "item": { "tsl_object": { - "item": {"fld_name": "aiAigroupviewUsed"}, + "item": {"fld_name": "aiGgdDescription"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiAigroupviewUsed", + "userkeylabel": "aiGgdDescription", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "GUIDescription", + "tsl_value": "Description", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11058,17 +11117,17 @@ }, { "object": "TranslateField", - "userkey": "aiAigroupviewUsed French", + "userkey": "aiGgdDescription French", "item": { "tsl_object": { - "item": {"fld_name": "aiAigroupviewUsed"}, + "item": {"fld_name": "aiGgdDescription"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiAigroupviewUsed", + "userkeylabel": "aiGgdDescription", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "IHM a décrire", + "tsl_value": "Description", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11080,17 +11139,17 @@ }, { "object": "TranslateField", - "userkey": "aiGgdDescription English", + "userkey": "aiAigroupviewUsed English", "item": { "tsl_object": { - "item": {"fld_name": "aiGgdDescription"}, + "item": {"fld_name": "aiAigroupviewUsed"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiGgdDescription", + "userkeylabel": "aiAigroupviewUsed", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Description", + "tsl_value": "GUIDescription", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11102,17 +11161,17 @@ }, { "object": "TranslateField", - "userkey": "aiGgdDescription French", + "userkey": "aiAigroupviewUsed French", "item": { "tsl_object": { - "item": {"fld_name": "aiGgdDescription"}, + "item": {"fld_name": "aiAigroupviewUsed"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiGgdDescription", + "userkeylabel": "aiAigroupviewUsed", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Description", + "tsl_value": "IHM à décrire", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11124,17 +11183,17 @@ }, { "object": "TranslateField", - "userkey": "aiGgdLang English", + "userkey": "aiGgdViewhomeId English", "item": { "tsl_object": { - "item": {"fld_name": "aiGgdLang"}, + "item": {"fld_name": "aiGgdViewhomeId"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiGgdLang", + "userkeylabel": "aiGgdViewhomeId", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Language", + "tsl_value": "Home page", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11146,17 +11205,17 @@ }, { "object": "TranslateField", - "userkey": "aiGgdLang French", + "userkey": "aiGgdViewhomeId French", "item": { "tsl_object": { - "item": {"fld_name": "aiGgdLang"}, + "item": {"fld_name": "aiGgdViewhomeId"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiGgdLang", + "userkeylabel": "aiGgdViewhomeId", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Langue", + "tsl_value": "Ggd viewhome id", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11168,17 +11227,17 @@ }, { "object": "TranslateField", - "userkey": "aiGgdViewhomeId English", + "userkey": "aiGroupGuiDescId English", "item": { "tsl_object": { - "item": {"fld_name": "aiGgdViewhomeId"}, + "item": {"fld_name": "aiGroupGuiDescId"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiGgdViewhomeId", + "userkeylabel": "aiGroupGuiDescId", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Home page", + "tsl_value": "Group gui desc id", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11190,17 +11249,17 @@ }, { "object": "TranslateField", - "userkey": "aiGgdViewhomeId French", + "userkey": "aiGroupGuiDescId French", "item": { "tsl_object": { - "item": {"fld_name": "aiGgdViewhomeId"}, + "item": {"fld_name": "aiGroupGuiDescId"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiGgdViewhomeId", + "userkeylabel": "aiGroupGuiDescId", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Ggd viewhome id", + "tsl_value": "Group gui desc id", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11256,17 +11315,17 @@ }, { "object": "TranslateField", - "userkey": "aiGroupGuiDescId English", + "userkey": "aiGroupGuiVirtual English", "item": { "tsl_object": { - "item": {"fld_name": "aiGroupGuiDescId"}, + "item": {"fld_name": "aiGroupGuiVirtual"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiGroupGuiDescId", + "userkeylabel": "aiGroupGuiVirtual", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Group gui desc id", + "tsl_value": "Group gui virtual", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11278,17 +11337,17 @@ }, { "object": "TranslateField", - "userkey": "aiGroupGuiDescId French", + "userkey": "aiGroupGuiVirtual French", "item": { "tsl_object": { - "item": {"fld_name": "aiGroupGuiDescId"}, + "item": {"fld_name": "aiGroupGuiVirtual"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiGroupGuiDescId", + "userkeylabel": "aiGroupGuiVirtual", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Group gui desc id", + "tsl_value": "Group gui virtual", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11300,17 +11359,17 @@ }, { "object": "TranslateField", - "userkey": "aiGroupGuiVirtual English", + "userkey": "aiAddShortCut English", "item": { "tsl_object": { - "item": {"fld_name": "aiGroupGuiVirtual"}, + "item": {"fld_name": "aiAddShortCut"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiGroupGuiVirtual", + "userkeylabel": "aiAddShortCut", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Group gui virtual", + "tsl_value": "Add the chatbot to your header ?", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11322,17 +11381,17 @@ }, { "object": "TranslateField", - "userkey": "aiGroupGuiVirtual French", + "userkey": "aiAddShortCut French", "item": { "tsl_object": { - "item": {"fld_name": "aiGroupGuiVirtual"}, + "item": {"fld_name": "aiAddShortCut"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiGroupGuiVirtual", + "userkeylabel": "aiAddShortCut", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Group gui virtual", + "tsl_value": "Ajoutez le chatbot à votre en-tête ?", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11608,17 +11667,17 @@ }, { "object": "TranslateField", - "userkey": "aiPrvCompletionUrl English", + "userkey": "aiPrvDefaultUrl English", "item": { "tsl_object": { - "item": {"fld_name": "aiPrvCompletionUrl"}, + "item": {"fld_name": "aiPrvDefaultUrl"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiPrvCompletionUrl", + "userkeylabel": "aiPrvDefaultUrl", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Completion endpoint url", + "tsl_value": "Default url", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11630,17 +11689,17 @@ }, { "object": "TranslateField", - "userkey": "aiPrvCompletionUrl French", + "userkey": "aiPrvDefaultUrl French", "item": { "tsl_object": { - "item": {"fld_name": "aiPrvCompletionUrl"}, + "item": {"fld_name": "aiPrvDefaultUrl"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiPrvCompletionUrl", + "userkeylabel": "aiPrvDefaultUrl", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Completion Url", + "tsl_value": "Default Url", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11652,17 +11711,17 @@ }, { "object": "TranslateField", - "userkey": "aiPrvDataModel English", + "userkey": "aiPrvCompletionUrl English", "item": { "tsl_object": { - "item": {"fld_name": "aiPrvDataModel"}, + "item": {"fld_name": "aiPrvCompletionUrl"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiPrvDataModel", + "userkeylabel": "aiPrvCompletionUrl", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Specific parameter", + "tsl_value": "Completion endpoint url", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11674,17 +11733,17 @@ }, { "object": "TranslateField", - "userkey": "aiPrvDataModel French", + "userkey": "aiPrvCompletionUrl French", "item": { "tsl_object": { - "item": {"fld_name": "aiPrvDataModel"}, + "item": {"fld_name": "aiPrvCompletionUrl"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiPrvDataModel", + "userkeylabel": "aiPrvCompletionUrl", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Paramètre spécifique", + "tsl_value": "Completion Url", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11696,17 +11755,17 @@ }, { "object": "TranslateField", - "userkey": "aiPrvDefaultUrl English", + "userkey": "aiPrvHelp English", "item": { "tsl_object": { - "item": {"fld_name": "aiPrvDefaultUrl"}, + "item": {"fld_name": "aiPrvHelp"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiPrvDefaultUrl", + "userkeylabel": "aiPrvHelp", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Default url", + "tsl_value": "Key and endpoints help", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11718,17 +11777,17 @@ }, { "object": "TranslateField", - "userkey": "aiPrvDefaultUrl French", + "userkey": "aiPrvHelp French", "item": { "tsl_object": { - "item": {"fld_name": "aiPrvDefaultUrl"}, + "item": {"fld_name": "aiPrvHelp"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiPrvDefaultUrl", + "userkeylabel": "aiPrvHelp", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Default Url", + "tsl_value": "Aide sur les clés et les endpoints", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11740,17 +11799,17 @@ }, { "object": "TranslateField", - "userkey": "aiPrvHelp English", + "userkey": "aiPrvModelsUrl English", "item": { "tsl_object": { - "item": {"fld_name": "aiPrvHelp"}, + "item": {"fld_name": "aiPrvModelsUrl"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiPrvHelp", + "userkeylabel": "aiPrvModelsUrl", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Key and endpoints help", + "tsl_value": "Models url", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11762,17 +11821,17 @@ }, { "object": "TranslateField", - "userkey": "aiPrvHelp French", + "userkey": "aiPrvModelsUrl French", "item": { "tsl_object": { - "item": {"fld_name": "aiPrvHelp"}, + "item": {"fld_name": "aiPrvModelsUrl"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiPrvHelp", + "userkeylabel": "aiPrvModelsUrl", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Aide sur les clés et les endpoints", + "tsl_value": "Models Url", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11784,17 +11843,17 @@ }, { "object": "TranslateField", - "userkey": "aiPrvModelsUrl English", + "userkey": "aiPrvPingUrl English", "item": { "tsl_object": { - "item": {"fld_name": "aiPrvModelsUrl"}, + "item": {"fld_name": "aiPrvPingUrl"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiPrvModelsUrl", + "userkeylabel": "aiPrvPingUrl", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Models url", + "tsl_value": "Ping url", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11806,17 +11865,17 @@ }, { "object": "TranslateField", - "userkey": "aiPrvModelsUrl French", + "userkey": "aiPrvPingUrl French", "item": { "tsl_object": { - "item": {"fld_name": "aiPrvModelsUrl"}, + "item": {"fld_name": "aiPrvPingUrl"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiPrvModelsUrl", + "userkeylabel": "aiPrvPingUrl", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Models Url", + "tsl_value": "Ping url", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11828,17 +11887,17 @@ }, { "object": "TranslateField", - "userkey": "aiPrvPingUrl English", + "userkey": "aiPrvDataModel English", "item": { "tsl_object": { - "item": {"fld_name": "aiPrvPingUrl"}, + "item": {"fld_name": "aiPrvDataModel"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiPrvPingUrl", + "userkeylabel": "aiPrvDataModel", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Ping url", + "tsl_value": "Specific parameter", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11850,17 +11909,17 @@ }, { "object": "TranslateField", - "userkey": "aiPrvPingUrl French", + "userkey": "aiPrvDataModel French", "item": { "tsl_object": { - "item": {"fld_name": "aiPrvPingUrl"}, + "item": {"fld_name": "aiPrvDataModel"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiPrvPingUrl", + "userkeylabel": "aiPrvDataModel", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Ping url", + "tsl_value": "Paramètre spécifique", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -12088,33 +12147,33 @@ }, { "object": "TranslateFieldArea", - "userkey": "AiGroupGuiDesc-1 English", + "userkey": "AiSettings-1 English", "item": { "tsl_object": { - "item": {"ofa_name": "AiGroupGuiDesc-1"}, + "item": {"ofa_name": "AiSettings-1"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AiGroupGuiDesc-1", + "userkeylabel": "AiSettings-1", "object": "ObjectFieldArea" }, "tsl_lang": "ENU", - "tsl_value": "AiGroupGuiDesc-1", + "tsl_value": "Configuration -1", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AiGroupGuiDesc-1 French", + "userkey": "AiSettings-1 French", "item": { "tsl_object": { - "item": {"ofa_name": "AiGroupGuiDesc-1"}, + "item": {"ofa_name": "AiSettings-1"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AiGroupGuiDesc-1", + "userkeylabel": "AiSettings-1", "object": "ObjectFieldArea" }, "tsl_lang": "FRA", - "tsl_value": "Group gui desc -1", + "tsl_value": "AiConfiguration-1", "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -12152,65 +12211,65 @@ }, { "object": "TranslateFieldArea", - "userkey": "AiGroupView-1 English", + "userkey": "AiMetricsHist-1 English", "item": { "tsl_object": { - "item": {"ofa_name": "AiGroupView-1"}, + "item": {"ofa_name": "AiMetricsHist-1"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AiGroupView-1", + "userkeylabel": "AiMetricsHist-1", "object": "ObjectFieldArea" }, "tsl_lang": "ENU", - "tsl_value": "AiGroupView-1", + "tsl_value": "Metrics hist -1", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AiGroupView-1 French", + "userkey": "AiMetricsHist-1 French", "item": { "tsl_object": { - "item": {"ofa_name": "AiGroupView-1"}, + "item": {"ofa_name": "AiMetricsHist-1"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AiGroupView-1", + "userkeylabel": "AiMetricsHist-1", "object": "ObjectFieldArea" }, "tsl_lang": "FRA", - "tsl_value": "Group view -1", + "tsl_value": "Metrics", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AiMetricsHist-1 English", + "userkey": "AiGroupView-1 English", "item": { "tsl_object": { - "item": {"ofa_name": "AiMetricsHist-1"}, + "item": {"ofa_name": "AiGroupView-1"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AiMetricsHist-1", + "userkeylabel": "AiGroupView-1", "object": "ObjectFieldArea" }, "tsl_lang": "ENU", - "tsl_value": "Metrics hist -1", + "tsl_value": "AiGroupView-1", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AiMetricsHist-1 French", + "userkey": "AiGroupView-1 French", "item": { "tsl_object": { - "item": {"ofa_name": "AiMetricsHist-1"}, + "item": {"ofa_name": "AiGroupView-1"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AiMetricsHist-1", + "userkeylabel": "AiGroupView-1", "object": "ObjectFieldArea" }, "tsl_lang": "FRA", - "tsl_value": "Metrics", + "tsl_value": "Group view -1", "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -12248,65 +12307,65 @@ }, { "object": "TranslateFieldArea", - "userkey": "AIProvider-1 English", + "userkey": "AIProvider-2 English", "item": { "tsl_object": { - "item": {"ofa_name": "AIProvider-1"}, + "item": {"ofa_name": "AIProvider-2"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AIProvider-1", + "userkeylabel": "AIProvider-2", "object": "ObjectFieldArea" }, "tsl_lang": "ENU", - "tsl_value": "Provider -1", + "tsl_value": "Endpoints", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AIProvider-1 French", + "userkey": "AIProvider-2 French", "item": { "tsl_object": { - "item": {"ofa_name": "AIProvider-1"}, + "item": {"ofa_name": "AIProvider-2"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AIProvider-1", + "userkeylabel": "AIProvider-2", "object": "ObjectFieldArea" }, "tsl_lang": "FRA", - "tsl_value": "AIProvider-1", + "tsl_value": "Endpoint", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AIProvider-2 English", + "userkey": "AIProvider-1 English", "item": { "tsl_object": { - "item": {"ofa_name": "AIProvider-2"}, + "item": {"ofa_name": "AIProvider-1"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AIProvider-2", + "userkeylabel": "AIProvider-1", "object": "ObjectFieldArea" }, "tsl_lang": "ENU", - "tsl_value": "Endpoints", + "tsl_value": "Provider -1", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AIProvider-2 French", + "userkey": "AIProvider-1 French", "item": { "tsl_object": { - "item": {"ofa_name": "AIProvider-2"}, + "item": {"ofa_name": "AIProvider-1"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AIProvider-2", + "userkeylabel": "AIProvider-1", "object": "ObjectFieldArea" }, "tsl_lang": "FRA", - "tsl_value": "Endpoint", + "tsl_value": "AIProvider-1", "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -12344,33 +12403,33 @@ }, { "object": "TranslateFieldArea", - "userkey": "AiSettings-1 English", + "userkey": "AiGroupGuiDesc-1 English", "item": { "tsl_object": { - "item": {"ofa_name": "AiSettings-1"}, + "item": {"ofa_name": "AiGroupGuiDesc-1"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AiSettings-1", + "userkeylabel": "AiGroupGuiDesc-1", "object": "ObjectFieldArea" }, "tsl_lang": "ENU", - "tsl_value": "Configuration -1", + "tsl_value": "AiGroupGuiDesc-1", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AiSettings-1 French", + "userkey": "AiGroupGuiDesc-1 French", "item": { "tsl_object": { - "item": {"ofa_name": "AiSettings-1"}, + "item": {"ofa_name": "AiGroupGuiDesc-1"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AiSettings-1", + "userkeylabel": "AiGroupGuiDesc-1", "object": "ObjectFieldArea" }, "tsl_lang": "FRA", - "tsl_value": "AiConfiguration-1", + "tsl_value": "Group gui desc -1", "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -12678,17 +12737,17 @@ }, { "object": "TranslateExternal", - "userkey": "AIExpTool English", + "userkey": "AiMonitoring English", "item": { "tsl_object": { - "item": {"obe_name": "AIExpTool"}, + "item": {"obe_name": "AiMonitoring"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIExpTool", + "userkeylabel": "AiMonitoring", "object": "ObjectExternal" }, "tsl_lang": "ENU", - "tsl_value": "Example tools", + "tsl_value": "Monitoring", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -12696,17 +12755,17 @@ }, { "object": "TranslateExternal", - "userkey": "AIExpTool French", + "userkey": "AiMonitoring French", "item": { "tsl_object": { - "item": {"obe_name": "AIExpTool"}, + "item": {"obe_name": "AiMonitoring"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIExpTool", + "userkeylabel": "AiMonitoring", "object": "ObjectExternal" }, "tsl_lang": "FRA", - "tsl_value": "Exemples d'outils", + "tsl_value": "Monitoring", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -12714,17 +12773,17 @@ }, { "object": "TranslateExternal", - "userkey": "AIMetricsChat English", + "userkey": "AIProcessResource English", "item": { "tsl_object": { - "item": {"obe_name": "AIMetricsChat"}, + "item": {"obe_name": "AIProcessResource"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIMetricsChat", + "userkeylabel": "AIProcessResource", "object": "ObjectExternal" }, "tsl_lang": "ENU", - "tsl_value": "AI powered charts", + "tsl_value": "Process resource", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -12732,17 +12791,17 @@ }, { "object": "TranslateExternal", - "userkey": "AIMetricsChat French", + "userkey": "AIProcessResource French", "item": { "tsl_object": { - "item": {"obe_name": "AIMetricsChat"}, + "item": {"obe_name": "AIProcessResource"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIMetricsChat", + "userkeylabel": "AIProcessResource", "object": "ObjectExternal" }, "tsl_lang": "FRA", - "tsl_value": "Graphiques alimentés par l'IA", + "tsl_value": "Ressources du processus", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -12750,17 +12809,17 @@ }, { "object": "TranslateExternal", - "userkey": "AiMonitoring English", + "userkey": "AIExpTool English", "item": { "tsl_object": { - "item": {"obe_name": "AiMonitoring"}, + "item": {"obe_name": "AIExpTool"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AiMonitoring", + "userkeylabel": "AIExpTool", "object": "ObjectExternal" }, "tsl_lang": "ENU", - "tsl_value": "Monitoring", + "tsl_value": "Example tools", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -12768,17 +12827,17 @@ }, { "object": "TranslateExternal", - "userkey": "AiMonitoring French", + "userkey": "AIExpTool French", "item": { "tsl_object": { - "item": {"obe_name": "AiMonitoring"}, + "item": {"obe_name": "AIExpTool"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AiMonitoring", + "userkeylabel": "AIExpTool", "object": "ObjectExternal" }, "tsl_lang": "FRA", - "tsl_value": "Monitoring", + "tsl_value": "Exemples d'outils", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -12786,17 +12845,17 @@ }, { "object": "TranslateExternal", - "userkey": "AIProcessResource English", + "userkey": "AIMetricsChat English", "item": { "tsl_object": { - "item": {"obe_name": "AIProcessResource"}, + "item": {"obe_name": "AIMetricsChat"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIProcessResource", + "userkeylabel": "AIMetricsChat", "object": "ObjectExternal" }, "tsl_lang": "ENU", - "tsl_value": "Process resource", + "tsl_value": "AI powered charts", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -12804,17 +12863,17 @@ }, { "object": "TranslateExternal", - "userkey": "AIProcessResource French", + "userkey": "AIMetricsChat French", "item": { "tsl_object": { - "item": {"obe_name": "AIProcessResource"}, + "item": {"obe_name": "AIMetricsChat"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIProcessResource", + "userkeylabel": "AIMetricsChat", "object": "ObjectExternal" }, "tsl_lang": "FRA", - "tsl_value": "Ressources du processus", + "tsl_value": "Graphiques alimentés par l'IA", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -12858,17 +12917,17 @@ }, { "object": "TranslateExternal", - "userkey": "AIRestAPI English", + "userkey": "AIShortcut English", "item": { "tsl_object": { - "item": {"obe_name": "AIRestAPI"}, + "item": {"obe_name": "AIShortcut"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIRestAPI", + "userkeylabel": "AIShortcut", "object": "ObjectExternal" }, "tsl_lang": "ENU", - "tsl_value": "Rest API", + "tsl_value": "Shortcut", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -12876,17 +12935,17 @@ }, { "object": "TranslateExternal", - "userkey": "AIRestAPI French", + "userkey": "AIShortcut French", "item": { "tsl_object": { - "item": {"obe_name": "AIRestAPI"}, + "item": {"obe_name": "AIShortcut"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIRestAPI", + "userkeylabel": "AIShortcut", "object": "ObjectExternal" }, "tsl_lang": "FRA", - "tsl_value": "Rest API", + "tsl_value": "Raccourci", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -12894,17 +12953,17 @@ }, { "object": "TranslateExternal", - "userkey": "AIShortcut English", + "userkey": "AIRestAPI English", "item": { "tsl_object": { - "item": {"obe_name": "AIShortcut"}, + "item": {"obe_name": "AIRestAPI"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIShortcut", + "userkeylabel": "AIRestAPI", "object": "ObjectExternal" }, "tsl_lang": "ENU", - "tsl_value": "Shortcut", + "tsl_value": "Rest API", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -12912,17 +12971,17 @@ }, { "object": "TranslateExternal", - "userkey": "AIShortcut French", + "userkey": "AIRestAPI French", "item": { "tsl_object": { - "item": {"obe_name": "AIShortcut"}, + "item": {"obe_name": "AIRestAPI"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIShortcut", + "userkeylabel": "AIRestAPI", "object": "ObjectExternal" }, "tsl_lang": "FRA", - "tsl_value": "Raccourci", + "tsl_value": "Rest API", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -13340,77 +13399,77 @@ }, { "object": "TranslateActivity", - "userkey": "AIGenData GGD_0075 English", + "userkey": "AIGenData GGD_0100 English", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIGenData", - "acy_step": "GGD_0075" + "acy_step": "GGD_0100" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIGenData GGD_0075", + "userkeylabel": "AIGenData GGD_0100", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Data cannot be generated", + "tsl_value": "Select module", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIGenData GGD_0075 French", + "userkey": "AIGenData GGD_0100 French", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIGenData", - "acy_step": "GGD_0075" + "acy_step": "GGD_0100" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIGenData GGD_0075", + "userkeylabel": "AIGenData GGD_0100", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Génération de données impossible", + "tsl_value": "Séléction du module", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIGenData GGD_0100 English", + "userkey": "AIGenData GGD_0075 English", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIGenData", - "acy_step": "GGD_0100" + "acy_step": "GGD_0075" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIGenData GGD_0100", + "userkeylabel": "AIGenData GGD_0075", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Select module", + "tsl_value": "Data cannot be generated", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIGenData GGD_0100 French", + "userkey": "AIGenData GGD_0075 French", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIGenData", - "acy_step": "GGD_0100" + "acy_step": "GGD_0075" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIGenData GGD_0100", + "userkeylabel": "AIGenData GGD_0075", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Séléction du module", + "tsl_value": "Génération de données impossible", "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -13454,115 +13513,115 @@ }, { "object": "TranslateActivity", - "userkey": "AIGenData GGD_0200 English", + "userkey": "AIModuleCreate AIC-END English", "item": { "tsl_object": { "item": { - "acy_process_id__pcs_name": "AIGenData", - "acy_step": "GGD_0200" + "acy_process_id__pcs_name": "AIModuleCreate", + "acy_step": "AIC-END" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIGenData GGD_0200", + "userkeylabel": "AIModuleCreate AIC-END", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Data generation", + "tsl_value": "End", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIGenData GGD_0200 French", + "userkey": "AIModuleCreate AIC-END French", "item": { "tsl_object": { "item": { - "acy_process_id__pcs_name": "AIGenData", - "acy_step": "GGD_0200" + "acy_process_id__pcs_name": "AIModuleCreate", + "acy_step": "AIC-END" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIGenData GGD_0200", + "userkeylabel": "AIModuleCreate AIC-END", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Génération des données", + "tsl_value": "Fin", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC-BEG English", + "userkey": "AIGenData GGD_0200 English", "item": { "tsl_object": { "item": { - "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC-BEG" + "acy_process_id__pcs_name": "AIGenData", + "acy_step": "GGD_0200" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC-BEG", + "userkeylabel": "AIGenData GGD_0200", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Begin", + "tsl_value": "Data generation", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC-BEG French", + "userkey": "AIGenData GGD_0200 French", "item": { "tsl_object": { "item": { - "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC-BEG" + "acy_process_id__pcs_name": "AIGenData", + "acy_step": "GGD_0200" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC-BEG", + "userkeylabel": "AIGenData GGD_0200", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Commencer", + "tsl_value": "Génération des données", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC-END English", + "userkey": "AIModuleCreate AIC-BEG English", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC-END" + "acy_step": "AIC-BEG" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC-END", + "userkeylabel": "AIModuleCreate AIC-BEG", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "End", + "tsl_value": "Begin", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC-END French", + "userkey": "AIModuleCreate AIC-BEG French", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC-END" + "acy_step": "AIC-BEG" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC-END", + "userkeylabel": "AIModuleCreate AIC-BEG", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Fin", + "tsl_value": "Commencer", "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -13682,115 +13741,115 @@ }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0017 English", + "userkey": "AIModuleCreate AIC_0020 English", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0017" + "acy_step": "AIC_0020" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0017", + "userkeylabel": "AIModuleCreate AIC_0020", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Create scope", + "tsl_value": "Grant your user to the generated group?", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0017 French", + "userkey": "AIModuleCreate AIC_0020 French", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0017" + "acy_step": "AIC_0020" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0017", + "userkeylabel": "AIModuleCreate AIC_0020", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Créer un scope", + "tsl_value": "Habiliter votre utilisateur au groupe généré?", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0020 English", + "userkey": "AIModuleCreate AIC_0050 English", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0020" + "acy_step": "AIC_0050" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0020", + "userkeylabel": "AIModuleCreate AIC_0050", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Grant your user to the generated group?", + "tsl_value": "Is param", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0020 French", + "userkey": "AIModuleCreate AIC_0050 French", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0020" + "acy_step": "AIC_0050" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0020", + "userkeylabel": "AIModuleCreate AIC_0050", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Habiliter votre utilisateur au groupe généré?", + "tsl_value": "Is param", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0050 English", + "userkey": "AIModuleCreate AIC_0017 English", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0050" + "acy_step": "AIC_0017" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0050", + "userkeylabel": "AIModuleCreate AIC_0017", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Is param", + "tsl_value": "Create scope", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0050 French", + "userkey": "AIModuleCreate AIC_0017 French", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0050" + "acy_step": "AIC_0017" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0050", + "userkeylabel": "AIModuleCreate AIC_0017", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Is param", + "tsl_value": "Créer un scope", "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -14138,229 +14197,229 @@ }, { "object": "TranslateActivity", - "userkey": "AiSettingsProcess ASP-0050 English", + "userkey": "AiSettingsProcess ASP-0100 English", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AiSettingsProcess", - "acy_step": "ASP-0050" + "acy_step": "ASP-0100" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AiSettingsProcess ASP-0050", + "userkeylabel": "AiSettingsProcess ASP-0100", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Is global param", + "tsl_value": "Select provider", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AiSettingsProcess ASP-0050 French", + "userkey": "AiSettingsProcess ASP-0100 French", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AiSettingsProcess", - "acy_step": "ASP-0050" + "acy_step": "ASP-0100" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AiSettingsProcess ASP-0050", + "userkeylabel": "AiSettingsProcess ASP-0100", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Is global param", + "tsl_value": "Editeur", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AiSettingsProcess ASP-0075 English", + "userkey": "AiSettingsProcess ASP-0050 English", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AiSettingsProcess", - "acy_step": "ASP-0075" + "acy_step": "ASP-0050" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AiSettingsProcess ASP-0075", + "userkeylabel": "AiSettingsProcess ASP-0050", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Warning", + "tsl_value": "Is global param", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AiSettingsProcess ASP-0075 French", + "userkey": "AiSettingsProcess ASP-0050 French", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AiSettingsProcess", - "acy_step": "ASP-0075" + "acy_step": "ASP-0050" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AiSettingsProcess ASP-0075", + "userkeylabel": "AiSettingsProcess ASP-0050", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Avertissement", + "tsl_value": "Is global param", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AiSettingsProcess ASP-0100 English", + "userkey": "AiSettingsProcess ASP-0075 English", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AiSettingsProcess", - "acy_step": "ASP-0100" + "acy_step": "ASP-0075" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AiSettingsProcess ASP-0100", + "userkeylabel": "AiSettingsProcess ASP-0075", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Select provider", + "tsl_value": "Warning", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AiSettingsProcess ASP-0100 French", + "userkey": "AiSettingsProcess ASP-0075 French", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AiSettingsProcess", - "acy_step": "ASP-0100" + "acy_step": "ASP-0075" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AiSettingsProcess ASP-0100", + "userkeylabel": "AiSettingsProcess ASP-0075", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Editeur", + "tsl_value": "Avertissement", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AiSettingsProcess ASP-0200 English", + "userkey": "AiSettingsProcess ASP-0400 English", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AiSettingsProcess", - "acy_step": "ASP-0200" + "acy_step": "ASP-0400" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AiSettingsProcess ASP-0200", + "userkeylabel": "AiSettingsProcess ASP-0400", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Authentication", + "tsl_value": "Other parameters", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AiSettingsProcess ASP-0200 French", + "userkey": "AiSettingsProcess ASP-0400 French", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AiSettingsProcess", - "acy_step": "ASP-0200" + "acy_step": "ASP-0400" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AiSettingsProcess ASP-0200", + "userkeylabel": "AiSettingsProcess ASP-0400", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Authentification", + "tsl_value": "Autres paramètres", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AiSettingsProcess ASP-0400 English", + "userkey": "AiSettingsProcess ASP-0500 English", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AiSettingsProcess", - "acy_step": "ASP-0400" + "acy_step": "ASP-0500" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AiSettingsProcess ASP-0400", + "userkeylabel": "AiSettingsProcess ASP-0500", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Other parameters", + "tsl_value": "Add the chatbot to your header ?", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AiSettingsProcess ASP-0400 French", + "userkey": "AiSettingsProcess ASP-0500 French", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AiSettingsProcess", - "acy_step": "ASP-0400" + "acy_step": "ASP-0500" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AiSettingsProcess ASP-0400", + "userkeylabel": "AiSettingsProcess ASP-0500", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Autres paramètres", + "tsl_value": "Ajoutez le chatbot à votre en-tête ?", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AiSettingsProcess ASP-0500 English", + "userkey": "AiSettingsProcess ASP-0200 English", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AiSettingsProcess", - "acy_step": "ASP-0500" + "acy_step": "ASP-0200" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AiSettingsProcess ASP-0500", + "userkeylabel": "AiSettingsProcess ASP-0200", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Add the chatbot to your header ?", + "tsl_value": "Authentication", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AiSettingsProcess ASP-0500 French", + "userkey": "AiSettingsProcess ASP-0200 French", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AiSettingsProcess", - "acy_step": "ASP-0500" + "acy_step": "ASP-0200" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AiSettingsProcess ASP-0500", + "userkeylabel": "AiSettingsProcess ASP-0200", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Ajoutez le chatbot à votre en-tête ?", + "tsl_value": "Authentification", "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -14790,14 +14849,14 @@ }, { "object": "Permission", - "userkey": "AI_DESIGNER AIRestAPI", + "userkey": "AI_DESIGNER AIShortcut", "item": { "prm_group_id__grp_name": "AI_DESIGNER", "prm_object": { - "item": {"obe_name": "AIRestAPI"}, + "item": {"obe_name": "AIShortcut"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIRestAPI", + "userkeylabel": "AIShortcut", "object": "ObjectExternal" }, "prm_perm": true, @@ -14810,14 +14869,14 @@ }, { "object": "Permission", - "userkey": "AI_DESIGNER AIShortcut", + "userkey": "AI_DESIGNER AIRestAPI", "item": { "prm_group_id__grp_name": "AI_DESIGNER", "prm_object": { - "item": {"obe_name": "AIShortcut"}, + "item": {"obe_name": "AIRestAPI"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIShortcut", + "userkeylabel": "AIRestAPI", "object": "ObjectExternal" }, "prm_perm": true, @@ -14887,23 +14946,6 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, - { - "object": "PermGroup", - "userkey": "AI_DESIGNER AI_ADMIN AiMonitoring", - "item": { - "pmg_group_id__grp_name": "AI_DESIGNER", - "pmg_perm_id__prm_group_id__grp_name": "AI_ADMIN", - "pmg_perm_id__prm_object": { - "item": {"obe_name": "AiMonitoring"}, - "icon": "img/system/external_object", - "label": "External object", - "userkeylabel": "AiMonitoring", - "object": "ObjectExternal" - }, - "pmg_perm_id__prm_prop": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, { "object": "PermGroup", "userkey": "AI_DESIGNER AI_BUSINESS AIChatBot", @@ -14954,6 +14996,23 @@ "pmg_perm_id__prm_prop": null, "row_module_id__mdl_name": "AIBySimplicite" } + }, + { + "object": "PermGroup", + "userkey": "AI_DESIGNER AI_ADMIN AiMonitoring", + "item": { + "pmg_group_id__grp_name": "AI_DESIGNER", + "pmg_perm_id__prm_group_id__grp_name": "AI_ADMIN", + "pmg_perm_id__prm_object": { + "item": {"obe_name": "AiMonitoring"}, + "icon": "img/system/external_object", + "label": "External object", + "userkeylabel": "AiMonitoring", + "object": "ObjectExternal" + }, + "pmg_perm_id__prm_prop": null, + "row_module_id__mdl_name": "AIBySimplicite" + } } ] } diff --git a/files/Model/Model-AIModuleCreate.png b/files/Model/Model-AIModuleCreate.png index e98ad01445f3449cb344dfa7819efa10ebe67b1c..384894e22959f53a8ee8b975ff0de40c908b0187 100644 GIT binary patch literal 92901 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 Jey(>V{$Kf}oml_? literal 90700 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 diff --git a/files/Model/Model-AIModuleCreate.svg b/files/Model/Model-AIModuleCreate.svg index cc89f47..3e2bcce 100644 --- a/files/Model/Model-AIModuleCreate.svg +++ b/files/Model/Model-AIModuleCreate.svg @@ -1 +1 @@ -(0)(1)GenerateDelete Module(1)(0)BeginEndSelectModuleSelectGroupSelectDomaininteractionPromptAIGenerationRemoveModuleCreateModuleChoiceGrantUserTranslateDomainNewScopeGoToSettingsisParamNoParam \ No newline at end of file +(1)Delete Module(0)Generate(1)(0)BeginEndSelectModuleSelectGroupSelectDomaininteractionPromptAIGenerationRemoveModuleCreateModuleChoiceGrantUserTranslateDomainNewScopeGoToSettingsisParamNoParam \ No newline at end of file diff --git a/module-info.json b/module-info.json index 5231876..142f59f 100644 --- a/module-info.json +++ b/module-info.json @@ -1,9 +1,9 @@ { - "date": "2025-02-06 19:06:40", + "date": "2025-02-24 09:20:32", "name": "AIBySimplicite", "format": "json", "files": ["AIBySimplicite.json"], "repository": {"origin": {"uri": "https://github.com/simplicitesoftware/module_ai.git"}}, "version": "0.30", - "platform": "6.1.21" + "platform": "6.2.2" } \ No newline at end of file diff --git a/pom.xml b/pom.xml index bc67017..dae571e 100644 --- a/pom.xml +++ b/pom.xml @@ -13,10 +13,10 @@ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ Simplicite module: AIBySimplicite UTF-8 - https://airec61.demo.simplicite.io - 6.1-SNAPSHOT - 11 - 11 + https://dgddidev.dev2.simplicite.io + 6.2-SNAPSHOT + 17 + 17 simplicite-modules-AIBySimplicite AIBySimplicite 0.30 From 84508e0d8dae4b8eb01884e779db7755ef121a52 Mon Sep 17 00:00:00 2001 From: "cbi (Candice Bimont)" Date: Mon, 24 Feb 2025 09:52:16 +0100 Subject: [PATCH 71/74] fix ai metrics --- AIBySimplicite.json | 4 ++-- module-info.json | 2 +- resources/ObjectExternal/AIMetricsChat/SCRIPT.js | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/AIBySimplicite.json b/AIBySimplicite.json index 18a1542..d2a177e 100644 --- a/AIBySimplicite.json +++ b/AIBySimplicite.json @@ -7,7 +7,7 @@ "mdl_version": "0.30", "mdl_type": "T", "mdl_icon": null, - "mdl_url": "{\n \"origin\": {\"uri\": \"https://github.com/simplicitesoftware/module_ai.git\"},\n \"type\": \"git\",\n \"branch\": \"rec\"\n}", + "mdl_url": "{\n \"origin\": {\"uri\": \"https://github.com/simplicitesoftware/module_ai.git\"},\n \"type\": \"git\",\n \"branch\": \"6.2\"\n}", "mdl_comment": "### Introduction\nExploratory module on the use of AI in Simplicite\n\n---\n\n### Import\nTo import this module, you have two options:\n\n#### Option 1: Git Repository\n\n1. Create a module named `AIBySimplicite`.\n2. Set the settings as:\n```json\n{\n\t\"origin\": {\n\t\t\"uri\": \"https://github.com/simplicitesoftware/module_ai.git\"\n\t},\n\t\"type\": \"git\",\n\t\"branch\": \"6.1\"\n}\n```\n3. Click on the Import module button.\n\n#### Option 2: App Store\n\n1. Navigate to the App Store in the Project domain.\n2. Go to the Tools tab.\n3. Select \"AI integrations\" from the list.\n4. Follow the on-screen instructions to import the module.\n\n---\n\n### Configure\nTo configure the AI connection, utilize the `configuring the wizard` process in the `AI assistant` domain in extended mode.\n\nSelect the model (LLM) you wish to use, configure the API key, and the URL of your API.\n\n**Follow the process:**\n\nAfter configuring, you will obtain the details of your now active configuration. This summary is available on the homepage of the domain.\n\n

\n Parameters details<\/summary>\n\n##### hist_depth\nDefines the number of messages in the history used for the context. The greater this number, the more tokens the request uses, but the more relevant is the response.\n\n##### max_token\n*optional* \nLimits the number of tokens in the AI response.\n\n###### default_max_token\nMaximum number of tokens in a usual context.\n\n###### code_max_token\nMaximum number of tokens for technical calls.\n\n<\/details>\n\n---\n\n### wizzard\n#### Module generation\nUse AI to co-create or update a module based on your business needs\n`Module generation` in `AI assistant` domain.\n\n#### Data generation\nUse AI to generate test data for a module.\n`Data generation` in `AI assistant` domain.\n\n#### Business chatbot\nA shortcut to a chatbot contextualized according to the form on which it is opened.\nThe user must have `AI_BUSINESS` rights.\nThe `Personal data`, `Confidential data` and `Intimate` fields are not sent to the AI.\n\n\n#### Metrics\nGenerating AI graphs on a module's data\nIn a `view` add an `external page` of source `External object`: `AIMetricsChat?module=`\n\nFor detailed examples on how to generate modules, interact with business chatbots, and visualize metrics, please refer to the example available at the following link:\n[Explore AI Assistant Prompt Examples](https://github.com/simplicitesoftware/module_ai/blob/51425242c08e8f224ecc8d15ebcd80ca8b205d4c/EXAMPLE.md)" }, "links": [ @@ -14759,7 +14759,7 @@ "userkeylabel": "AIMetricsChat", "object": "ObjectExternal" }, - "prm_perm": false, + "prm_perm": true, "prm_upd": false, "prm_req": false, "prm_prop": null, diff --git a/module-info.json b/module-info.json index 142f59f..db6ab2c 100644 --- a/module-info.json +++ b/module-info.json @@ -1,5 +1,5 @@ { - "date": "2025-02-24 09:20:32", + "date": "2025-02-24 09:49:05", "name": "AIBySimplicite", "format": "json", "files": ["AIBySimplicite.json"], diff --git a/resources/ObjectExternal/AIMetricsChat/SCRIPT.js b/resources/ObjectExternal/AIMetricsChat/SCRIPT.js index c09776e..d59101f 100644 --- a/resources/ObjectExternal/AIMetricsChat/SCRIPT.js +++ b/resources/ObjectExternal/AIMetricsChat/SCRIPT.js @@ -123,11 +123,11 @@ var AIMetricsChat = AIMetricsChat || (function() { }; }); - $("#metrics_send_button").click(function() { AIMetricsChat.showWarn()}); + $("#metrics_send_button").click(function() { AIMetricsChat.showWarn();}); $('#metrics_user_text').click(function() { showWarn();}); } function showWarn(){ - console.log("showwarn") + console.log("showwarn"); app.getTexts(function(textes){ $ui.alert(app.getText(textes?.AI_GRAPH_DISCLAIMER, false)); $('#metrics_user_text').unbind('click'); From 2ab7efe646cfde6d5bd6d8bafd6c3f67c34c6a5f Mon Sep 17 00:00:00 2001 From: "cbi (Candice Bimont)" Date: Mon, 24 Feb 2025 10:20:01 +0100 Subject: [PATCH 72/74] add ai designer right to designers --- AIBySimplicite.json | 26 ++++++++++++++++++++++---- module-info.json | 2 +- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/AIBySimplicite.json b/AIBySimplicite.json index d2a177e..215a356 100644 --- a/AIBySimplicite.json +++ b/AIBySimplicite.json @@ -356,6 +356,24 @@ } ] }, + { + "object": "Responsability", + "label": "Responsibilities", + "icon": "img/system/responsability", + "field": "row_module_id", + "list": [{ + "object": "Responsability", + "userkey": "designer AI_DESIGNER 02/18/2025", + "item": { + "rsp_login_id__usr_login": "designer", + "rsp_group_id__grp_name": "AI_DESIGNER", + "rsp_start_dt": "2025-02-18", + "rsp_end_dt": null, + "rsp_activ": true, + "row_module_id__mdl_name": "AIBySimplicite" + } + }] + }, { "object": "ShortCut", "label": "Shortcuts", @@ -3930,7 +3948,7 @@ "obf_input": null, "obf_ref_field_id__fld_name": null, "obf_ref_object_id__obo_name": "User", - "obf_cascad": "R", + "obf_cascad": "C", "obf_card": "0,n", "obf_visible": true, "obf_ref_export": false, @@ -4038,7 +4056,7 @@ "obf_input": null, "obf_ref_field_id__fld_name": null, "obf_ref_object_id__obo_name": "Module", - "obf_cascad": "R", + "obf_cascad": "C", "obf_card": "0,n", "obf_visible": true, "obf_ref_export": false, @@ -4640,7 +4658,7 @@ "obf_ref_order": null, "obf_object_id__obj_name": "AiMetricsHist", "obf_field_id__fld_name": "aiMhModuleId", - "obf_cascad": "R", + "obf_cascad": "C", "obf_card": "0,n", "obf_query": null, "obf_filters": null, @@ -4664,7 +4682,7 @@ "obf_ref_order": null, "obf_object_id__obj_name": "AiMetricsHist", "obf_field_id__fld_name": "aiMhSimpleuserId", - "obf_cascad": "R", + "obf_cascad": "C", "obf_card": "0,n", "obf_query": null, "obf_filters": null, diff --git a/module-info.json b/module-info.json index db6ab2c..abf8513 100644 --- a/module-info.json +++ b/module-info.json @@ -1,5 +1,5 @@ { - "date": "2025-02-24 09:49:05", + "date": "2025-02-24 10:17:59", "name": "AIBySimplicite", "format": "json", "files": ["AIBySimplicite.json"], From b800e86254f43373f82bc537f1dc8cc04539b823 Mon Sep 17 00:00:00 2001 From: "cbi (Candice Bimont)" Date: Tue, 29 Apr 2025 10:44:56 +0200 Subject: [PATCH 73/74] Change SysParam default module --- AIBySimplicite-openapi-3.0.2.yml | 577 +++---- AIBySimplicite-swagger-2.0.yml | 516 +++--- AIBySimplicite.json | 1452 ++++++++--------- BUILD.md | 9 +- module-info.json | 4 +- pom.xml | 4 +- .../commons/AIBySimplicite/AITools.java | 2 +- 7 files changed, 1207 insertions(+), 1357 deletions(-) diff --git a/AIBySimplicite-openapi-3.0.2.yml b/AIBySimplicite-openapi-3.0.2.yml index e8ac1a6..5799f79 100644 --- a/AIBySimplicite-openapi-3.0.2.yml +++ b/AIBySimplicite-openapi-3.0.2.yml @@ -6,6 +6,7 @@ components: schemas: Error404: + description: Not found type: object properties: error: @@ -17,27 +18,34 @@ components: enum: - 404 AiGroupGuiDesc: + description: Group gui description type: object properties: aiGgdDescription: description: Description type: string + maxLength: 50000 aiGgdLang: description: Language type: string + maxLength: 100 enum: - ENU - FRA aiGgdViewhomeId__viw_name: description: Scope type: string + maxLength: 100 aiGgdViewhomeId: description: Home page type: string + maxLength: 11 row_id: description: Unique technical row ID type: string + maxLength: 11 AiGroupView: + description: Described group type: object properties: aiAigroupviewUsed: @@ -46,28 +54,36 @@ components: aiGroupGuiDescId__aiGgdViewhomeId__viw_name: description: Group gui desc id Home page Name type: string + maxLength: 100 aiGroupGuiDescId__aiGgdLang: description: Group gui desc id Language type: string + maxLength: 100 enum: - ENU - FRA row_id: description: Unique technical row ID type: string + maxLength: 11 aiGroupGuiDescId__aiGgdViewhomeId: description: Group gui desc id Home page type: string + maxLength: 11 aiGroupId: description: aiGroupId type: string + maxLength: 11 aiGroupGuiDescId: description: Group gui desc id type: string + maxLength: 11 aiGroupId__grp_name: description: Group name type: string + maxLength: 100 PublicationResult: + description: Publication result type: object properties: mime: @@ -77,6 +93,7 @@ components: description: Content (plain text or base64 encoded) type: string PlaceData: + description: Place data type: object properties: coord: @@ -98,6 +115,7 @@ components: description: 'Label #3' type: string PlaceMapData: + description: Places map data type: object properties: places: @@ -109,12 +127,14 @@ components: description: Name type: string ActionResult: + description: Action result type: object properties: result: description: Action result type: string ArrayOfAIProvider: + description: List of Providers type: array items: $ref: '#/components/schemas/AIProvider' @@ -125,10 +145,12 @@ components: description: Object item with lists of linked objects' items type: object ArrayOfAiGroupGuiDesc: + description: List of Group gui description type: array items: $ref: '#/components/schemas/AiGroupGuiDesc' Error400: + description: Bad request type: object properties: error: @@ -140,6 +162,7 @@ components: enum: - 400 Error401: + description: Unauthorized type: object properties: error: @@ -151,6 +174,7 @@ components: enum: - 401 Error500: + description: Internal server error type: object properties: error: @@ -162,43 +186,56 @@ components: enum: - 500 ArrayOfAiGroupView: + description: List of Described group type: array items: $ref: '#/components/schemas/AiGroupView' AIProvider: + description: Provider type: object properties: aiPrvDefaultUrl: description: Default url type: string + maxLength: 100 aiPrvSttUrl: description: Speech to text url type: string + maxLength: 100 aiPrvPingUrl: description: Ping url type: string + maxLength: 100 aiPrvProvider: description: Provider type: string + maxLength: 100 aiPrvDataModel: description: Specific parameter type: string + maxLength: 1000 aiPrvCompletionUrl: description: Completion endpoint url type: string + maxLength: 100 aiPrvHelp: description: Key and endpoints help type: string + maxLength: 5000 aiPrvUserParameters: description: Prv user parameters type: string + maxLength: 5000 row_id: description: Unique technical row ID type: string + maxLength: 11 aiPrvModelsUrl: description: Models url type: string + maxLength: 100 Error403: + description: Forbidden type: object properties: error: @@ -210,37 +247,48 @@ components: enum: - 403 AiMetricsHist: + description: History of generated graphs type: object properties: aiMhPrompt: description: Title type: string + maxLength: 1000 aiMhCreateOn: description: Mh create on type: string + maxLength: 19 example: yyyy-MM-dd HH:mm:ss aiMhSimpleuserId: description: Mh simpleuser id type: string + maxLength: 11 aiMhSimpleuserId__usr_login: description: Login type: string + maxLength: 100 aiMhModuleId__mdl_name: description: Module name type: string + maxLength: 100 aiMhMetrics: description: Mh metrics type: string + maxLength: 10000 row_id: description: Unique technical row ID type: string + maxLength: 11 aiMhModuleId: description: Mh module id type: string + maxLength: 11 aiMhPreview: description: Preview type: string + maxLength: 10000 ArrayOfAiMetricsHist: + description: List of History of generated graphs type: array items: $ref: '#/components/schemas/AiMetricsHist' @@ -689,71 +737,24 @@ paths: required: true tags: - AiMetricsHist - /rest/AIProvider/{row_id}/action:AIProvidersImport: - get: - summary: Call a custom action for a AIProvider business object record or for - all records - security: - - bearerAuth: [] - operationId: obj-aiprovider-action-aiprovidersimport - responses: - '200': - description: Success in calling the custom action - content: - application/json: - schema: - $ref: '#/components/schemas/ActionResult' - '400': - description: Bad request - content: - application/json: - schema: - $ref: '#/components/schemas/Error400' - '401': - description: Unauthorized - content: - application/json: - schema: - $ref: '#/components/schemas/Error401' - '500': - description: Internal server error - content: - application/json: - schema: - $ref: '#/components/schemas/Error500' - '404': - description: Not found - content: - application/json: - schema: - $ref: '#/components/schemas/Error404' - parameters: - - schema: - type: string - in: path - name: row_id - description: Row ID (or empty or _ for all row IDs) - required: true - tags: - - AIProvider - /rest/AiGroupView/{row_id}: + /rest/AIProvider/{row_id}: post: - summary: Create a new AiGroupView business object record + summary: Create a new AIProvider business object record security: - bearerAuth: [] requestBody: content: application/json: schema: - $ref: '#/components/schemas/AiGroupView' - operationId: obj-aigroupview-create + $ref: '#/components/schemas/AIProvider' + operationId: obj-aiprovider-create responses: '200': description: Success in creating a new business object record content: application/json: schema: - $ref: '#/components/schemas/AiGroupView' + $ref: '#/components/schemas/AIProvider' '400': description: Bad request content: @@ -780,19 +781,19 @@ paths: description: Row ID (or empty or _ for all row IDs) required: true tags: - - AiGroupView + - AIProvider get: - summary: Get a AiGroupView business object record + summary: Get a AIProvider business object record security: - bearerAuth: [] - operationId: obj-aigroupview-get + operationId: obj-aiprovider-get responses: '200': description: Success in getting a single business object record content: application/json: schema: - $ref: '#/components/schemas/AiGroupView' + $ref: '#/components/schemas/AIProvider' '401': description: Unauthorized content: @@ -837,12 +838,12 @@ paths: description: Inline objects? required: false tags: - - AiGroupView + - AIProvider delete: - summary: Delete a AiGroupView business object record + summary: Delete a AIProvider business object record security: - bearerAuth: [] - operationId: obj-aigroupview-delete + operationId: obj-aiprovider-delete responses: '200': description: Success in deleting a business object record @@ -880,24 +881,24 @@ paths: description: Row ID (or empty or _ for all row IDs) required: true tags: - - AiGroupView + - AIProvider put: - summary: Update a AiGroupView business object record + summary: Update a AIProvider business object record security: - bearerAuth: [] requestBody: content: application/json: schema: - $ref: '#/components/schemas/AiGroupView' - operationId: obj-aigroupview-update + $ref: '#/components/schemas/AIProvider' + operationId: obj-aiprovider-update responses: '200': description: Success in updating a business object record content: application/json: schema: - $ref: '#/components/schemas/AiGroupView' + $ref: '#/components/schemas/AIProvider' '400': description: Bad request content: @@ -930,25 +931,126 @@ paths: description: Row ID (or empty or _ for all row IDs) required: true tags: - - AiGroupView - /rest/AiGroupGuiDesc/{row_id}: + - AIProvider + /rest/AIProvider: + get: + summary: Search AIProvider business object records or get contextualized metadata + security: + - bearerAuth: [] + operationId: obj-aiprovider-search + responses: + '200': + description: Success in searching business object records (or in getting + contextualized business object metadata, documentation, ...) + content: + application/json: + schema: + $ref: '#/components/schemas/ArrayOfAIProvider' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error401' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error500' + parameters: + - schema: + type: boolean + in: query + name: _metadata + description: Metadata? + required: false + - schema: + type: boolean + in: query + name: _count + description: Count? + required: false + - schema: + type: boolean + in: query + name: _doc + description: Documentation? + required: false + - schema: + type: string + in: query + name: aiPrvProvider + description: Search filter for Provider + required: false + - schema: + type: string + in: query + name: aiPrvDefaultUrl + description: Search filter for Default url + required: false + - schema: + type: string + in: query + name: aiPrvDataModel + description: Search filter for Specific parameter + required: false + - schema: + type: string + in: query + name: aiPrvModelsUrl + description: Search filter for Models url + required: false + - schema: + type: string + in: query + name: aiPrvHelp + description: Search filter for Key and endpoints help + required: false + - schema: + type: string + in: query + name: aiPrvCompletionUrl + description: Search filter for Completion endpoint url + required: false + - schema: + type: string + in: query + name: aiPrvPingUrl + description: Search filter for Ping url + required: false + - schema: + type: string + in: query + name: aiPrvSttUrl + description: Search filter for Speech to text url + required: false + - schema: + type: string + in: query + name: aiPrvUserParameters + description: Search filter for Prv user parameters + required: false + tags: + - AIProvider + /rest/AiGroupView/{row_id}: post: - summary: Create a new AiGroupGuiDesc business object record + summary: Create a new AiGroupView business object record security: - bearerAuth: [] requestBody: content: application/json: schema: - $ref: '#/components/schemas/AiGroupGuiDesc' - operationId: obj-aigroupguidesc-create + $ref: '#/components/schemas/AiGroupView' + operationId: obj-aigroupview-create responses: '200': description: Success in creating a new business object record content: application/json: schema: - $ref: '#/components/schemas/AiGroupGuiDesc' + $ref: '#/components/schemas/AiGroupView' '400': description: Bad request content: @@ -975,19 +1077,19 @@ paths: description: Row ID (or empty or _ for all row IDs) required: true tags: - - AiGroupGuiDesc + - AiGroupView get: - summary: Get a AiGroupGuiDesc business object record + summary: Get a AiGroupView business object record security: - bearerAuth: [] - operationId: obj-aigroupguidesc-get + operationId: obj-aigroupview-get responses: '200': description: Success in getting a single business object record content: application/json: schema: - $ref: '#/components/schemas/AiGroupGuiDesc' + $ref: '#/components/schemas/AiGroupView' '401': description: Unauthorized content: @@ -1032,12 +1134,12 @@ paths: description: Inline objects? required: false tags: - - AiGroupGuiDesc + - AiGroupView delete: - summary: Delete a AiGroupGuiDesc business object record + summary: Delete a AiGroupView business object record security: - bearerAuth: [] - operationId: obj-aigroupguidesc-delete + operationId: obj-aigroupview-delete responses: '200': description: Success in deleting a business object record @@ -1075,172 +1177,24 @@ paths: description: Row ID (or empty or _ for all row IDs) required: true tags: - - AiGroupGuiDesc + - AiGroupView put: - summary: Update a AiGroupGuiDesc business object record + summary: Update a AiGroupView business object record security: - bearerAuth: [] requestBody: content: application/json: schema: - $ref: '#/components/schemas/AiGroupGuiDesc' - operationId: obj-aigroupguidesc-update + $ref: '#/components/schemas/AiGroupView' + operationId: obj-aigroupview-update responses: '200': description: Success in updating a business object record content: application/json: schema: - $ref: '#/components/schemas/AiGroupGuiDesc' - '400': - description: Bad request - content: - application/json: - schema: - $ref: '#/components/schemas/Error400' - '401': - description: Unauthorized - content: - application/json: - schema: - $ref: '#/components/schemas/Error401' - '500': - description: Internal server error - content: - application/json: - schema: - $ref: '#/components/schemas/Error500' - '404': - description: Not found - content: - application/json: - schema: - $ref: '#/components/schemas/Error404' - parameters: - - schema: - type: string - in: path - name: row_id - description: Row ID (or empty or _ for all row IDs) - required: true - tags: - - AiGroupGuiDesc - /rest/AiGroupGuiDesc: - get: - summary: Search AiGroupGuiDesc business object records or get contextualized - metadata - security: - - bearerAuth: [] - operationId: obj-aigroupguidesc-search - responses: - '200': - description: Success in searching business object records (or in getting - contextualized business object metadata, documentation, ...) - content: - application/json: - schema: - $ref: '#/components/schemas/ArrayOfAiGroupGuiDesc' - '401': - description: Unauthorized - content: - application/json: - schema: - $ref: '#/components/schemas/Error401' - '500': - description: Internal server error - content: - application/json: - schema: - $ref: '#/components/schemas/Error500' - parameters: - - schema: - type: boolean - in: query - name: _metadata - description: Metadata? - required: false - - schema: - type: boolean - in: query - name: _count - description: Count? - required: false - - schema: - type: boolean - in: query - name: _doc - description: Documentation? - required: false - - schema: - type: string - in: query - name: aiGgdDescription - description: Search filter for Description - required: false - - schema: - type: string - in: query - name: aiGgdViewhomeId - description: Search filter for Home page - required: false - - schema: - type: string - in: query - name: aiGgdViewhomeId__viw_name - description: Search filter for Scope - required: false - - schema: - type: string - enum: - - ENU - - FRA - in: query - name: aiGgdLang - description: Search filter for Language - required: false - tags: - - AiGroupGuiDesc - /: - get: - summary: Get user session information - security: - - bearerAuth: [] - operationId: info - responses: - '200': - description: Success in getting user session information - content: - application/json: {} - '401': - description: Unauthorized - content: - application/json: - schema: - $ref: '#/components/schemas/Error401' - parameters: - - schema: - type: boolean - in: query - name: texts - description: Texts? - required: false - tags: - - session - /rest/AiGroupGuiDesc/{row_id}/action:AI_UPDATE_DESC_GLOBAL: - get: - summary: Call a custom action for a AiGroupGuiDesc business object record or - for all records - security: - - bearerAuth: [] - operationId: obj-aigroupguidesc-action-ai_update_desc_global - responses: - '200': - description: Success in calling the custom action - content: - application/json: - schema: - $ref: '#/components/schemas/ActionResult' + $ref: '#/components/schemas/AiGroupView' '400': description: Bad request content: @@ -1273,25 +1227,25 @@ paths: description: Row ID (or empty or _ for all row IDs) required: true tags: - - AiGroupGuiDesc - /rest/AIProvider/{row_id}: + - AiGroupView + /rest/AiGroupGuiDesc/{row_id}: post: - summary: Create a new AIProvider business object record + summary: Create a new AiGroupGuiDesc business object record security: - bearerAuth: [] requestBody: content: application/json: schema: - $ref: '#/components/schemas/AIProvider' - operationId: obj-aiprovider-create + $ref: '#/components/schemas/AiGroupGuiDesc' + operationId: obj-aigroupguidesc-create responses: '200': description: Success in creating a new business object record content: application/json: schema: - $ref: '#/components/schemas/AIProvider' + $ref: '#/components/schemas/AiGroupGuiDesc' '400': description: Bad request content: @@ -1318,19 +1272,19 @@ paths: description: Row ID (or empty or _ for all row IDs) required: true tags: - - AIProvider + - AiGroupGuiDesc get: - summary: Get a AIProvider business object record + summary: Get a AiGroupGuiDesc business object record security: - bearerAuth: [] - operationId: obj-aiprovider-get + operationId: obj-aigroupguidesc-get responses: '200': description: Success in getting a single business object record content: application/json: schema: - $ref: '#/components/schemas/AIProvider' + $ref: '#/components/schemas/AiGroupGuiDesc' '401': description: Unauthorized content: @@ -1375,12 +1329,12 @@ paths: description: Inline objects? required: false tags: - - AIProvider + - AiGroupGuiDesc delete: - summary: Delete a AIProvider business object record + summary: Delete a AiGroupGuiDesc business object record security: - bearerAuth: [] - operationId: obj-aiprovider-delete + operationId: obj-aigroupguidesc-delete responses: '200': description: Success in deleting a business object record @@ -1418,71 +1372,24 @@ paths: description: Row ID (or empty or _ for all row IDs) required: true tags: - - AIProvider + - AiGroupGuiDesc put: - summary: Update a AIProvider business object record + summary: Update a AiGroupGuiDesc business object record security: - bearerAuth: [] requestBody: content: application/json: schema: - $ref: '#/components/schemas/AIProvider' - operationId: obj-aiprovider-update + $ref: '#/components/schemas/AiGroupGuiDesc' + operationId: obj-aigroupguidesc-update responses: '200': description: Success in updating a business object record content: application/json: schema: - $ref: '#/components/schemas/AIProvider' - '400': - description: Bad request - content: - application/json: - schema: - $ref: '#/components/schemas/Error400' - '401': - description: Unauthorized - content: - application/json: - schema: - $ref: '#/components/schemas/Error401' - '500': - description: Internal server error - content: - application/json: - schema: - $ref: '#/components/schemas/Error500' - '404': - description: Not found - content: - application/json: - schema: - $ref: '#/components/schemas/Error404' - parameters: - - schema: - type: string - in: path - name: row_id - description: Row ID (or empty or _ for all row IDs) - required: true - tags: - - AIProvider - /rest/AiGroupGuiDesc/{row_id}/action:AI_UPDATE_DESC: - get: - summary: Call a custom action for a AiGroupGuiDesc business object record or - for all records - security: - - bearerAuth: [] - operationId: obj-aigroupguidesc-action-ai_update_desc - responses: - '200': - description: Success in calling the custom action - content: - application/json: - schema: - $ref: '#/components/schemas/ActionResult' + $ref: '#/components/schemas/AiGroupGuiDesc' '400': description: Bad request content: @@ -1516,12 +1423,13 @@ paths: required: true tags: - AiGroupGuiDesc - /rest/AIProvider: + /rest/AiGroupGuiDesc: get: - summary: Search AIProvider business object records or get contextualized metadata + summary: Search AiGroupGuiDesc business object records or get contextualized + metadata security: - bearerAuth: [] - operationId: obj-aiprovider-search + operationId: obj-aigroupguidesc-search responses: '200': description: Success in searching business object records (or in getting @@ -1529,7 +1437,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ArrayOfAIProvider' + $ref: '#/components/schemas/ArrayOfAiGroupGuiDesc' '401': description: Unauthorized content: @@ -1564,59 +1472,58 @@ paths: - schema: type: string in: query - name: aiPrvProvider - description: Search filter for Provider - required: false - - schema: - type: string - in: query - name: aiPrvDefaultUrl - description: Search filter for Default url - required: false - - schema: - type: string - in: query - name: aiPrvDataModel - description: Search filter for Specific parameter - required: false - - schema: - type: string - in: query - name: aiPrvModelsUrl - description: Search filter for Models url - required: false - - schema: - type: string - in: query - name: aiPrvHelp - description: Search filter for Key and endpoints help + name: aiGgdDescription + description: Search filter for Description required: false - schema: type: string in: query - name: aiPrvCompletionUrl - description: Search filter for Completion endpoint url + name: aiGgdViewhomeId + description: Search filter for Home page required: false - schema: type: string in: query - name: aiPrvPingUrl - description: Search filter for Ping url + name: aiGgdViewhomeId__viw_name + description: Search filter for Scope required: false - schema: type: string + enum: + - ENU + - FRA in: query - name: aiPrvSttUrl - description: Search filter for Speech to text url + name: aiGgdLang + description: Search filter for Language required: false + tags: + - AiGroupGuiDesc + /: + get: + summary: Get user session information + security: + - bearerAuth: [] + operationId: info + responses: + '200': + description: Success in getting user session information + content: + application/json: {} + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error401' + parameters: - schema: - type: string + type: boolean in: query - name: aiPrvUserParameters - description: Search filter for Prv user parameters + name: texts + description: Texts? required: false tags: - - AIProvider + - session info: license: name: Simplicite license diff --git a/AIBySimplicite-swagger-2.0.yml b/AIBySimplicite-swagger-2.0.yml index c1f98d5..e305b33 100644 --- a/AIBySimplicite-swagger-2.0.yml +++ b/AIBySimplicite-swagger-2.0.yml @@ -371,56 +371,18 @@ paths: - AiMetricsHist consumes: - application/json - /rest/AIProvider/{row_id}/action:AIProvidersImport: - get: - summary: Call a custom action for a AIProvider business object record or for - all records - security: - - bearerAuth: [] - produces: - - application/json - operationId: obj-aiprovider-action-aiprovidersimport - responses: - '200': - schema: - $ref: '#/definitions/ActionResult' - description: Success in calling the custom action - '400': - schema: - $ref: '#/definitions/Error400' - description: Bad request - '401': - schema: - $ref: '#/definitions/Error401' - description: Unauthorized - '500': - schema: - $ref: '#/definitions/Error500' - description: Internal server error - '404': - schema: - $ref: '#/definitions/Error404' - description: Not found - parameters: - - in: path - name: row_id - description: Row ID (or empty or _ for all row IDs) - type: string - required: true - tags: - - AIProvider - /rest/AiGroupView/{row_id}: + /rest/AIProvider/{row_id}: post: - summary: Create a new AiGroupView business object record + summary: Create a new AIProvider business object record security: - bearerAuth: [] produces: - application/json - operationId: obj-aigroupview-create + operationId: obj-aiprovider-create responses: '200': schema: - $ref: '#/definitions/AiGroupView' + $ref: '#/definitions/AIProvider' description: Success in creating a new business object record '400': schema: @@ -441,24 +403,24 @@ paths: type: string required: true - schema: - $ref: '#/definitions/AiGroupView' + $ref: '#/definitions/AIProvider' in: body name: body tags: - - AiGroupView + - AIProvider consumes: - application/json get: - summary: Get a AiGroupView business object record + summary: Get a AIProvider business object record security: - bearerAuth: [] produces: - application/json - operationId: obj-aigroupview-get + operationId: obj-aiprovider-get responses: '200': schema: - $ref: '#/definitions/AiGroupView' + $ref: '#/definitions/AIProvider' description: Success in getting a single business object record '401': schema: @@ -494,14 +456,14 @@ paths: type: boolean required: false tags: - - AiGroupView + - AIProvider delete: - summary: Delete a AiGroupView business object record + summary: Delete a AIProvider business object record security: - bearerAuth: [] produces: - application/json - operationId: obj-aigroupview-delete + operationId: obj-aiprovider-delete responses: '200': description: Success in deleting a business object record @@ -528,18 +490,18 @@ paths: type: string required: true tags: - - AiGroupView + - AIProvider put: - summary: Update a AiGroupView business object record + summary: Update a AIProvider business object record security: - bearerAuth: [] produces: - application/json - operationId: obj-aigroupview-update + operationId: obj-aiprovider-update responses: '200': schema: - $ref: '#/definitions/AiGroupView' + $ref: '#/definitions/AIProvider' description: Success in updating a business object record '400': schema: @@ -564,25 +526,110 @@ paths: type: string required: true - schema: - $ref: '#/definitions/AiGroupView' + $ref: '#/definitions/AIProvider' in: body name: body tags: - - AiGroupView + - AIProvider consumes: - application/json - /rest/AiGroupGuiDesc/{row_id}: + /rest/AIProvider: + get: + summary: Search AIProvider business object records or get contextualized metadata + security: + - bearerAuth: [] + produces: + - application/json + operationId: obj-aiprovider-search + responses: + '200': + schema: + $ref: '#/definitions/ArrayOfAIProvider' + description: Success in searching business object records (or in getting + contextualized business object metadata, documentation, ...) + '401': + schema: + $ref: '#/definitions/Error401' + description: Unauthorized + '500': + schema: + $ref: '#/definitions/Error500' + description: Internal server error + parameters: + - in: query + name: _metadata + description: Metadata? + type: boolean + required: false + - in: query + name: _count + description: Count? + type: boolean + required: false + - in: query + name: _doc + description: Documentation? + type: boolean + required: false + - in: query + name: aiPrvProvider + description: Search filter for Provider + type: string + required: false + - in: query + name: aiPrvDefaultUrl + description: Search filter for Default url + type: string + required: false + - in: query + name: aiPrvDataModel + description: Search filter for Specific parameter + type: string + required: false + - in: query + name: aiPrvModelsUrl + description: Search filter for Models url + type: string + required: false + - in: query + name: aiPrvHelp + description: Search filter for Key and endpoints help + type: string + required: false + - in: query + name: aiPrvCompletionUrl + description: Search filter for Completion endpoint url + type: string + required: false + - in: query + name: aiPrvPingUrl + description: Search filter for Ping url + type: string + required: false + - in: query + name: aiPrvSttUrl + description: Search filter for Speech to text url + type: string + required: false + - in: query + name: aiPrvUserParameters + description: Search filter for Prv user parameters + type: string + required: false + tags: + - AIProvider + /rest/AiGroupView/{row_id}: post: - summary: Create a new AiGroupGuiDesc business object record + summary: Create a new AiGroupView business object record security: - bearerAuth: [] produces: - application/json - operationId: obj-aigroupguidesc-create + operationId: obj-aigroupview-create responses: '200': schema: - $ref: '#/definitions/AiGroupGuiDesc' + $ref: '#/definitions/AiGroupView' description: Success in creating a new business object record '400': schema: @@ -603,24 +650,24 @@ paths: type: string required: true - schema: - $ref: '#/definitions/AiGroupGuiDesc' + $ref: '#/definitions/AiGroupView' in: body name: body tags: - - AiGroupGuiDesc + - AiGroupView consumes: - application/json get: - summary: Get a AiGroupGuiDesc business object record + summary: Get a AiGroupView business object record security: - bearerAuth: [] produces: - application/json - operationId: obj-aigroupguidesc-get + operationId: obj-aigroupview-get responses: '200': schema: - $ref: '#/definitions/AiGroupGuiDesc' + $ref: '#/definitions/AiGroupView' description: Success in getting a single business object record '401': schema: @@ -656,14 +703,14 @@ paths: type: boolean required: false tags: - - AiGroupGuiDesc + - AiGroupView delete: - summary: Delete a AiGroupGuiDesc business object record + summary: Delete a AiGroupView business object record security: - bearerAuth: [] produces: - application/json - operationId: obj-aigroupguidesc-delete + operationId: obj-aigroupview-delete responses: '200': description: Success in deleting a business object record @@ -690,18 +737,18 @@ paths: type: string required: true tags: - - AiGroupGuiDesc + - AiGroupView put: - summary: Update a AiGroupGuiDesc business object record + summary: Update a AiGroupView business object record security: - bearerAuth: [] produces: - application/json - operationId: obj-aigroupguidesc-update + operationId: obj-aigroupview-update responses: '200': schema: - $ref: '#/definitions/AiGroupGuiDesc' + $ref: '#/definitions/AiGroupView' description: Success in updating a business object record '400': schema: @@ -726,150 +773,25 @@ paths: type: string required: true - schema: - $ref: '#/definitions/AiGroupGuiDesc' + $ref: '#/definitions/AiGroupView' in: body name: body tags: - - AiGroupGuiDesc + - AiGroupView consumes: - application/json - /rest/AiGroupGuiDesc: - get: - summary: Search AiGroupGuiDesc business object records or get contextualized - metadata - security: - - bearerAuth: [] - produces: - - application/json - operationId: obj-aigroupguidesc-search - responses: - '200': - schema: - $ref: '#/definitions/ArrayOfAiGroupGuiDesc' - description: Success in searching business object records (or in getting - contextualized business object metadata, documentation, ...) - '401': - schema: - $ref: '#/definitions/Error401' - description: Unauthorized - '500': - schema: - $ref: '#/definitions/Error500' - description: Internal server error - parameters: - - in: query - name: _metadata - description: Metadata? - type: boolean - required: false - - in: query - name: _count - description: Count? - type: boolean - required: false - - in: query - name: _doc - description: Documentation? - type: boolean - required: false - - in: query - name: aiGgdDescription - description: Search filter for Description - type: string - required: false - - in: query - name: aiGgdViewhomeId - description: Search filter for Home page - type: string - required: false - - in: query - name: aiGgdViewhomeId__viw_name - description: Search filter for Scope - type: string - required: false - - in: query - name: aiGgdLang - description: Search filter for Language - type: string - required: false - enum: - - ENU - - FRA - tags: - - AiGroupGuiDesc - /: - get: - summary: Get user session information - security: - - bearerAuth: [] - produces: - - application/json - operationId: info - responses: - '200': - description: Success in getting user session information - '401': - schema: - $ref: '#/definitions/Error401' - description: Unauthorized - parameters: - - in: query - name: texts - description: Texts? - type: boolean - required: false - tags: - - session - /rest/AiGroupGuiDesc/{row_id}/action:AI_UPDATE_DESC_GLOBAL: - get: - summary: Call a custom action for a AiGroupGuiDesc business object record or - for all records - security: - - bearerAuth: [] - produces: - - application/json - operationId: obj-aigroupguidesc-action-ai_update_desc_global - responses: - '200': - schema: - $ref: '#/definitions/ActionResult' - description: Success in calling the custom action - '400': - schema: - $ref: '#/definitions/Error400' - description: Bad request - '401': - schema: - $ref: '#/definitions/Error401' - description: Unauthorized - '500': - schema: - $ref: '#/definitions/Error500' - description: Internal server error - '404': - schema: - $ref: '#/definitions/Error404' - description: Not found - parameters: - - in: path - name: row_id - description: Row ID (or empty or _ for all row IDs) - type: string - required: true - tags: - - AiGroupGuiDesc - /rest/AIProvider/{row_id}: + /rest/AiGroupGuiDesc/{row_id}: post: - summary: Create a new AIProvider business object record + summary: Create a new AiGroupGuiDesc business object record security: - bearerAuth: [] produces: - application/json - operationId: obj-aiprovider-create + operationId: obj-aigroupguidesc-create responses: '200': schema: - $ref: '#/definitions/AIProvider' + $ref: '#/definitions/AiGroupGuiDesc' description: Success in creating a new business object record '400': schema: @@ -890,24 +812,24 @@ paths: type: string required: true - schema: - $ref: '#/definitions/AIProvider' + $ref: '#/definitions/AiGroupGuiDesc' in: body name: body tags: - - AIProvider + - AiGroupGuiDesc consumes: - application/json get: - summary: Get a AIProvider business object record + summary: Get a AiGroupGuiDesc business object record security: - bearerAuth: [] produces: - application/json - operationId: obj-aiprovider-get + operationId: obj-aigroupguidesc-get responses: '200': schema: - $ref: '#/definitions/AIProvider' + $ref: '#/definitions/AiGroupGuiDesc' description: Success in getting a single business object record '401': schema: @@ -943,14 +865,14 @@ paths: type: boolean required: false tags: - - AIProvider + - AiGroupGuiDesc delete: - summary: Delete a AIProvider business object record + summary: Delete a AiGroupGuiDesc business object record security: - bearerAuth: [] produces: - application/json - operationId: obj-aiprovider-delete + operationId: obj-aigroupguidesc-delete responses: '200': description: Success in deleting a business object record @@ -977,18 +899,18 @@ paths: type: string required: true tags: - - AIProvider + - AiGroupGuiDesc put: - summary: Update a AIProvider business object record + summary: Update a AiGroupGuiDesc business object record security: - bearerAuth: [] produces: - application/json - operationId: obj-aiprovider-update + operationId: obj-aigroupguidesc-update responses: '200': schema: - $ref: '#/definitions/AIProvider' + $ref: '#/definitions/AiGroupGuiDesc' description: Success in updating a business object record '400': schema: @@ -1013,63 +935,26 @@ paths: type: string required: true - schema: - $ref: '#/definitions/AIProvider' + $ref: '#/definitions/AiGroupGuiDesc' in: body name: body tags: - - AIProvider + - AiGroupGuiDesc consumes: - application/json - /rest/AiGroupGuiDesc/{row_id}/action:AI_UPDATE_DESC: - get: - summary: Call a custom action for a AiGroupGuiDesc business object record or - for all records - security: - - bearerAuth: [] - produces: - - application/json - operationId: obj-aigroupguidesc-action-ai_update_desc - responses: - '200': - schema: - $ref: '#/definitions/ActionResult' - description: Success in calling the custom action - '400': - schema: - $ref: '#/definitions/Error400' - description: Bad request - '401': - schema: - $ref: '#/definitions/Error401' - description: Unauthorized - '500': - schema: - $ref: '#/definitions/Error500' - description: Internal server error - '404': - schema: - $ref: '#/definitions/Error404' - description: Not found - parameters: - - in: path - name: row_id - description: Row ID (or empty or _ for all row IDs) - type: string - required: true - tags: - - AiGroupGuiDesc - /rest/AIProvider: + /rest/AiGroupGuiDesc: get: - summary: Search AIProvider business object records or get contextualized metadata + summary: Search AiGroupGuiDesc business object records or get contextualized + metadata security: - bearerAuth: [] produces: - application/json - operationId: obj-aiprovider-search + operationId: obj-aigroupguidesc-search responses: '200': schema: - $ref: '#/definitions/ArrayOfAIProvider' + $ref: '#/definitions/ArrayOfAiGroupGuiDesc' description: Success in searching business object records (or in getting contextualized business object metadata, documentation, ...) '401': @@ -1097,52 +982,53 @@ paths: type: boolean required: false - in: query - name: aiPrvProvider - description: Search filter for Provider - type: string - required: false - - in: query - name: aiPrvDefaultUrl - description: Search filter for Default url - type: string - required: false - - in: query - name: aiPrvDataModel - description: Search filter for Specific parameter - type: string - required: false - - in: query - name: aiPrvModelsUrl - description: Search filter for Models url - type: string - required: false - - in: query - name: aiPrvHelp - description: Search filter for Key and endpoints help + name: aiGgdDescription + description: Search filter for Description type: string required: false - in: query - name: aiPrvCompletionUrl - description: Search filter for Completion endpoint url + name: aiGgdViewhomeId + description: Search filter for Home page type: string required: false - in: query - name: aiPrvPingUrl - description: Search filter for Ping url + name: aiGgdViewhomeId__viw_name + description: Search filter for Scope type: string required: false - in: query - name: aiPrvSttUrl - description: Search filter for Speech to text url + name: aiGgdLang + description: Search filter for Language type: string required: false + enum: + - ENU + - FRA + tags: + - AiGroupGuiDesc + /: + get: + summary: Get user session information + security: + - bearerAuth: [] + produces: + - application/json + operationId: info + responses: + '200': + description: Success in getting user session information + '401': + schema: + $ref: '#/definitions/Error401' + description: Unauthorized + parameters: - in: query - name: aiPrvUserParameters - description: Search filter for Prv user parameters - type: string + name: texts + description: Texts? + type: boolean required: false tags: - - AIProvider + - session securityDefinitions: basicAuth: type: basic @@ -1152,6 +1038,7 @@ securityDefinitions: type: apiKey definitions: Error404: + description: Not found type: object properties: error: @@ -1163,27 +1050,34 @@ definitions: enum: - 404 AiGroupGuiDesc: + description: Group gui description type: object properties: aiGgdDescription: description: Description type: string + maxLength: 50000 aiGgdLang: description: Language type: string + maxLength: 100 enum: - ENU - FRA aiGgdViewhomeId__viw_name: description: Scope type: string + maxLength: 100 aiGgdViewhomeId: description: Home page type: string + maxLength: 11 row_id: description: Unique technical row ID type: string + maxLength: 11 AiGroupView: + description: Described group type: object properties: aiAigroupviewUsed: @@ -1192,28 +1086,36 @@ definitions: aiGroupGuiDescId__aiGgdViewhomeId__viw_name: description: Group gui desc id Home page Name type: string + maxLength: 100 aiGroupGuiDescId__aiGgdLang: description: Group gui desc id Language type: string + maxLength: 100 enum: - ENU - FRA row_id: description: Unique technical row ID type: string + maxLength: 11 aiGroupGuiDescId__aiGgdViewhomeId: description: Group gui desc id Home page type: string + maxLength: 11 aiGroupId: description: aiGroupId type: string + maxLength: 11 aiGroupGuiDescId: description: Group gui desc id type: string + maxLength: 11 aiGroupId__grp_name: description: Group name type: string + maxLength: 100 PublicationResult: + description: Publication result type: object properties: mime: @@ -1223,6 +1125,7 @@ definitions: description: Content (plain text or base64 encoded) type: string PlaceData: + description: Place data type: object properties: coord: @@ -1244,6 +1147,7 @@ definitions: description: 'Label #3' type: string PlaceMapData: + description: Places map data type: object properties: places: @@ -1255,12 +1159,14 @@ definitions: description: Name type: string ActionResult: + description: Action result type: object properties: result: description: Action result type: string ArrayOfAIProvider: + description: List of Providers type: array items: $ref: '#/definitions/AIProvider' @@ -1271,10 +1177,12 @@ definitions: description: Object item with lists of linked objects' items type: object ArrayOfAiGroupGuiDesc: + description: List of Group gui description type: array items: $ref: '#/definitions/AiGroupGuiDesc' Error400: + description: Bad request type: object properties: error: @@ -1286,6 +1194,7 @@ definitions: enum: - 400 Error401: + description: Unauthorized type: object properties: error: @@ -1297,6 +1206,7 @@ definitions: enum: - 401 Error500: + description: Internal server error type: object properties: error: @@ -1308,43 +1218,56 @@ definitions: enum: - 500 ArrayOfAiGroupView: + description: List of Described group type: array items: $ref: '#/definitions/AiGroupView' AIProvider: + description: Provider type: object properties: aiPrvDefaultUrl: description: Default url type: string + maxLength: 100 aiPrvSttUrl: description: Speech to text url type: string + maxLength: 100 aiPrvPingUrl: description: Ping url type: string + maxLength: 100 aiPrvProvider: description: Provider type: string + maxLength: 100 aiPrvDataModel: description: Specific parameter type: string + maxLength: 1000 aiPrvCompletionUrl: description: Completion endpoint url type: string + maxLength: 100 aiPrvHelp: description: Key and endpoints help type: string + maxLength: 5000 aiPrvUserParameters: description: Prv user parameters type: string + maxLength: 5000 row_id: description: Unique technical row ID type: string + maxLength: 11 aiPrvModelsUrl: description: Models url type: string + maxLength: 100 Error403: + description: Forbidden type: object properties: error: @@ -1356,37 +1279,48 @@ definitions: enum: - 403 AiMetricsHist: + description: History of generated graphs type: object properties: aiMhPrompt: description: Title type: string + maxLength: 1000 aiMhCreateOn: description: Mh create on type: string + maxLength: 19 example: yyyy-MM-dd HH:mm:ss aiMhSimpleuserId: description: Mh simpleuser id type: string + maxLength: 11 aiMhSimpleuserId__usr_login: description: Login type: string + maxLength: 100 aiMhModuleId__mdl_name: description: Module name type: string + maxLength: 100 aiMhMetrics: description: Mh metrics type: string + maxLength: 10000 row_id: description: Unique technical row ID type: string + maxLength: 11 aiMhModuleId: description: Mh module id type: string + maxLength: 11 aiMhPreview: description: Preview type: string + maxLength: 10000 ArrayOfAiMetricsHist: + description: List of History of generated graphs type: array items: $ref: '#/definitions/AiMetricsHist' diff --git a/AIBySimplicite.json b/AIBySimplicite.json index 215a356..c3de74c 100644 --- a/AIBySimplicite.json +++ b/AIBySimplicite.json @@ -156,7 +156,7 @@ "mod_doc": { "path": "files/Model/Model-AIModuleCreate.svg", "mime": "image/svg+xml", - "name": "model.svg" + "name": "Model-AIModuleCreate.svg" }, "mod_image": { "path": "files/Model/Model-AIModuleCreate.png", @@ -1422,23 +1422,23 @@ "list": [ { "object": "FieldListValue", - "userkey": "AI_CONF_MODELE MISTRAL English", + "userkey": "AI_CONF_MODELE OPENAI English", "item": { "lov_code_id__lov_list_id__lov_name": "AI_CONF_MODELE", - "lov_code_id__lov_code": "MISTRAL", + "lov_code_id__lov_code": "OPENAI", "lov_lang": "ENU", - "lov_value": "Mistral", + "lov_value": "OpenAi", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "FieldListValue", - "userkey": "AI_CONF_MODELE OPENAI English", + "userkey": "AI_CONF_MODELE MISTRAL English", "item": { "lov_code_id__lov_list_id__lov_name": "AI_CONF_MODELE", - "lov_code_id__lov_code": "OPENAI", + "lov_code_id__lov_code": "MISTRAL", "lov_lang": "ENU", - "lov_value": "OpenAi", + "lov_value": "Mistral", "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -1466,23 +1466,23 @@ }, { "object": "FieldListValue", - "userkey": "AI_EX_TYPE OTHER English", + "userkey": "AI_EX_TYPE CODE English", "item": { "lov_code_id__lov_list_id__lov_name": "AI_EX_TYPE", - "lov_code_id__lov_code": "OTHER", + "lov_code_id__lov_code": "CODE", "lov_lang": "ENU", - "lov_value": "Other", + "lov_value": "Code", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "FieldListValue", - "userkey": "AI_EX_TYPE CODE English", + "userkey": "AI_EX_TYPE OTHER English", "item": { "lov_code_id__lov_list_id__lov_name": "AI_EX_TYPE", - "lov_code_id__lov_code": "CODE", + "lov_code_id__lov_code": "OTHER", "lov_lang": "ENU", - "lov_value": "Code", + "lov_value": "Other", "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -5796,24 +5796,6 @@ "icon": "img/system/impact", "field": "row_module_id", "list": [ - { - "object": "ConstraintImpact", - "userkey": "canCreateOnList AiGroupGuiDesc 1", - "item": { - "csi_const_id__cst_name": "canCreateOnList", - "csi_const_id__cst_object_id__obo_name": "AiGroupGuiDesc", - "csi_order": 1, - "csi_object_prop": "N", - "csi_field_prop": null, - "csi_apply": "O", - "csi_expr": "[PANELOF:ViewHome]", - "csi_target": null, - "csi_objfield_id__obf_object_id__obo_name": null, - "csi_objfield_id__obf_field_id__fld_name": null, - "csi_objfield_id__obf_order": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, { "object": "ConstraintImpact", "userkey": "CreateSpe AiGroupGuiDesc 1", @@ -5832,6 +5814,24 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, + { + "object": "ConstraintImpact", + "userkey": "canCreateOnList AiGroupGuiDesc 1", + "item": { + "csi_const_id__cst_name": "canCreateOnList", + "csi_const_id__cst_object_id__obo_name": "AiGroupGuiDesc", + "csi_order": 1, + "csi_object_prop": "N", + "csi_field_prop": null, + "csi_apply": "O", + "csi_expr": "[PANELOF:ViewHome]", + "csi_target": null, + "csi_objfield_id__obf_object_id__obo_name": null, + "csi_objfield_id__obf_field_id__fld_name": null, + "csi_objfield_id__obf_order": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "ConstraintImpact", "userkey": "CreateSpe AiGroupGuiDesc 2", @@ -7257,28 +7257,28 @@ }, { "object": "BPMData", - "userkey": "AIGenData GGD-END Forward Page", + "userkey": "AIGenData GGD-END Forward PARAM:1", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIGenData", "dta_activity_id__acy_step": "GGD-END", "dta_group": "Forward", - "dta_name": "Page", + "dta_name": "PARAM:1", "dta_order": 1, - "dta_value": "[EXPR:HTMLTool.getFormURL(\"Module\", null, \"[PARAM:1]\", \"nav=add\")]", + "dta_value": "GGD_0100.Field.row_id", "dta_field_id__fld_name": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "BPMData", - "userkey": "AIGenData GGD-END Forward PARAM:1", + "userkey": "AIGenData GGD-END Forward Page", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIGenData", "dta_activity_id__acy_step": "GGD-END", "dta_group": "Forward", - "dta_name": "PARAM:1", + "dta_name": "Page", "dta_order": 1, - "dta_value": "GGD_0100.Field.row_id", + "dta_value": "[EXPR:HTMLTool.getFormURL(\"Module\", null, \"[PARAM:1]\", \"nav=add\")]", "dta_field_id__fld_name": null, "row_module_id__mdl_name": "AIBySimplicite" } @@ -7509,14 +7509,14 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate AIC_0017 Field row_module_id.mdl_name", + "userkey": "AIModuleCreate AIC_0017 Field row_module_id", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0017", "dta_group": "Field", - "dta_name": "row_module_id.mdl_name", + "dta_name": "row_module_id", "dta_order": 1, - "dta_value": "[AIC_0010.Field.mdl_name]", + "dta_value": "[AIC_0010.Field.row_id]", "dta_field_id__fld_name": null, "row_module_id__mdl_name": "AIBySimplicite" } @@ -7537,14 +7537,14 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate AIC_0017 Field row_module_id", + "userkey": "AIModuleCreate AIC_0017 Field row_module_id.mdl_name", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0017", "dta_group": "Field", - "dta_name": "row_module_id", + "dta_name": "row_module_id.mdl_name", "dta_order": 1, - "dta_value": "[AIC_0010.Field.row_id]", + "dta_value": "[AIC_0010.Field.mdl_name]", "dta_field_id__fld_name": null, "row_module_id__mdl_name": "AIBySimplicite" } @@ -7929,12 +7929,12 @@ }, { "object": "BPMData", - "userkey": "AiSettingsProcess ASP-0200 Data aiPrvDefaultUrl", + "userkey": "AiSettingsProcess ASP-0200 Data aiPrvSttUrl", "item": { "dta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "dta_activity_id__acy_step": "ASP-0200", "dta_group": "Data", - "dta_name": "aiPrvDefaultUrl", + "dta_name": "aiPrvSttUrl", "dta_order": 1, "dta_value": null, "dta_field_id__fld_name": null, @@ -7985,12 +7985,12 @@ }, { "object": "BPMData", - "userkey": "AiSettingsProcess ASP-0200 Data aiPrvSttUrl", + "userkey": "AiSettingsProcess ASP-0200 Data aiPrvDefaultUrl", "item": { "dta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "dta_activity_id__acy_step": "ASP-0200", "dta_group": "Data", - "dta_name": "aiPrvSttUrl", + "dta_name": "aiPrvDefaultUrl", "dta_order": 1, "dta_value": null, "dta_field_id__fld_name": null, @@ -8115,24 +8115,24 @@ }, { "object": "BPMHelp", - "userkey": "AiSettingsProcess ASP-0500 French", + "userkey": "AiSettingsProcess ASP-0500 English", "item": { "hlp_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "hlp_activity_id__acy_step": "ASP-0500", - "hlp_lang": "FRA", - "hlp_abstract": "

Veuillez vider le cache pour que cette modification prenne effet.<\/p>", + "hlp_lang": "ENU", + "hlp_abstract": "

Please clear the cache for this change to take effect.<\/p>", "hlp_content": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "BPMHelp", - "userkey": "AiSettingsProcess ASP-0500 English", + "userkey": "AiSettingsProcess ASP-0500 French", "item": { "hlp_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "hlp_activity_id__acy_step": "ASP-0500", - "hlp_lang": "ENU", - "hlp_abstract": "

Please clear the cache for this change to take effect.<\/p>", + "hlp_lang": "FRA", + "hlp_abstract": "

Veuillez vider le cache pour que cette modification prenne effet.<\/p>", "hlp_content": null, "row_module_id__mdl_name": "AIBySimplicite" } @@ -9631,6 +9631,150 @@ "row_module_id__mdl_name": "AIBySimplicite" } }, + { + "object": "Resource", + "userkey": "AIMetricsChat * STYLES", + "item": { + "res_object": { + "item": {"obe_name": "AIMetricsChat"}, + "icon": "img/system/external_object", + "label": "External object", + "userkeylabel": "AIMetricsChat", + "object": "ObjectExternal" + }, + "res_type": "CSS", + "res_lang": "ANY", + "res_code": "STYLES", + "res_cached": false, + "res_file": { + "path": "resources/ObjectExternal/AIMetricsChat/STYLES.less", + "mime": "text/x-less", + "name": "STYLES.less" + }, + "res_image": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "Resource", + "userkey": "AIMetricsChat * HTML", + "item": { + "res_object": { + "item": {"obe_name": "AIMetricsChat"}, + "icon": "img/system/external_object", + "label": "External object", + "userkeylabel": "AIMetricsChat", + "object": "ObjectExternal" + }, + "res_type": "HTML", + "res_lang": "ANY", + "res_code": "HTML", + "res_cached": false, + "res_file": { + "path": "resources/ObjectExternal/AIMetricsChat/HTML.html", + "mime": "text/html", + "name": "HTML.html" + }, + "res_image": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "Resource", + "userkey": "AIMetricsChat * SCRIPT", + "item": { + "res_object": { + "item": {"obe_name": "AIMetricsChat"}, + "icon": "img/system/external_object", + "label": "External object", + "userkeylabel": "AIMetricsChat", + "object": "ObjectExternal" + }, + "res_type": "JS", + "res_lang": "ANY", + "res_code": "SCRIPT", + "res_cached": false, + "res_file": { + "path": "resources/ObjectExternal/AIMetricsChat/SCRIPT.js", + "mime": "text/javascript", + "name": "SCRIPT.js" + }, + "res_image": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "Resource", + "userkey": "AIExpTool * STYLES", + "item": { + "res_object": { + "item": {"obe_name": "AIExpTool"}, + "icon": "img/system/external_object", + "label": "External object", + "userkeylabel": "AIExpTool", + "object": "ObjectExternal" + }, + "res_type": "CSS", + "res_lang": "ANY", + "res_code": "STYLES", + "res_cached": false, + "res_file": { + "path": "resources/ObjectExternal/AIExpTool/STYLES.less", + "mime": "text/x-less", + "name": "STYLES.less" + }, + "res_image": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "Resource", + "userkey": "AIExpTool * HTML", + "item": { + "res_object": { + "item": {"obe_name": "AIExpTool"}, + "icon": "img/system/external_object", + "label": "External object", + "userkeylabel": "AIExpTool", + "object": "ObjectExternal" + }, + "res_type": "HTML", + "res_lang": "ANY", + "res_code": "HTML", + "res_cached": false, + "res_file": { + "path": "resources/ObjectExternal/AIExpTool/HTML.html", + "mime": "text/html", + "name": "HTML.html" + }, + "res_image": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "Resource", + "userkey": "AIExpTool * SCRIPT", + "item": { + "res_object": { + "item": {"obe_name": "AIExpTool"}, + "icon": "img/system/external_object", + "label": "External object", + "userkeylabel": "AIExpTool", + "object": "ObjectExternal" + }, + "res_type": "JS", + "res_lang": "ANY", + "res_code": "SCRIPT", + "res_cached": false, + "res_file": { + "path": "resources/ObjectExternal/AIExpTool/SCRIPT.js", + "mime": "text/javascript", + "name": "SCRIPT.js" + }, + "res_image": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "Resource", "userkey": "AiMonitoring * STYLES", @@ -9921,13 +10065,13 @@ }, { "object": "Resource", - "userkey": "AIExpTool * STYLES", + "userkey": "AIPromptTool * STYLES", "item": { "res_object": { - "item": {"obe_name": "AIExpTool"}, + "item": {"obe_name": "AIPromptTool"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIExpTool", + "userkeylabel": "AIPromptTool", "object": "ObjectExternal" }, "res_type": "CSS", @@ -9935,151 +10079,7 @@ "res_code": "STYLES", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AIExpTool/STYLES.less", - "mime": "text/x-less", - "name": "STYLES.less" - }, - "res_image": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "Resource", - "userkey": "AIExpTool * HTML", - "item": { - "res_object": { - "item": {"obe_name": "AIExpTool"}, - "icon": "img/system/external_object", - "label": "External object", - "userkeylabel": "AIExpTool", - "object": "ObjectExternal" - }, - "res_type": "HTML", - "res_lang": "ANY", - "res_code": "HTML", - "res_cached": false, - "res_file": { - "path": "resources/ObjectExternal/AIExpTool/HTML.html", - "mime": "text/html", - "name": "HTML.html" - }, - "res_image": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "Resource", - "userkey": "AIExpTool * SCRIPT", - "item": { - "res_object": { - "item": {"obe_name": "AIExpTool"}, - "icon": "img/system/external_object", - "label": "External object", - "userkeylabel": "AIExpTool", - "object": "ObjectExternal" - }, - "res_type": "JS", - "res_lang": "ANY", - "res_code": "SCRIPT", - "res_cached": false, - "res_file": { - "path": "resources/ObjectExternal/AIExpTool/SCRIPT.js", - "mime": "text/javascript", - "name": "SCRIPT.js" - }, - "res_image": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "Resource", - "userkey": "AIMetricsChat * STYLES", - "item": { - "res_object": { - "item": {"obe_name": "AIMetricsChat"}, - "icon": "img/system/external_object", - "label": "External object", - "userkeylabel": "AIMetricsChat", - "object": "ObjectExternal" - }, - "res_type": "CSS", - "res_lang": "ANY", - "res_code": "STYLES", - "res_cached": false, - "res_file": { - "path": "resources/ObjectExternal/AIMetricsChat/STYLES.less", - "mime": "text/x-less", - "name": "STYLES.less" - }, - "res_image": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "Resource", - "userkey": "AIMetricsChat * HTML", - "item": { - "res_object": { - "item": {"obe_name": "AIMetricsChat"}, - "icon": "img/system/external_object", - "label": "External object", - "userkeylabel": "AIMetricsChat", - "object": "ObjectExternal" - }, - "res_type": "HTML", - "res_lang": "ANY", - "res_code": "HTML", - "res_cached": false, - "res_file": { - "path": "resources/ObjectExternal/AIMetricsChat/HTML.html", - "mime": "text/html", - "name": "HTML.html" - }, - "res_image": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "Resource", - "userkey": "AIMetricsChat * SCRIPT", - "item": { - "res_object": { - "item": {"obe_name": "AIMetricsChat"}, - "icon": "img/system/external_object", - "label": "External object", - "userkeylabel": "AIMetricsChat", - "object": "ObjectExternal" - }, - "res_type": "JS", - "res_lang": "ANY", - "res_code": "SCRIPT", - "res_cached": false, - "res_file": { - "path": "resources/ObjectExternal/AIMetricsChat/SCRIPT.js", - "mime": "text/javascript", - "name": "SCRIPT.js" - }, - "res_image": null, - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "Resource", - "userkey": "AIPromptTool * STYLES", - "item": { - "res_object": { - "item": {"obe_name": "AIPromptTool"}, - "icon": "img/system/external_object", - "label": "External object", - "userkeylabel": "AIPromptTool", - "object": "ObjectExternal" - }, - "res_type": "CSS", - "res_lang": "ANY", - "res_code": "STYLES", - "res_cached": false, - "res_file": { - "path": "resources/ObjectExternal/AIPromptTool/STYLES.less", + "path": "resources/ObjectExternal/AIPromptTool/STYLES.less", "mime": "text/x-less", "name": "STYLES.less" }, @@ -10507,34 +10507,34 @@ }, { "object": "TranslateAction", - "userkey": "AIAutoGenModule English", + "userkey": "AI_SENT English", "item": { "tsl_object": { - "item": {"act_name": "AIAutoGenModule"}, + "item": {"act_name": "AI_SENT"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIAutoGenModule", + "userkeylabel": "AI_SENT", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Model generation by AI", + "tsl_value": "Sent", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "AIAutoGenModule French", + "userkey": "AI_SENT French", "item": { "tsl_object": { - "item": {"act_name": "AIAutoGenModule"}, + "item": {"act_name": "AI_SENT"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIAutoGenModule", + "userkeylabel": "AI_SENT", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Génération du modèle par l'IA", + "tsl_value": "Envoyé", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } @@ -10575,34 +10575,34 @@ }, { "object": "TranslateAction", - "userkey": "AI_UPDATE_DESC_GLOBAL English", + "userkey": "AIAddData English", "item": { "tsl_object": { - "item": {"act_name": "AI_UPDATE_DESC_GLOBAL"}, + "item": {"act_name": "AIAddData"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AI_UPDATE_DESC_GLOBAL", + "userkeylabel": "AIAddData", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Update descriptions", + "tsl_value": "Data generation", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "AI_UPDATE_DESC_GLOBAL French", + "userkey": "AIAddData French", "item": { "tsl_object": { - "item": {"act_name": "AI_UPDATE_DESC_GLOBAL"}, + "item": {"act_name": "AIAddData"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AI_UPDATE_DESC_GLOBAL", + "userkeylabel": "AIAddData", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Mettre à jour de les descriptions", + "tsl_value": "Génération de données", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } @@ -10643,136 +10643,136 @@ }, { "object": "TranslateAction", - "userkey": "AI_SENT English", + "userkey": "AIDeleteModule English", "item": { "tsl_object": { - "item": {"act_name": "AI_SENT"}, + "item": {"act_name": "AIDeleteModule"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AI_SENT", + "userkeylabel": "AIDeleteModule", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Sent", + "tsl_value": "Delete module", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "AI_SENT French", + "userkey": "AIDeleteModule French", "item": { "tsl_object": { - "item": {"act_name": "AI_SENT"}, + "item": {"act_name": "AIDeleteModule"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AI_SENT", + "userkeylabel": "AIDeleteModule", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Envoyé", + "tsl_value": "Supprimer le module", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "AICalculateFieldJs English", + "userkey": "AI_UPDATE_DESC_GLOBAL English", "item": { "tsl_object": { - "item": {"act_name": "AICalculateFieldJs"}, + "item": {"act_name": "AI_UPDATE_DESC_GLOBAL"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AICalculateFieldJs", + "userkeylabel": "AI_UPDATE_DESC_GLOBAL", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Save with AI", + "tsl_value": "Update descriptions", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "AICalculateFieldJs French", + "userkey": "AI_UPDATE_DESC_GLOBAL French", "item": { "tsl_object": { - "item": {"act_name": "AICalculateFieldJs"}, + "item": {"act_name": "AI_UPDATE_DESC_GLOBAL"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AICalculateFieldJs", + "userkeylabel": "AI_UPDATE_DESC_GLOBAL", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Enregistrer avec IA", + "tsl_value": "Mettre à jour de les descriptions", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "AIAddData English", + "userkey": "AICalculateFieldJs English", "item": { "tsl_object": { - "item": {"act_name": "AIAddData"}, + "item": {"act_name": "AICalculateFieldJs"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIAddData", + "userkeylabel": "AICalculateFieldJs", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Data generation", + "tsl_value": "Save with AI", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "AIAddData French", + "userkey": "AICalculateFieldJs French", "item": { "tsl_object": { - "item": {"act_name": "AIAddData"}, + "item": {"act_name": "AICalculateFieldJs"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIAddData", + "userkeylabel": "AICalculateFieldJs", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Génération de données", + "tsl_value": "Enregistrer avec IA", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "AIDeleteModule English", + "userkey": "AIAutoGenModule English", "item": { "tsl_object": { - "item": {"act_name": "AIDeleteModule"}, + "item": {"act_name": "AIAutoGenModule"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIDeleteModule", + "userkeylabel": "AIAutoGenModule", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Delete module", + "tsl_value": "Model generation by AI", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "AIDeleteModule French", + "userkey": "AIAutoGenModule French", "item": { "tsl_object": { - "item": {"act_name": "AIDeleteModule"}, + "item": {"act_name": "AIAutoGenModule"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIDeleteModule", + "userkeylabel": "AIAutoGenModule", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Supprimer le module", + "tsl_value": "Génération du modèle par l'IA", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } @@ -10881,68 +10881,68 @@ }, { "object": "TranslateAction", - "userkey": "AiSaveAsCrosstable English", + "userkey": "AISetSettings English", "item": { "tsl_object": { - "item": {"act_name": "AiSaveAsCrosstable"}, + "item": {"act_name": "AISetSettings"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AiSaveAsCrosstable", + "userkeylabel": "AISetSettings", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Save as crosstable", + "tsl_value": "Configuring the wizard", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "AiSaveAsCrosstable French", + "userkey": "AISetSettings French", "item": { "tsl_object": { - "item": {"act_name": "AiSaveAsCrosstable"}, + "item": {"act_name": "AISetSettings"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AiSaveAsCrosstable", + "userkeylabel": "AISetSettings", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Enregistrer en tant que tableau croisé", + "tsl_value": "Configuration de l'assistant", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "AISetSettings English", + "userkey": "AiSaveAsCrosstable English", "item": { "tsl_object": { - "item": {"act_name": "AISetSettings"}, + "item": {"act_name": "AiSaveAsCrosstable"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AISetSettings", + "userkeylabel": "AiSaveAsCrosstable", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Configuring the wizard", + "tsl_value": "Save as crosstable", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "AISetSettings French", + "userkey": "AiSaveAsCrosstable French", "item": { "tsl_object": { - "item": {"act_name": "AISetSettings"}, + "item": {"act_name": "AiSaveAsCrosstable"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AISetSettings", + "userkeylabel": "AiSaveAsCrosstable", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Configuration de l'assistant", + "tsl_value": "Enregistrer en tant que tableau croisé", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } @@ -11069,17 +11069,17 @@ }, { "object": "TranslateField", - "userkey": "aiGgdLang English", + "userkey": "aiAigroupviewUsed English", "item": { "tsl_object": { - "item": {"fld_name": "aiGgdLang"}, + "item": {"fld_name": "aiAigroupviewUsed"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiGgdLang", + "userkeylabel": "aiAigroupviewUsed", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Language", + "tsl_value": "GUIDescription", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11091,17 +11091,17 @@ }, { "object": "TranslateField", - "userkey": "aiGgdLang French", + "userkey": "aiAigroupviewUsed French", "item": { "tsl_object": { - "item": {"fld_name": "aiGgdLang"}, + "item": {"fld_name": "aiAigroupviewUsed"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiGgdLang", + "userkeylabel": "aiAigroupviewUsed", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Langue", + "tsl_value": "IHM à décrire", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11157,17 +11157,17 @@ }, { "object": "TranslateField", - "userkey": "aiAigroupviewUsed English", + "userkey": "aiGgdViewhomeId English", "item": { "tsl_object": { - "item": {"fld_name": "aiAigroupviewUsed"}, + "item": {"fld_name": "aiGgdViewhomeId"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiAigroupviewUsed", + "userkeylabel": "aiGgdViewhomeId", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "GUIDescription", + "tsl_value": "Home page", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11179,17 +11179,17 @@ }, { "object": "TranslateField", - "userkey": "aiAigroupviewUsed French", + "userkey": "aiGgdViewhomeId French", "item": { "tsl_object": { - "item": {"fld_name": "aiAigroupviewUsed"}, + "item": {"fld_name": "aiGgdViewhomeId"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiAigroupviewUsed", + "userkeylabel": "aiGgdViewhomeId", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "IHM à décrire", + "tsl_value": "Ggd viewhome id", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11201,17 +11201,17 @@ }, { "object": "TranslateField", - "userkey": "aiGgdViewhomeId English", + "userkey": "aiGroupGuiDescId English", "item": { "tsl_object": { - "item": {"fld_name": "aiGgdViewhomeId"}, + "item": {"fld_name": "aiGroupGuiDescId"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiGgdViewhomeId", + "userkeylabel": "aiGroupGuiDescId", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Home page", + "tsl_value": "Group gui desc id", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11223,17 +11223,17 @@ }, { "object": "TranslateField", - "userkey": "aiGgdViewhomeId French", + "userkey": "aiGroupGuiDescId French", "item": { "tsl_object": { - "item": {"fld_name": "aiGgdViewhomeId"}, + "item": {"fld_name": "aiGroupGuiDescId"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiGgdViewhomeId", + "userkeylabel": "aiGroupGuiDescId", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Ggd viewhome id", + "tsl_value": "Group gui desc id", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11245,17 +11245,17 @@ }, { "object": "TranslateField", - "userkey": "aiGroupGuiDescId English", + "userkey": "aiGrantUser English", "item": { "tsl_object": { - "item": {"fld_name": "aiGroupGuiDescId"}, + "item": {"fld_name": "aiGrantUser"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiGroupGuiDescId", + "userkeylabel": "aiGrantUser", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Group gui desc id", + "tsl_value": "Grant user", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11267,17 +11267,17 @@ }, { "object": "TranslateField", - "userkey": "aiGroupGuiDescId French", + "userkey": "aiGrantUser French", "item": { "tsl_object": { - "item": {"fld_name": "aiGroupGuiDescId"}, + "item": {"fld_name": "aiGrantUser"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiGroupGuiDescId", + "userkeylabel": "aiGrantUser", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Group gui desc id", + "tsl_value": "Grant user", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11289,17 +11289,17 @@ }, { "object": "TranslateField", - "userkey": "aiGrantUser English", + "userkey": "aiGroupGuiVirtual English", "item": { "tsl_object": { - "item": {"fld_name": "aiGrantUser"}, + "item": {"fld_name": "aiGroupGuiVirtual"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiGrantUser", + "userkeylabel": "aiGroupGuiVirtual", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Grant user", + "tsl_value": "Group gui virtual", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11311,17 +11311,17 @@ }, { "object": "TranslateField", - "userkey": "aiGrantUser French", + "userkey": "aiGroupGuiVirtual French", "item": { "tsl_object": { - "item": {"fld_name": "aiGrantUser"}, + "item": {"fld_name": "aiGroupGuiVirtual"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiGrantUser", + "userkeylabel": "aiGroupGuiVirtual", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Grant user", + "tsl_value": "Group gui virtual", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11333,17 +11333,17 @@ }, { "object": "TranslateField", - "userkey": "aiGroupGuiVirtual English", + "userkey": "aiGgdLang English", "item": { "tsl_object": { - "item": {"fld_name": "aiGroupGuiVirtual"}, + "item": {"fld_name": "aiGgdLang"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiGroupGuiVirtual", + "userkeylabel": "aiGgdLang", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Group gui virtual", + "tsl_value": "Language", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11355,17 +11355,17 @@ }, { "object": "TranslateField", - "userkey": "aiGroupGuiVirtual French", + "userkey": "aiGgdLang French", "item": { "tsl_object": { - "item": {"fld_name": "aiGroupGuiVirtual"}, + "item": {"fld_name": "aiGgdLang"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiGroupGuiVirtual", + "userkeylabel": "aiGgdLang", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Group gui virtual", + "tsl_value": "Langue", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11553,17 +11553,17 @@ }, { "object": "TranslateField", - "userkey": "aiMhPreview English", + "userkey": "aiMhPrompt English", "item": { "tsl_object": { - "item": {"fld_name": "aiMhPreview"}, + "item": {"fld_name": "aiMhPrompt"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiMhPreview", + "userkeylabel": "aiMhPrompt", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Preview", + "tsl_value": "Title", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11575,17 +11575,17 @@ }, { "object": "TranslateField", - "userkey": "aiMhPreview French", + "userkey": "aiMhPrompt French", "item": { "tsl_object": { - "item": {"fld_name": "aiMhPreview"}, + "item": {"fld_name": "aiMhPrompt"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiMhPreview", + "userkeylabel": "aiMhPrompt", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Preview", + "tsl_value": "Mh prompt", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11597,17 +11597,17 @@ }, { "object": "TranslateField", - "userkey": "aiMhPrompt English", + "userkey": "aiMhSimpleuserId English", "item": { "tsl_object": { - "item": {"fld_name": "aiMhPrompt"}, + "item": {"fld_name": "aiMhSimpleuserId"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiMhPrompt", + "userkeylabel": "aiMhSimpleuserId", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Title", + "tsl_value": "Mh simpleuser id", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11619,17 +11619,17 @@ }, { "object": "TranslateField", - "userkey": "aiMhPrompt French", + "userkey": "aiMhSimpleuserId French", "item": { "tsl_object": { - "item": {"fld_name": "aiMhPrompt"}, + "item": {"fld_name": "aiMhSimpleuserId"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiMhPrompt", + "userkeylabel": "aiMhSimpleuserId", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Mh prompt", + "tsl_value": "Utilisateur", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11641,17 +11641,17 @@ }, { "object": "TranslateField", - "userkey": "aiMhSimpleuserId English", + "userkey": "aiPrvPingUrl English", "item": { "tsl_object": { - "item": {"fld_name": "aiMhSimpleuserId"}, + "item": {"fld_name": "aiPrvPingUrl"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiMhSimpleuserId", + "userkeylabel": "aiPrvPingUrl", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Mh simpleuser id", + "tsl_value": "Ping url", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11663,17 +11663,17 @@ }, { "object": "TranslateField", - "userkey": "aiMhSimpleuserId French", + "userkey": "aiPrvPingUrl French", "item": { "tsl_object": { - "item": {"fld_name": "aiMhSimpleuserId"}, + "item": {"fld_name": "aiPrvPingUrl"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiMhSimpleuserId", + "userkeylabel": "aiPrvPingUrl", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Utilisateur", + "tsl_value": "Ping url", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11729,17 +11729,17 @@ }, { "object": "TranslateField", - "userkey": "aiPrvCompletionUrl English", + "userkey": "aiPrvModelsUrl English", "item": { "tsl_object": { - "item": {"fld_name": "aiPrvCompletionUrl"}, + "item": {"fld_name": "aiPrvModelsUrl"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiPrvCompletionUrl", + "userkeylabel": "aiPrvModelsUrl", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Completion endpoint url", + "tsl_value": "Models url", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11751,17 +11751,17 @@ }, { "object": "TranslateField", - "userkey": "aiPrvCompletionUrl French", + "userkey": "aiPrvModelsUrl French", "item": { "tsl_object": { - "item": {"fld_name": "aiPrvCompletionUrl"}, + "item": {"fld_name": "aiPrvModelsUrl"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiPrvCompletionUrl", + "userkeylabel": "aiPrvModelsUrl", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Completion Url", + "tsl_value": "Models Url", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11817,17 +11817,17 @@ }, { "object": "TranslateField", - "userkey": "aiPrvModelsUrl English", + "userkey": "aiMhPreview English", "item": { "tsl_object": { - "item": {"fld_name": "aiPrvModelsUrl"}, + "item": {"fld_name": "aiMhPreview"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiPrvModelsUrl", + "userkeylabel": "aiMhPreview", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Models url", + "tsl_value": "Preview", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11839,17 +11839,17 @@ }, { "object": "TranslateField", - "userkey": "aiPrvModelsUrl French", + "userkey": "aiMhPreview French", "item": { "tsl_object": { - "item": {"fld_name": "aiPrvModelsUrl"}, + "item": {"fld_name": "aiMhPreview"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiPrvModelsUrl", + "userkeylabel": "aiMhPreview", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Models Url", + "tsl_value": "Preview", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11861,17 +11861,17 @@ }, { "object": "TranslateField", - "userkey": "aiPrvPingUrl English", + "userkey": "aiPrvCompletionUrl English", "item": { "tsl_object": { - "item": {"fld_name": "aiPrvPingUrl"}, + "item": {"fld_name": "aiPrvCompletionUrl"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiPrvPingUrl", + "userkeylabel": "aiPrvCompletionUrl", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Ping url", + "tsl_value": "Completion endpoint url", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11883,17 +11883,17 @@ }, { "object": "TranslateField", - "userkey": "aiPrvPingUrl French", + "userkey": "aiPrvCompletionUrl French", "item": { "tsl_object": { - "item": {"fld_name": "aiPrvPingUrl"}, + "item": {"fld_name": "aiPrvCompletionUrl"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiPrvPingUrl", + "userkeylabel": "aiPrvCompletionUrl", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Ping url", + "tsl_value": "Completion Url", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -12037,17 +12037,17 @@ }, { "object": "TranslateField", - "userkey": "aiPrvUserParameters English", + "userkey": "aiSelectProcess English", "item": { "tsl_object": { - "item": {"fld_name": "aiPrvUserParameters"}, + "item": {"fld_name": "aiSelectProcess"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiPrvUserParameters", + "userkeylabel": "aiSelectProcess", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Prv user parameters", + "tsl_value": "Create new module", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -12059,17 +12059,17 @@ }, { "object": "TranslateField", - "userkey": "aiPrvUserParameters French", + "userkey": "aiSelectProcess French", "item": { "tsl_object": { - "item": {"fld_name": "aiPrvUserParameters"}, + "item": {"fld_name": "aiSelectProcess"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiPrvUserParameters", + "userkeylabel": "aiSelectProcess", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "User Parameters", + "tsl_value": "Créer un module", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -12081,17 +12081,17 @@ }, { "object": "TranslateField", - "userkey": "aiSelectProcess English", + "userkey": "aiPrvUserParameters English", "item": { "tsl_object": { - "item": {"fld_name": "aiSelectProcess"}, + "item": {"fld_name": "aiPrvUserParameters"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiSelectProcess", + "userkeylabel": "aiPrvUserParameters", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Create new module", + "tsl_value": "Prv user parameters", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -12103,17 +12103,17 @@ }, { "object": "TranslateField", - "userkey": "aiSelectProcess French", + "userkey": "aiPrvUserParameters French", "item": { "tsl_object": { - "item": {"fld_name": "aiSelectProcess"}, + "item": {"fld_name": "aiPrvUserParameters"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiSelectProcess", + "userkeylabel": "aiPrvUserParameters", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Créer un module", + "tsl_value": "User Parameters", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -12165,161 +12165,161 @@ }, { "object": "TranslateFieldArea", - "userkey": "AiSettings-1 English", + "userkey": "AiGroupGuiDesc-2 English", "item": { "tsl_object": { - "item": {"ofa_name": "AiSettings-1"}, + "item": {"ofa_name": "AiGroupGuiDesc-2"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AiSettings-1", + "userkeylabel": "AiGroupGuiDesc-2", "object": "ObjectFieldArea" }, "tsl_lang": "ENU", - "tsl_value": "Configuration -1", + "tsl_value": "Group gui desc -2", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AiSettings-1 French", + "userkey": "AiGroupGuiDesc-2 French", "item": { "tsl_object": { - "item": {"ofa_name": "AiSettings-1"}, + "item": {"ofa_name": "AiGroupGuiDesc-2"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AiSettings-1", + "userkeylabel": "AiGroupGuiDesc-2", "object": "ObjectFieldArea" }, "tsl_lang": "FRA", - "tsl_value": "AiConfiguration-1", + "tsl_value": "AiGroupGuiDesc-2", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AiGroupGuiDesc-2 English", + "userkey": "AiGroupView-1 English", "item": { "tsl_object": { - "item": {"ofa_name": "AiGroupGuiDesc-2"}, + "item": {"ofa_name": "AiGroupView-1"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AiGroupGuiDesc-2", + "userkeylabel": "AiGroupView-1", "object": "ObjectFieldArea" }, "tsl_lang": "ENU", - "tsl_value": "Group gui desc -2", + "tsl_value": "AiGroupView-1", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AiGroupGuiDesc-2 French", + "userkey": "AiGroupView-1 French", "item": { "tsl_object": { - "item": {"ofa_name": "AiGroupGuiDesc-2"}, + "item": {"ofa_name": "AiGroupView-1"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AiGroupGuiDesc-2", + "userkeylabel": "AiGroupView-1", "object": "ObjectFieldArea" }, "tsl_lang": "FRA", - "tsl_value": "AiGroupGuiDesc-2", + "tsl_value": "Group view -1", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AiMetricsHist-1 English", + "userkey": "AIProvider-1 English", "item": { "tsl_object": { - "item": {"ofa_name": "AiMetricsHist-1"}, + "item": {"ofa_name": "AIProvider-1"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AiMetricsHist-1", + "userkeylabel": "AIProvider-1", "object": "ObjectFieldArea" }, "tsl_lang": "ENU", - "tsl_value": "Metrics hist -1", + "tsl_value": "Provider -1", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AiMetricsHist-1 French", + "userkey": "AIProvider-1 French", "item": { "tsl_object": { - "item": {"ofa_name": "AiMetricsHist-1"}, + "item": {"ofa_name": "AIProvider-1"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AiMetricsHist-1", + "userkeylabel": "AIProvider-1", "object": "ObjectFieldArea" }, "tsl_lang": "FRA", - "tsl_value": "Metrics", + "tsl_value": "AIProvider-1", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AiGroupView-1 English", + "userkey": "AiMetricsHist-1 English", "item": { "tsl_object": { - "item": {"ofa_name": "AiGroupView-1"}, + "item": {"ofa_name": "AiMetricsHist-1"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AiGroupView-1", + "userkeylabel": "AiMetricsHist-1", "object": "ObjectFieldArea" }, "tsl_lang": "ENU", - "tsl_value": "AiGroupView-1", + "tsl_value": "Metrics hist -1", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AiGroupView-1 French", + "userkey": "AiMetricsHist-1 French", "item": { "tsl_object": { - "item": {"ofa_name": "AiGroupView-1"}, + "item": {"ofa_name": "AiMetricsHist-1"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AiGroupView-1", + "userkeylabel": "AiMetricsHist-1", "object": "ObjectFieldArea" }, "tsl_lang": "FRA", - "tsl_value": "Group view -1", + "tsl_value": "Metrics", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AIModuleIHMDescription-1 English", + "userkey": "AiGroupGuiDesc-1 English", "item": { "tsl_object": { - "item": {"ofa_name": "AIModuleIHMDescription-1"}, + "item": {"ofa_name": "AiGroupGuiDesc-1"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AIModuleIHMDescription-1", + "userkeylabel": "AiGroupGuiDesc-1", "object": "ObjectFieldArea" }, "tsl_lang": "ENU", - "tsl_value": "AIModuleIHMDescription-1", + "tsl_value": "AiGroupGuiDesc-1", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AIModuleIHMDescription-1 French", + "userkey": "AiGroupGuiDesc-1 French", "item": { "tsl_object": { - "item": {"ofa_name": "AIModuleIHMDescription-1"}, + "item": {"ofa_name": "AiGroupGuiDesc-1"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AIModuleIHMDescription-1", + "userkeylabel": "AiGroupGuiDesc-1", "object": "ObjectFieldArea" }, "tsl_lang": "FRA", - "tsl_value": "Module IHMdescription -1", + "tsl_value": "Group gui desc -1", "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -12357,129 +12357,129 @@ }, { "object": "TranslateFieldArea", - "userkey": "AIProvider-1 English", + "userkey": "AIProvider-3 English", "item": { "tsl_object": { - "item": {"ofa_name": "AIProvider-1"}, + "item": {"ofa_name": "AIProvider-3"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AIProvider-1", + "userkeylabel": "AIProvider-3", "object": "ObjectFieldArea" }, "tsl_lang": "ENU", - "tsl_value": "Provider -1", + "tsl_value": "User parameters", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AIProvider-1 French", + "userkey": "AIProvider-3 French", "item": { "tsl_object": { - "item": {"ofa_name": "AIProvider-1"}, + "item": {"ofa_name": "AIProvider-3"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AIProvider-1", + "userkeylabel": "AIProvider-3", "object": "ObjectFieldArea" }, "tsl_lang": "FRA", - "tsl_value": "AIProvider-1", + "tsl_value": "Paramètres de l'utilisateur", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AIProvider-3 English", + "userkey": "AiSettings-1 English", "item": { "tsl_object": { - "item": {"ofa_name": "AIProvider-3"}, + "item": {"ofa_name": "AiSettings-1"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AIProvider-3", + "userkeylabel": "AiSettings-1", "object": "ObjectFieldArea" }, "tsl_lang": "ENU", - "tsl_value": "User parameters", + "tsl_value": "Configuration -1", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AIProvider-3 French", + "userkey": "AiSettings-1 French", "item": { "tsl_object": { - "item": {"ofa_name": "AIProvider-3"}, + "item": {"ofa_name": "AiSettings-1"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AIProvider-3", + "userkeylabel": "AiSettings-1", "object": "ObjectFieldArea" }, "tsl_lang": "FRA", - "tsl_value": "Paramètres de l'utilisateur", + "tsl_value": "AiConfiguration-1", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AiGroupGuiDesc-1 English", + "userkey": "AiSettings-2 English", "item": { "tsl_object": { - "item": {"ofa_name": "AiGroupGuiDesc-1"}, + "item": {"ofa_name": "AiSettings-2"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AiGroupGuiDesc-1", + "userkeylabel": "AiSettings-2", "object": "ObjectFieldArea" }, "tsl_lang": "ENU", - "tsl_value": "AiGroupGuiDesc-1", + "tsl_value": "Settings -2", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AiGroupGuiDesc-1 French", + "userkey": "AiSettings-2 French", "item": { "tsl_object": { - "item": {"ofa_name": "AiGroupGuiDesc-1"}, + "item": {"ofa_name": "AiSettings-2"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AiGroupGuiDesc-1", + "userkeylabel": "AiSettings-2", "object": "ObjectFieldArea" }, "tsl_lang": "FRA", - "tsl_value": "Group gui desc -1", + "tsl_value": "AiSettings-2", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AiSettings-2 English", + "userkey": "AIModuleIHMDescription-1 English", "item": { "tsl_object": { - "item": {"ofa_name": "AiSettings-2"}, + "item": {"ofa_name": "AIModuleIHMDescription-1"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AiSettings-2", + "userkeylabel": "AIModuleIHMDescription-1", "object": "ObjectFieldArea" }, "tsl_lang": "ENU", - "tsl_value": "Settings -2", + "tsl_value": "AIModuleIHMDescription-1", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AiSettings-2 French", + "userkey": "AIModuleIHMDescription-1 French", "item": { "tsl_object": { - "item": {"ofa_name": "AiSettings-2"}, + "item": {"ofa_name": "AIModuleIHMDescription-1"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AiSettings-2", + "userkeylabel": "AIModuleIHMDescription-1", "object": "ObjectFieldArea" }, "tsl_lang": "FRA", - "tsl_value": "AiSettings-2", + "tsl_value": "Module IHMdescription -1", "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -12755,17 +12755,17 @@ }, { "object": "TranslateExternal", - "userkey": "AiMonitoring English", + "userkey": "AIMetricsChat English", "item": { "tsl_object": { - "item": {"obe_name": "AiMonitoring"}, + "item": {"obe_name": "AIMetricsChat"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AiMonitoring", + "userkeylabel": "AIMetricsChat", "object": "ObjectExternal" }, "tsl_lang": "ENU", - "tsl_value": "Monitoring", + "tsl_value": "AI powered charts", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -12773,17 +12773,17 @@ }, { "object": "TranslateExternal", - "userkey": "AiMonitoring French", + "userkey": "AIMetricsChat French", "item": { "tsl_object": { - "item": {"obe_name": "AiMonitoring"}, + "item": {"obe_name": "AIMetricsChat"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AiMonitoring", + "userkeylabel": "AIMetricsChat", "object": "ObjectExternal" }, "tsl_lang": "FRA", - "tsl_value": "Monitoring", + "tsl_value": "Graphiques alimentés par l'IA", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -12791,17 +12791,17 @@ }, { "object": "TranslateExternal", - "userkey": "AIProcessResource English", + "userkey": "AIExpTool English", "item": { "tsl_object": { - "item": {"obe_name": "AIProcessResource"}, + "item": {"obe_name": "AIExpTool"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIProcessResource", + "userkeylabel": "AIExpTool", "object": "ObjectExternal" }, "tsl_lang": "ENU", - "tsl_value": "Process resource", + "tsl_value": "Example tools", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -12809,17 +12809,17 @@ }, { "object": "TranslateExternal", - "userkey": "AIProcessResource French", + "userkey": "AIExpTool French", "item": { "tsl_object": { - "item": {"obe_name": "AIProcessResource"}, + "item": {"obe_name": "AIExpTool"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIProcessResource", + "userkeylabel": "AIExpTool", "object": "ObjectExternal" }, "tsl_lang": "FRA", - "tsl_value": "Ressources du processus", + "tsl_value": "Exemples d'outils", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -12827,17 +12827,17 @@ }, { "object": "TranslateExternal", - "userkey": "AIExpTool English", + "userkey": "AiMonitoring English", "item": { "tsl_object": { - "item": {"obe_name": "AIExpTool"}, + "item": {"obe_name": "AiMonitoring"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIExpTool", + "userkeylabel": "AiMonitoring", "object": "ObjectExternal" }, "tsl_lang": "ENU", - "tsl_value": "Example tools", + "tsl_value": "Monitoring", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -12845,17 +12845,17 @@ }, { "object": "TranslateExternal", - "userkey": "AIExpTool French", + "userkey": "AiMonitoring French", "item": { "tsl_object": { - "item": {"obe_name": "AIExpTool"}, + "item": {"obe_name": "AiMonitoring"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIExpTool", + "userkeylabel": "AiMonitoring", "object": "ObjectExternal" }, "tsl_lang": "FRA", - "tsl_value": "Exemples d'outils", + "tsl_value": "Monitoring", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -12863,17 +12863,17 @@ }, { "object": "TranslateExternal", - "userkey": "AIMetricsChat English", + "userkey": "AIProcessResource English", "item": { "tsl_object": { - "item": {"obe_name": "AIMetricsChat"}, + "item": {"obe_name": "AIProcessResource"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIMetricsChat", + "userkeylabel": "AIProcessResource", "object": "ObjectExternal" }, "tsl_lang": "ENU", - "tsl_value": "AI powered charts", + "tsl_value": "Process resource", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -12881,17 +12881,17 @@ }, { "object": "TranslateExternal", - "userkey": "AIMetricsChat French", + "userkey": "AIProcessResource French", "item": { "tsl_object": { - "item": {"obe_name": "AIMetricsChat"}, + "item": {"obe_name": "AIProcessResource"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIMetricsChat", + "userkeylabel": "AIProcessResource", "object": "ObjectExternal" }, "tsl_lang": "FRA", - "tsl_value": "Graphiques alimentés par l'IA", + "tsl_value": "Ressources du processus", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -12899,17 +12899,17 @@ }, { "object": "TranslateExternal", - "userkey": "AIPromptTool English", + "userkey": "AIRestAPI English", "item": { "tsl_object": { - "item": {"obe_name": "AIPromptTool"}, + "item": {"obe_name": "AIRestAPI"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIPromptTool", + "userkeylabel": "AIRestAPI", "object": "ObjectExternal" }, "tsl_lang": "ENU", - "tsl_value": "Prompt tool", + "tsl_value": "Rest API", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -12917,17 +12917,17 @@ }, { "object": "TranslateExternal", - "userkey": "AIPromptTool French", + "userkey": "AIRestAPI French", "item": { "tsl_object": { - "item": {"obe_name": "AIPromptTool"}, + "item": {"obe_name": "AIRestAPI"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIPromptTool", + "userkeylabel": "AIRestAPI", "object": "ObjectExternal" }, "tsl_lang": "FRA", - "tsl_value": "Outil d'invite", + "tsl_value": "Rest API", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -12971,17 +12971,17 @@ }, { "object": "TranslateExternal", - "userkey": "AIRestAPI English", + "userkey": "AIPromptTool English", "item": { "tsl_object": { - "item": {"obe_name": "AIRestAPI"}, + "item": {"obe_name": "AIPromptTool"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIRestAPI", + "userkeylabel": "AIPromptTool", "object": "ObjectExternal" }, "tsl_lang": "ENU", - "tsl_value": "Rest API", + "tsl_value": "Prompt tool", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -12989,17 +12989,17 @@ }, { "object": "TranslateExternal", - "userkey": "AIRestAPI French", + "userkey": "AIPromptTool French", "item": { "tsl_object": { - "item": {"obe_name": "AIRestAPI"}, + "item": {"obe_name": "AIPromptTool"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIRestAPI", + "userkeylabel": "AIPromptTool", "object": "ObjectExternal" }, "tsl_lang": "FRA", - "tsl_value": "Rest API", + "tsl_value": "Outil d'invite", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -13189,69 +13189,69 @@ }, { "object": "TranslateView", - "userkey": "AIscope English", + "userkey": "AIViewExpTool English", "item": { "tsl_object": { - "item": {"viw_name": "AIscope"}, + "item": {"viw_name": "AIViewExpTool"}, "icon": "img/system/view", "label": "View", - "userkeylabel": "AIscope", + "userkeylabel": "AIViewExpTool", "object": "View" }, "tsl_lang": "ENU", - "tsl_value": "AI Simplicité Administrator", - "tsl_help": "

Global management of platform, user rights and applications with AI<\/p>", + "tsl_value": "AI Tool", + "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateView", - "userkey": "AIscope French", + "userkey": "AIViewExpTool French", "item": { "tsl_object": { - "item": {"viw_name": "AIscope"}, + "item": {"viw_name": "AIViewExpTool"}, "icon": "img/system/view", "label": "View", - "userkeylabel": "AIscope", + "userkeylabel": "AIViewExpTool", "object": "View" }, "tsl_lang": "FRA", - "tsl_value": "IA Administrateur Simplicité", - "tsl_help": "

Gestion globale de la plateforme, des droits et des applications avec IA<\/p>", + "tsl_value": "Outils IA", + "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateView", - "userkey": "AIViewExpTool English", + "userkey": "AIscope English", "item": { "tsl_object": { - "item": {"viw_name": "AIViewExpTool"}, + "item": {"viw_name": "AIscope"}, "icon": "img/system/view", "label": "View", - "userkeylabel": "AIViewExpTool", + "userkeylabel": "AIscope", "object": "View" }, "tsl_lang": "ENU", - "tsl_value": "AI Tool", - "tsl_help": null, + "tsl_value": "AI Simplicité Administrator", + "tsl_help": "

Global management of platform, user rights and applications with AI<\/p>", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateView", - "userkey": "AIViewExpTool French", + "userkey": "AIscope French", "item": { "tsl_object": { - "item": {"viw_name": "AIViewExpTool"}, + "item": {"viw_name": "AIscope"}, "icon": "img/system/view", "label": "View", - "userkeylabel": "AIViewExpTool", + "userkeylabel": "AIscope", "object": "View" }, "tsl_lang": "FRA", - "tsl_value": "Outils IA", - "tsl_help": null, + "tsl_value": "IA Administrateur Simplicité", + "tsl_help": "

Gestion globale de la plateforme, des droits et des applications avec IA<\/p>", "row_module_id__mdl_name": "AIBySimplicite" } } @@ -13263,44 +13263,6 @@ "icon": "img/system/translation", "field": "row_module_id", "list": [ - { - "object": "TranslateActivity", - "userkey": "AIGenData GDD_SETTINGS_END English", - "item": { - "tsl_object": { - "item": { - "acy_process_id__pcs_name": "AIGenData", - "acy_step": "GDD_SETTINGS_END" - }, - "icon": "img/system/activity", - "label": "Activity", - "userkeylabel": "AIGenData GDD_SETTINGS_END", - "object": "BPMActivity" - }, - "tsl_lang": "ENU", - "tsl_value": "Go to Settings", - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "TranslateActivity", - "userkey": "AIGenData GDD_SETTINGS_END French", - "item": { - "tsl_object": { - "item": { - "acy_process_id__pcs_name": "AIGenData", - "acy_step": "GDD_SETTINGS_END" - }, - "icon": "img/system/activity", - "label": "Activity", - "userkeylabel": "AIGenData GDD_SETTINGS_END", - "object": "BPMActivity" - }, - "tsl_lang": "FRA", - "tsl_value": "Accéder aux paramètres", - "row_module_id__mdl_name": "AIBySimplicite" - } - }, { "object": "TranslateActivity", "userkey": "AIGenData GGD-BEG English", @@ -13341,39 +13303,39 @@ }, { "object": "TranslateActivity", - "userkey": "AIGenData GGD-END English", + "userkey": "AIGenData GDD_SETTINGS_END English", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIGenData", - "acy_step": "GGD-END" + "acy_step": "GDD_SETTINGS_END" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIGenData GGD-END", + "userkeylabel": "AIGenData GDD_SETTINGS_END", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "End", + "tsl_value": "Go to Settings", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIGenData GGD-END French", + "userkey": "AIGenData GDD_SETTINGS_END French", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIGenData", - "acy_step": "GGD-END" + "acy_step": "GDD_SETTINGS_END" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIGenData GGD-END", + "userkeylabel": "AIGenData GDD_SETTINGS_END", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "End", + "tsl_value": "Accéder aux paramètres", "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -13417,77 +13379,77 @@ }, { "object": "TranslateActivity", - "userkey": "AIGenData GGD_0100 English", + "userkey": "AIGenData GGD-END English", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIGenData", - "acy_step": "GGD_0100" + "acy_step": "GGD-END" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIGenData GGD_0100", + "userkeylabel": "AIGenData GGD-END", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Select module", + "tsl_value": "End", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIGenData GGD_0100 French", + "userkey": "AIGenData GGD-END French", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIGenData", - "acy_step": "GGD_0100" + "acy_step": "GGD-END" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIGenData GGD_0100", + "userkeylabel": "AIGenData GGD-END", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Séléction du module", + "tsl_value": "End", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIGenData GGD_0075 English", + "userkey": "AIModuleCreate AIC-END English", "item": { "tsl_object": { "item": { - "acy_process_id__pcs_name": "AIGenData", - "acy_step": "GGD_0075" + "acy_process_id__pcs_name": "AIModuleCreate", + "acy_step": "AIC-END" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIGenData GGD_0075", + "userkeylabel": "AIModuleCreate AIC-END", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Data cannot be generated", + "tsl_value": "End", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIGenData GGD_0075 French", + "userkey": "AIModuleCreate AIC-END French", "item": { "tsl_object": { "item": { - "acy_process_id__pcs_name": "AIGenData", - "acy_step": "GGD_0075" + "acy_process_id__pcs_name": "AIModuleCreate", + "acy_step": "AIC-END" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIGenData GGD_0075", + "userkeylabel": "AIModuleCreate AIC-END", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Génération de données impossible", + "tsl_value": "Fin", "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -13531,77 +13493,77 @@ }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC-END English", + "userkey": "AIGenData GGD_0200 English", "item": { "tsl_object": { "item": { - "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC-END" + "acy_process_id__pcs_name": "AIGenData", + "acy_step": "GGD_0200" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC-END", + "userkeylabel": "AIGenData GGD_0200", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "End", + "tsl_value": "Data generation", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC-END French", + "userkey": "AIGenData GGD_0200 French", "item": { "tsl_object": { "item": { - "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC-END" + "acy_process_id__pcs_name": "AIGenData", + "acy_step": "GGD_0200" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC-END", + "userkeylabel": "AIGenData GGD_0200", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Fin", + "tsl_value": "Génération des données", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIGenData GGD_0200 English", + "userkey": "AIGenData GGD_0100 English", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIGenData", - "acy_step": "GGD_0200" + "acy_step": "GGD_0100" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIGenData GGD_0200", + "userkeylabel": "AIGenData GGD_0100", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Data generation", + "tsl_value": "Select module", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIGenData GGD_0200 French", + "userkey": "AIGenData GGD_0100 French", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIGenData", - "acy_step": "GGD_0200" + "acy_step": "GGD_0100" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIGenData GGD_0200", + "userkeylabel": "AIGenData GGD_0100", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Génération des données", + "tsl_value": "Séléction du module", "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -13673,11 +13635,49 @@ }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0005", + "userkeylabel": "AIModuleCreate AIC_0005", + "object": "BPMActivity" + }, + "tsl_lang": "FRA", + "tsl_value": "Créer ou mettre à jour module", + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "TranslateActivity", + "userkey": "AIGenData GGD_0075 English", + "item": { + "tsl_object": { + "item": { + "acy_process_id__pcs_name": "AIGenData", + "acy_step": "GGD_0075" + }, + "icon": "img/system/activity", + "label": "Activity", + "userkeylabel": "AIGenData GGD_0075", + "object": "BPMActivity" + }, + "tsl_lang": "ENU", + "tsl_value": "Data cannot be generated", + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "TranslateActivity", + "userkey": "AIGenData GGD_0075 French", + "item": { + "tsl_object": { + "item": { + "acy_process_id__pcs_name": "AIGenData", + "acy_step": "GGD_0075" + }, + "icon": "img/system/activity", + "label": "Activity", + "userkeylabel": "AIGenData GGD_0075", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Créer ou mettre à jour module", + "tsl_value": "Génération de données impossible", "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -13721,115 +13721,115 @@ }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0015 English", + "userkey": "AIModuleCreate AIC_0020 English", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0015" + "acy_step": "AIC_0020" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0015", + "userkeylabel": "AIModuleCreate AIC_0020", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Translate Domain", + "tsl_value": "Grant your user to the generated group?", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0015 French", + "userkey": "AIModuleCreate AIC_0020 French", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0015" + "acy_step": "AIC_0020" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0015", + "userkeylabel": "AIModuleCreate AIC_0020", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Traduire le domaine", + "tsl_value": "Habiliter votre utilisateur au groupe généré?", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0020 English", + "userkey": "AIModuleCreate AIC_0015 English", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0020" + "acy_step": "AIC_0015" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0020", + "userkeylabel": "AIModuleCreate AIC_0015", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Grant your user to the generated group?", + "tsl_value": "Translate Domain", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0020 French", + "userkey": "AIModuleCreate AIC_0015 French", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0020" + "acy_step": "AIC_0015" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0020", + "userkeylabel": "AIModuleCreate AIC_0015", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Habiliter votre utilisateur au groupe généré?", + "tsl_value": "Traduire le domaine", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0050 English", + "userkey": "AIModuleCreate AIC_0200 English", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0050" + "acy_step": "AIC_0200" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0050", + "userkeylabel": "AIModuleCreate AIC_0200", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Is param", + "tsl_value": "Select groups", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0050 French", + "userkey": "AIModuleCreate AIC_0200 French", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0050" + "acy_step": "AIC_0200" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0050", + "userkeylabel": "AIModuleCreate AIC_0200", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Is param", + "tsl_value": "Sélectionner les groupes", "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -13873,115 +13873,115 @@ }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0075 English", + "userkey": "AIModuleCreate AIC_0050 English", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0075" + "acy_step": "AIC_0050" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0075", + "userkeylabel": "AIModuleCreate AIC_0050", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Module cannot be generated", + "tsl_value": "Is param", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0075 French", + "userkey": "AIModuleCreate AIC_0050 French", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0075" + "acy_step": "AIC_0050" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0075", + "userkeylabel": "AIModuleCreate AIC_0050", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Génération du module impossible", + "tsl_value": "Is param", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0100 English", + "userkey": "AIModuleCreate AIC_0075 English", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0100" + "acy_step": "AIC_0075" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0100", + "userkeylabel": "AIModuleCreate AIC_0075", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Select module", + "tsl_value": "Module cannot be generated", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0100 French", + "userkey": "AIModuleCreate AIC_0075 French", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0100" + "acy_step": "AIC_0075" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0100", + "userkeylabel": "AIModuleCreate AIC_0075", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Sélectionner un module", + "tsl_value": "Génération du module impossible", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0200 English", + "userkey": "AIModuleCreate AIC_0400 English", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0200" + "acy_step": "AIC_0400" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0200", + "userkeylabel": "AIModuleCreate AIC_0400", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Select groups", + "tsl_value": "Specifications", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0200 French", + "userkey": "AIModuleCreate AIC_0400 French", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0200" + "acy_step": "AIC_0400" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0200", + "userkeylabel": "AIModuleCreate AIC_0400", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Sélectionner les groupes", + "tsl_value": "Cahier des charges", "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -14063,39 +14063,39 @@ }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0400 English", + "userkey": "AIModuleCreate AIC_0100 English", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0400" + "acy_step": "AIC_0100" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0400", + "userkeylabel": "AIModuleCreate AIC_0100", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Specifications", + "tsl_value": "Select module", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0400 French", + "userkey": "AIModuleCreate AIC_0100 French", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0400" + "acy_step": "AIC_0100" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0400", + "userkeylabel": "AIModuleCreate AIC_0100", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Cahier des charges", + "tsl_value": "Sélectionner un module", "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -14215,115 +14215,115 @@ }, { "object": "TranslateActivity", - "userkey": "AiSettingsProcess ASP-0100 English", + "userkey": "AiSettingsProcess ASP-0050 English", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AiSettingsProcess", - "acy_step": "ASP-0100" + "acy_step": "ASP-0050" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AiSettingsProcess ASP-0100", + "userkeylabel": "AiSettingsProcess ASP-0050", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Select provider", + "tsl_value": "Is global param", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AiSettingsProcess ASP-0100 French", + "userkey": "AiSettingsProcess ASP-0050 French", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AiSettingsProcess", - "acy_step": "ASP-0100" + "acy_step": "ASP-0050" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AiSettingsProcess ASP-0100", + "userkeylabel": "AiSettingsProcess ASP-0050", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Editeur", + "tsl_value": "Is global param", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AiSettingsProcess ASP-0050 English", + "userkey": "AiSettingsProcess ASP-0075 English", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AiSettingsProcess", - "acy_step": "ASP-0050" + "acy_step": "ASP-0075" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AiSettingsProcess ASP-0050", + "userkeylabel": "AiSettingsProcess ASP-0075", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Is global param", + "tsl_value": "Warning", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AiSettingsProcess ASP-0050 French", + "userkey": "AiSettingsProcess ASP-0075 French", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AiSettingsProcess", - "acy_step": "ASP-0050" + "acy_step": "ASP-0075" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AiSettingsProcess ASP-0050", + "userkeylabel": "AiSettingsProcess ASP-0075", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Is global param", + "tsl_value": "Avertissement", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AiSettingsProcess ASP-0075 English", + "userkey": "AiSettingsProcess ASP-0100 English", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AiSettingsProcess", - "acy_step": "ASP-0075" + "acy_step": "ASP-0100" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AiSettingsProcess ASP-0075", + "userkeylabel": "AiSettingsProcess ASP-0100", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Warning", + "tsl_value": "Select provider", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AiSettingsProcess ASP-0075 French", + "userkey": "AiSettingsProcess ASP-0100 French", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AiSettingsProcess", - "acy_step": "ASP-0075" + "acy_step": "ASP-0100" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AiSettingsProcess ASP-0075", + "userkeylabel": "AiSettingsProcess ASP-0100", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Avertissement", + "tsl_value": "Editeur", "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -14367,77 +14367,77 @@ }, { "object": "TranslateActivity", - "userkey": "AiSettingsProcess ASP-0500 English", + "userkey": "AiSettingsProcess ASP-0200 English", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AiSettingsProcess", - "acy_step": "ASP-0500" + "acy_step": "ASP-0200" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AiSettingsProcess ASP-0500", + "userkeylabel": "AiSettingsProcess ASP-0200", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Add the chatbot to your header ?", + "tsl_value": "Authentication", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AiSettingsProcess ASP-0500 French", + "userkey": "AiSettingsProcess ASP-0200 French", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AiSettingsProcess", - "acy_step": "ASP-0500" + "acy_step": "ASP-0200" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AiSettingsProcess ASP-0500", + "userkeylabel": "AiSettingsProcess ASP-0200", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Ajoutez le chatbot à votre en-tête ?", + "tsl_value": "Authentification", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AiSettingsProcess ASP-0200 English", + "userkey": "AiSettingsProcess ASP-0500 English", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AiSettingsProcess", - "acy_step": "ASP-0200" + "acy_step": "ASP-0500" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AiSettingsProcess ASP-0200", + "userkeylabel": "AiSettingsProcess ASP-0500", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Authentication", + "tsl_value": "Add the chatbot to your header ?", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AiSettingsProcess ASP-0200 French", + "userkey": "AiSettingsProcess ASP-0500 French", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AiSettingsProcess", - "acy_step": "ASP-0200" + "acy_step": "ASP-0500" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AiSettingsProcess ASP-0200", + "userkeylabel": "AiSettingsProcess ASP-0500", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Authentification", + "tsl_value": "Ajoutez le chatbot à votre en-tête ?", "row_module_id__mdl_name": "AIBySimplicite" } }, @@ -14847,14 +14847,14 @@ }, { "object": "Permission", - "userkey": "AI_DESIGNER AIPromptTool", + "userkey": "AI_DESIGNER AIRestAPI", "item": { "prm_group_id__grp_name": "AI_DESIGNER", "prm_object": { - "item": {"obe_name": "AIPromptTool"}, + "item": {"obe_name": "AIRestAPI"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIPromptTool", + "userkeylabel": "AIRestAPI", "object": "ObjectExternal" }, "prm_perm": true, @@ -14887,14 +14887,14 @@ }, { "object": "Permission", - "userkey": "AI_DESIGNER AIRestAPI", + "userkey": "AI_DESIGNER AIPromptTool", "item": { "prm_group_id__grp_name": "AI_DESIGNER", "prm_object": { - "item": {"obe_name": "AIRestAPI"}, + "item": {"obe_name": "AIPromptTool"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIRestAPI", + "userkeylabel": "AIPromptTool", "object": "ObjectExternal" }, "prm_perm": true, @@ -14913,6 +14913,23 @@ "icon": "img/system/state_transition_permission", "field": "row_module_id", "list": [ + { + "object": "PermGroup", + "userkey": "PUBLIC AI_BUSINESS AIChatBot", + "item": { + "pmg_group_id__grp_name": "PUBLIC", + "pmg_perm_id__prm_group_id__grp_name": "AI_BUSINESS", + "pmg_perm_id__prm_object": { + "item": {"obe_name": "AIChatBot"}, + "icon": "img/system/external_object", + "label": "External object", + "userkeylabel": "AIChatBot", + "object": "ObjectExternal" + }, + "pmg_perm_id__prm_prop": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, { "object": "PermGroup", "userkey": "AI_DESIGNER AI_BUSINESS AIBot", @@ -14949,9 +14966,9 @@ }, { "object": "PermGroup", - "userkey": "PUBLIC AI_BUSINESS AIChatBot", + "userkey": "AI_DESIGNER AI_BUSINESS AIChatBot", "item": { - "pmg_group_id__grp_name": "PUBLIC", + "pmg_group_id__grp_name": "AI_DESIGNER", "pmg_perm_id__prm_group_id__grp_name": "AI_BUSINESS", "pmg_perm_id__prm_object": { "item": {"obe_name": "AIChatBot"}, @@ -14966,15 +14983,15 @@ }, { "object": "PermGroup", - "userkey": "AI_DESIGNER AI_BUSINESS AIChatBot", + "userkey": "AI_DESIGNER AI_ADMIN AiMonitoring", "item": { "pmg_group_id__grp_name": "AI_DESIGNER", - "pmg_perm_id__prm_group_id__grp_name": "AI_BUSINESS", + "pmg_perm_id__prm_group_id__grp_name": "AI_ADMIN", "pmg_perm_id__prm_object": { - "item": {"obe_name": "AIChatBot"}, + "item": {"obe_name": "AiMonitoring"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIChatBot", + "userkeylabel": "AiMonitoring", "object": "ObjectExternal" }, "pmg_perm_id__prm_prop": null, @@ -15014,23 +15031,6 @@ "pmg_perm_id__prm_prop": null, "row_module_id__mdl_name": "AIBySimplicite" } - }, - { - "object": "PermGroup", - "userkey": "AI_DESIGNER AI_ADMIN AiMonitoring", - "item": { - "pmg_group_id__grp_name": "AI_DESIGNER", - "pmg_perm_id__prm_group_id__grp_name": "AI_ADMIN", - "pmg_perm_id__prm_object": { - "item": {"obe_name": "AiMonitoring"}, - "icon": "img/system/external_object", - "label": "External object", - "userkeylabel": "AiMonitoring", - "object": "ObjectExternal" - }, - "pmg_perm_id__prm_prop": null, - "row_module_id__mdl_name": "AIBySimplicite" - } } ] } diff --git a/BUILD.md b/BUILD.md index 15731ae..fc1d59a 100644 --- a/BUILD.md +++ b/BUILD.md @@ -8,7 +8,14 @@ Build ----- ``` text -mvn -U -DskipTests=true clean package +mvn clean package +``` + +Javadoc +------- + +``` text +mvn javadoc:javadoc ``` Sonar analysis diff --git a/module-info.json b/module-info.json index abf8513..19a1a3b 100644 --- a/module-info.json +++ b/module-info.json @@ -1,9 +1,9 @@ { - "date": "2025-02-24 10:17:59", + "date": "2025-04-29 09:40:54", "name": "AIBySimplicite", "format": "json", "files": ["AIBySimplicite.json"], "repository": {"origin": {"uri": "https://github.com/simplicitesoftware/module_ai.git"}}, "version": "0.30", - "platform": "6.2.2" + "platform": "6.2.8" } \ No newline at end of file diff --git a/pom.xml b/pom.xml index dae571e..70e5983 100644 --- a/pom.xml +++ b/pom.xml @@ -13,10 +13,12 @@ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ Simplicite module: AIBySimplicite UTF-8 - https://dgddidev.dev2.simplicite.io + https://cbirec.demo.simplicite.io 6.2-SNAPSHOT 17 17 + full + true simplicite-modules-AIBySimplicite AIBySimplicite 0.30 diff --git a/src/com/simplicite/commons/AIBySimplicite/AITools.java b/src/com/simplicite/commons/AIBySimplicite/AITools.java index da905e0..c68be1c 100644 --- a/src/com/simplicite/commons/AIBySimplicite/AITools.java +++ b/src/com/simplicite/commons/AIBySimplicite/AITools.java @@ -78,7 +78,7 @@ public class AITools implements java.io.Serializable { private static final String SYS_CODE = "sys_code"; private static final String SYS_VAL2 = "sys_value2"; - private static final String DEFAULT_MODULE = "Application"; + private static final String DEFAULT_MODULE = "System"; private static final String ROW_MLD_ID = "row_module_id"; public static final String PING_SUCCESS = "200"; From b171b2b1afdd4c7db294183cd80431af34864bea Mon Sep 17 00:00:00 2001 From: "cbi (Candice Bimont)" Date: Wed, 18 Jun 2025 14:25:22 +0000 Subject: [PATCH 74/74] genData Add a step to define the number of items to generate --- AIBySimplicite-openapi-3.0.2.yml | 4 +- AIBySimplicite-swagger-2.0.yml | 4 +- AIBySimplicite.json | 2756 +++++++++-------- README.md | 1 + files/Model/Model-AIGenData.png | Bin 34597 -> 38982 bytes files/Model/Model-AIGenData.svg | 2 +- module-info.json | 6 +- package.json | 2 +- pom.xml | 8 +- .../commons/AIBySimplicite/AIData.java | 37 +- .../commons/AIBySimplicite/AITools.java | 3 + .../workflows/AIBySimplicite/AIGenData.java | 47 +- .../AIBySimplicite/AiSettingsProcess.java | 1 + 13 files changed, 1537 insertions(+), 1334 deletions(-) diff --git a/AIBySimplicite-openapi-3.0.2.yml b/AIBySimplicite-openapi-3.0.2.yml index 5799f79..1622905 100644 --- a/AIBySimplicite-openapi-3.0.2.yml +++ b/AIBySimplicite-openapi-3.0.2.yml @@ -2,7 +2,7 @@ # / __(_)_ __ _ __| (_)__(_) |_ /_/ # \__ \ | ' \| '_ \ | / _| | _/ -_) # |___/_|_|_|_| .__/_|_\__|_|\__\___| -# |_| Module: AIBySimplicite 0.30 +# |_| Module: AIBySimplicite 0.31 components: schemas: Error404: @@ -1534,7 +1534,7 @@ info: email: contact@simplicitesoftware.com description: API for module AIBySimplicite title: AIBySimplicite - version: '0.30' + version: '0.31' tags: - name: AiGroupGuiDesc description: Group gui description diff --git a/AIBySimplicite-swagger-2.0.yml b/AIBySimplicite-swagger-2.0.yml index e305b33..9c7f9eb 100644 --- a/AIBySimplicite-swagger-2.0.yml +++ b/AIBySimplicite-swagger-2.0.yml @@ -2,7 +2,7 @@ # / __(_)_ __ _ __| (_)__(_) |_ /_/ # \__ \ | ' \| '_ \ | / _| | _/ -_) # |___/_|_|_|_| .__/_|_\__|_|\__\___| -# |_| Module: AIBySimplicite 0.30 +# |_| Module: AIBySimplicite 0.31 basePath: /api paths: /rest/AiMetricsHist: @@ -1335,7 +1335,7 @@ info: email: contact@simplicitesoftware.com description: API for module AIBySimplicite title: AIBySimplicite - version: '0.30' + version: '0.31' tags: - name: AiGroupGuiDesc description: Group gui description diff --git a/AIBySimplicite.json b/AIBySimplicite.json index c3de74c..2f40d68 100644 --- a/AIBySimplicite.json +++ b/AIBySimplicite.json @@ -4,7 +4,7 @@ "item": { "mdl_name": "AIBySimplicite", "mdl_prefix": "ai", - "mdl_version": "0.30", + "mdl_version": "0.31", "mdl_type": "T", "mdl_icon": null, "mdl_url": "{\n \"origin\": {\"uri\": \"https://github.com/simplicitesoftware/module_ai.git\"},\n \"type\": \"git\",\n \"branch\": \"6.2\"\n}", @@ -136,7 +136,7 @@ "mod_doc": { "path": "files/Model/Model-AIGenData.svg", "mime": "image/svg+xml", - "name": "Model-AIGenData.svg" + "name": "model.svg" }, "mod_image": { "path": "files/Model/Model-AIGenData.png", @@ -231,22 +231,6 @@ } }] }, - { - "object": "UserSysParam", - "label": "User parameter", - "icon": "img/system/system_param", - "field": "row_module_id", - "list": [{ - "object": "UserSysParam", - "userkey": "AIUserAPI FORCE_CHANGE_PASSWORD", - "item": { - "usp_user_id__usr_login": "AIUserAPI", - "usp_param_id__sys_code": "FORCE_CHANGE_PASSWORD", - "usp_value": "yes", - "row_module_id__mdl_name": "AIBySimplicite" - } - }] - }, { "object": "Group", "label": "Groups", @@ -311,7 +295,7 @@ "list": [ { "object": "Profile", - "userkey": "AI_ADMIN AI_DESIGNER", + "userkey": "AI_ADMIN~AI_DESIGNER", "item": { "prf_profile_id__grp_name": "AI_ADMIN", "prf_group_id__grp_name": "AI_DESIGNER", @@ -320,7 +304,7 @@ }, { "object": "Profile", - "userkey": "AI_DESIGNER ADMIN", + "userkey": "AI_DESIGNER~ADMIN", "item": { "prf_profile_id__grp_name": "AI_DESIGNER", "prf_group_id__grp_name": "ADMIN", @@ -329,7 +313,7 @@ }, { "object": "Profile", - "userkey": "AI_DESIGNER AI_BUSINESS", + "userkey": "AI_DESIGNER~AI_BUSINESS", "item": { "prf_profile_id__grp_name": "AI_DESIGNER", "prf_group_id__grp_name": "AI_BUSINESS", @@ -338,7 +322,7 @@ }, { "object": "Profile", - "userkey": "DESIGNER AI_DESIGNER", + "userkey": "DESIGNER~AI_DESIGNER", "item": { "prf_profile_id__grp_name": "DESIGNER", "prf_group_id__grp_name": "AI_DESIGNER", @@ -347,7 +331,7 @@ }, { "object": "Profile", - "userkey": "GRANT_ADMIN AI_BUSINESS", + "userkey": "GRANT_ADMIN~AI_BUSINESS", "item": { "prf_profile_id__grp_name": "GRANT_ADMIN", "prf_group_id__grp_name": "AI_BUSINESS", @@ -363,7 +347,7 @@ "field": "row_module_id", "list": [{ "object": "Responsability", - "userkey": "designer AI_DESIGNER 02/18/2025", + "userkey": "designer~AI_DESIGNER~2025-02-18", "item": { "rsp_login_id__usr_login": "designer", "rsp_group_id__grp_name": "AI_DESIGNER", @@ -402,12 +386,12 @@ "list": [ { "object": "ListOfValue", - "userkey": "TEXT AI_DEFAULT_PARAM *", + "userkey": "TEXT~AI_DEFAULT_PARAM~ANY", "item": { "lov_name": "TEXT", "lov_code": "AI_DEFAULT_PARAM", "lov_lang": "ANY", - "lov_value": "{\n \"bot_name\": {\n \"type\": \"text\",\n \"defaultValue\": \"George\",\n \"help\": \"The name of the bot that will be displayed to users.\",\n \"label\": {\n \"FRA\": \"Nom du bot\",\n \"ENU\": \"Bot Name\"\n },\n \"left_column\": true\n },\n \"data_number\": {\n \"type\": \"text\",\n \"defaultValue\": \"5\",\n \"help\": \"The amount of data per object requested from the AI.\",\n \"label\": {\n \"FRA\": \"Nombre de données à générer\",\n \"ENU\": \"Number of data to generate\"\n },\n \"left_column\": true\n },\n \"code_max_token\": {\n \"type\": \"text\",\n \"defaultValue\": \"2000\",\n \"help\": \"The maximum number of tokens the bot can handle for all technical calls, including chart and modules generation.\",\n \"label\": {\n \"FRA\": \"Nombre maximum de jetons pour appels techniques\",\n \"ENU\": \"Max Token for Technical Calls\"\n }\n },\n \"default_max_token\": {\n \"type\": \"text\",\n \"defaultValue\": \"1500\",\n \"help\": \"The maximum number of tokens the bot can handle by default for each interaction.\",\n \"label\": {\n \"FRA\": \"Nombre maximum de jetons par défaut\",\n \"ENU\": \"Default Max Token\"\n }\n },\n \"hist_depth\": {\n \"type\": \"text\",\n \"defaultValue\": \"3\",\n \"help\": \"The number of previous messages the bot will consider when generating a new response.\",\n \"label\": {\n \"FRA\": \"Profondeur de l'historique\",\n \"ENU\": \"History Depth\"\n },\n \"left_column\": true\n },\n \"provider\": {\n \"type\": \"text\",\n \"defaultValue\": \"\",\n \"help\": \"Name of the model provider, used in the data disclaimer.\",\n \"label\": {\n \"FRA\": \"Fournisseur\",\n \"ENU\": \"Provider\"\n },\n \"left_column\": true\n },\n \"showDataDisclaimer\": {\n \"type\": \"boolean\",\n \"defaultValue\": true,\n \"help\": \"Indicates whether the data disclaimer should be shown to users.\",\n \"label\": {\n \"FRA\": \"Afficher la clause de non-responsabilité des données\",\n \"ENU\": \"Show Data Disclaimer\"\n },\n \"left_column\": true\n },\n \"model\": {\n \"type\": \"select\",\n \"defaultValue\": \"\",\n \"help\": \"Select the AI model to use for interactions.\",\n \"label\": {\n \"FRA\": \"Modèle\",\n \"ENU\": \"Model\"\n },\n \"left_column\": true\n },\n \"api_key\": {\n \"type\": \"text\",\n \"defaultValue\": \"\",\n \"help\": \"API key used to authenticate requests to the AI server.\",\n \"label\": {\n \"FRA\": \"Clé API\",\n \"ENU\": \"API Key\"\n }\n },\n \"completion_url\": {\n \"type\": \"url\",\n \"defaultValue\": \"\",\n \"help\": \"URL where text completion requests will be sent.\",\n \"label\": {\n \"FRA\": \"URL de complétion\",\n \"ENU\": \"Completion URL\"\n }\n },\n \"stt_url\": {\n \"type\": \"url\",\n \"defaultValue\": \"\",\n \"help\": \"URL used for speech recognition.\",\n \"label\": {\n \"FRA\": \"URL de la synthèse vocale \",\n \"ENU\": \"Speech to text URL\"\n }\n },\n \"ping_url\": {\n \"type\": \"url\",\n \"defaultValue\": \"\",\n \"help\": \"URL used to check the availability of the AI server.\",\n \"label\": {\n \"FRA\": \"URL de ping\",\n \"ENU\": \"Ping URL\"\n }\n }\n\n}", + "lov_value": "{\n \"bot_name\": {\n \"type\": \"text\",\n \"defaultValue\": \"George\",\n \"help\": \"The name of the bot that will be displayed to users.\",\n \"label\": {\n \"FRA\": \"Nom du bot\",\n \"ENU\": \"Bot Name\"\n },\n \"left_column\": true\n },\n \"data_number\": {\n \"type\": \"text\",\n \"defaultValue\": \"5\",\n \"help\": \"The amount of data per object requested from the AI.\",\n \"label\": {\n \"FRA\": \"Nombre d'éléments à générer\",\n \"ENU\": \"Number of items to generate\"\n },\n \"left_column\": true\n },\n \"code_max_token\": {\n \"type\": \"text\",\n \"defaultValue\": \"2000\",\n \"help\": \"The maximum number of tokens the bot can handle for all technical calls, including chart and modules generation.\",\n \"label\": {\n \"FRA\": \"Nombre maximum de jetons pour appels techniques\",\n \"ENU\": \"Max Token for Technical Calls\"\n }\n },\n \"default_max_token\": {\n \"type\": \"text\",\n \"defaultValue\": \"1500\",\n \"help\": \"The maximum number of tokens the bot can handle by default for each interaction.\",\n \"label\": {\n \"FRA\": \"Nombre maximum de jetons par défaut\",\n \"ENU\": \"Default Max Token\"\n }\n },\n \"hist_depth\": {\n \"type\": \"text\",\n \"defaultValue\": \"3\",\n \"help\": \"The number of previous messages the bot will consider when generating a new response.\",\n \"label\": {\n \"FRA\": \"Profondeur de l'historique\",\n \"ENU\": \"History Depth\"\n },\n \"left_column\": true\n },\n \"provider\": {\n \"type\": \"text\",\n \"defaultValue\": \"\",\n \"help\": \"Name of the model provider, used in the data disclaimer.\",\n \"label\": {\n \"FRA\": \"Fournisseur\",\n \"ENU\": \"Provider\"\n },\n \"left_column\": true\n },\n \"showDataDisclaimer\": {\n \"type\": \"boolean\",\n \"defaultValue\": true,\n \"help\": \"Indicates whether the data disclaimer should be shown to users.\",\n \"label\": {\n \"FRA\": \"Afficher la clause de non-responsabilité des données\",\n \"ENU\": \"Show Data Disclaimer\"\n },\n \"left_column\": true\n },\n \"model\": {\n \"type\": \"select\",\n \"defaultValue\": \"\",\n \"help\": \"Select the AI model to use for interactions.\",\n \"label\": {\n \"FRA\": \"Modèle\",\n \"ENU\": \"Model\"\n },\n \"left_column\": true\n },\n \"api_key\": {\n \"type\": \"text\",\n \"defaultValue\": \"\",\n \"help\": \"API key used to authenticate requests to the AI server.\",\n \"label\": {\n \"FRA\": \"Clé API\",\n \"ENU\": \"API Key\"\n }\n },\n \"completion_url\": {\n \"type\": \"url\",\n \"defaultValue\": \"\",\n \"help\": \"URL where text completion requests will be sent.\",\n \"label\": {\n \"FRA\": \"URL de complétion\",\n \"ENU\": \"Completion URL\"\n }\n },\n \"stt_url\": {\n \"type\": \"url\",\n \"defaultValue\": \"\",\n \"help\": \"URL used for speech recognition.\",\n \"label\": {\n \"FRA\": \"URL de la synthèse vocale \",\n \"ENU\": \"Speech to text URL\"\n }\n },\n \"ping_url\": {\n \"type\": \"url\",\n \"defaultValue\": \"\",\n \"help\": \"URL used to check the availability of the AI server.\",\n \"label\": {\n \"FRA\": \"URL de ping\",\n \"ENU\": \"Ping URL\"\n }\n }\n\n}", "lov_order_by": 1, "lov_event_id__lev_code": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -415,7 +399,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_DEFAULT_PROVIDER_NAME *", + "userkey": "TEXT~AI_DEFAULT_PROVIDER_NAME~ANY", "item": { "lov_name": "TEXT", "lov_code": "AI_DEFAULT_PROVIDER_NAME", @@ -428,7 +412,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_ENV_SETTING *", + "userkey": "TEXT~AI_ENV_SETTING~ANY", "item": { "lov_name": "TEXT", "lov_code": "AI_ENV_SETTING", @@ -441,7 +425,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT ChatBot *", + "userkey": "TEXT~ChatBot~ANY", "item": { "lov_name": "TEXT", "lov_code": "ChatBot", @@ -454,7 +438,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT ACCEPT_ALL English", + "userkey": "TEXT~ACCEPT_ALL~ENU", "item": { "lov_name": "TEXT", "lov_code": "ACCEPT_ALL", @@ -467,7 +451,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_BUTTON_CANCEL English", + "userkey": "TEXT~AI_BUTTON_CANCEL~ENU", "item": { "lov_name": "TEXT", "lov_code": "AI_BUTTON_CANCEL", @@ -480,7 +464,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_BUTTON_SEND English", + "userkey": "TEXT~AI_BUTTON_SEND~ENU", "item": { "lov_name": "TEXT", "lov_code": "AI_BUTTON_SEND", @@ -493,7 +477,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_BUTTON_STOP_RECORDING English", + "userkey": "TEXT~AI_BUTTON_STOP_RECORDING~ENU", "item": { "lov_name": "TEXT", "lov_code": "AI_BUTTON_STOP_RECORDING", @@ -506,7 +490,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_CHAT_HELLO English", + "userkey": "TEXT~AI_CHAT_HELLO~ENU", "item": { "lov_name": "TEXT", "lov_code": "AI_CHAT_HELLO", @@ -519,7 +503,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_CHAT_RESUME_MODULE English", + "userkey": "TEXT~AI_CHAT_RESUME_MODULE~ENU", "item": { "lov_name": "TEXT", "lov_code": "AI_CHAT_RESUME_MODULE", @@ -532,7 +516,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_COMPLETED English", + "userkey": "TEXT~AI_COMPLETED~ENU", "item": { "lov_name": "TEXT", "lov_code": "AI_COMPLETED", @@ -545,7 +529,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_CONFIRM_DEL English", + "userkey": "TEXT~AI_CONFIRM_DEL~ENU", "item": { "lov_name": "TEXT", "lov_code": "AI_CONFIRM_DEL", @@ -558,7 +542,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_CONFIRM_IMPORT English", + "userkey": "TEXT~AI_CONFIRM_IMPORT~ENU", "item": { "lov_name": "TEXT", "lov_code": "AI_CONFIRM_IMPORT", @@ -571,7 +555,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_DISCLAIMER_DATA English", + "userkey": "TEXT~AI_DISCLAIMER_DATA~ENU", "item": { "lov_name": "TEXT", "lov_code": "AI_DISCLAIMER_DATA", @@ -584,7 +568,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_ERROR English", + "userkey": "TEXT~AI_ERROR~ENU", "item": { "lov_name": "TEXT", "lov_code": "AI_ERROR", @@ -597,7 +581,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_ERROR_RETURN English", + "userkey": "TEXT~AI_ERROR_RETURN~ENU", "item": { "lov_name": "TEXT", "lov_code": "AI_ERROR_RETURN", @@ -610,7 +594,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_FINISH_REASON English", + "userkey": "TEXT~AI_FINISH_REASON~ENU", "item": { "lov_name": "TEXT", "lov_code": "AI_FINISH_REASON", @@ -623,7 +607,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_GRAPH_DISCLAIMER English", + "userkey": "TEXT~AI_GRAPH_DISCLAIMER~ENU", "item": { "lov_name": "TEXT", "lov_code": "AI_GRAPH_DISCLAIMER", @@ -636,7 +620,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_ICON_ADD_IMG English", + "userkey": "TEXT~AI_ICON_ADD_IMG~ENU", "item": { "lov_name": "TEXT", "lov_code": "AI_ICON_ADD_IMG", @@ -649,7 +633,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_ICON_SPEECH English", + "userkey": "TEXT~AI_ICON_SPEECH~ENU", "item": { "lov_name": "TEXT", "lov_code": "AI_ICON_SPEECH", @@ -662,7 +646,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_ICON_TAKE_IMG English", + "userkey": "TEXT~AI_ICON_TAKE_IMG~ENU", "item": { "lov_name": "TEXT", "lov_code": "AI_ICON_TAKE_IMG", @@ -675,7 +659,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_IMPORT_WARNING English", + "userkey": "TEXT~AI_IMPORT_WARNING~ENU", "item": { "lov_name": "TEXT", "lov_code": "AI_IMPORT_WARNING", @@ -688,7 +672,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_JSON_EMPTY_ERROR English", + "userkey": "TEXT~AI_JSON_EMPTY_ERROR~ENU", "item": { "lov_name": "TEXT", "lov_code": "AI_JSON_EMPTY_ERROR", @@ -701,7 +685,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_JSON_ERROR English", + "userkey": "TEXT~AI_JSON_ERROR~ENU", "item": { "lov_name": "TEXT", "lov_code": "AI_JSON_ERROR", @@ -714,7 +698,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_NO_PING_URL English", + "userkey": "TEXT~AI_NO_PING_URL~ENU", "item": { "lov_name": "TEXT", "lov_code": "AI_NO_PING_URL", @@ -727,7 +711,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_NOTHING_IMPORT English", + "userkey": "TEXT~AI_NOTHING_IMPORT~ENU", "item": { "lov_name": "TEXT", "lov_code": "AI_NOTHING_IMPORT", @@ -740,7 +724,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_PING_ERROR English", + "userkey": "TEXT~AI_PING_ERROR~ENU", "item": { "lov_name": "TEXT", "lov_code": "AI_PING_ERROR", @@ -753,7 +737,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_RECORDING_TITLE English", + "userkey": "TEXT~AI_RECORDING_TITLE~ENU", "item": { "lov_name": "TEXT", "lov_code": "AI_RECORDING_TITLE", @@ -766,7 +750,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_SETTING_BUTTON English", + "userkey": "TEXT~AI_SETTING_BUTTON~ENU", "item": { "lov_name": "TEXT", "lov_code": "AI_SETTING_BUTTON", @@ -779,7 +763,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_SETTING_NEED English", + "userkey": "TEXT~AI_SETTING_NEED~ENU", "item": { "lov_name": "TEXT", "lov_code": "AI_SETTING_NEED", @@ -792,7 +776,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_SUCCESS English", + "userkey": "TEXT~AI_SUCCESS~ENU", "item": { "lov_name": "TEXT", "lov_code": "AI_SUCCESS", @@ -805,7 +789,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_SUCCESS_PING English", + "userkey": "TEXT~AI_SUCCESS_PING~ENU", "item": { "lov_name": "TEXT", "lov_code": "AI_SUCCESS_PING", @@ -818,7 +802,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_THINKING English", + "userkey": "TEXT~AI_THINKING~ENU", "item": { "lov_name": "TEXT", "lov_code": "AI_THINKING", @@ -831,7 +815,20 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_WARN_PREFIX English", + "userkey": "TEXT~AI_TOKEN_LIMIT_REACHED~ENU", + "item": { + "lov_name": "TEXT", + "lov_code": "AI_TOKEN_LIMIT_REACHED", + "lov_lang": "ENU", + "lov_value": "you have reached the token limit please relaunch with a lower number of data or ask for change of token max", + "lov_order_by": 1, + "lov_event_id__lev_code": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "ListOfValue", + "userkey": "TEXT~AI_WARN_PREFIX~ENU", "item": { "lov_name": "TEXT", "lov_code": "AI_WARN_PREFIX", @@ -844,7 +841,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT chart English", + "userkey": "TEXT~chart~ENU", "item": { "lov_name": "TEXT", "lov_code": "chart", @@ -857,7 +854,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT ACCEPT_ALL French", + "userkey": "TEXT~ACCEPT_ALL~FRA", "item": { "lov_name": "TEXT", "lov_code": "ACCEPT_ALL", @@ -870,7 +867,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_BUTTON_CANCEL French", + "userkey": "TEXT~AI_BUTTON_CANCEL~FRA", "item": { "lov_name": "TEXT", "lov_code": "AI_BUTTON_CANCEL", @@ -883,7 +880,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_BUTTON_SEND French", + "userkey": "TEXT~AI_BUTTON_SEND~FRA", "item": { "lov_name": "TEXT", "lov_code": "AI_BUTTON_SEND", @@ -896,7 +893,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_BUTTON_STOP_RECORDING French", + "userkey": "TEXT~AI_BUTTON_STOP_RECORDING~FRA", "item": { "lov_name": "TEXT", "lov_code": "AI_BUTTON_STOP_RECORDING", @@ -909,7 +906,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_CHAT_HELLO French", + "userkey": "TEXT~AI_CHAT_HELLO~FRA", "item": { "lov_name": "TEXT", "lov_code": "AI_CHAT_HELLO", @@ -922,7 +919,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_CHAT_RESUME_MODULE French", + "userkey": "TEXT~AI_CHAT_RESUME_MODULE~FRA", "item": { "lov_name": "TEXT", "lov_code": "AI_CHAT_RESUME_MODULE", @@ -935,7 +932,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_COMPLETED French", + "userkey": "TEXT~AI_COMPLETED~FRA", "item": { "lov_name": "TEXT", "lov_code": "AI_COMPLETED", @@ -948,7 +945,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_CONFIRM_DEL French", + "userkey": "TEXT~AI_CONFIRM_DEL~FRA", "item": { "lov_name": "TEXT", "lov_code": "AI_CONFIRM_DEL", @@ -961,7 +958,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_CONFIRM_IMPORT French", + "userkey": "TEXT~AI_CONFIRM_IMPORT~FRA", "item": { "lov_name": "TEXT", "lov_code": "AI_CONFIRM_IMPORT", @@ -974,7 +971,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_DISCLAIMER_DATA French", + "userkey": "TEXT~AI_DISCLAIMER_DATA~FRA", "item": { "lov_name": "TEXT", "lov_code": "AI_DISCLAIMER_DATA", @@ -987,7 +984,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_ENV_SETTING French", + "userkey": "TEXT~AI_ENV_SETTING~FRA", "item": { "lov_name": "TEXT", "lov_code": "AI_ENV_SETTING", @@ -1000,7 +997,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_ERROR French", + "userkey": "TEXT~AI_ERROR~FRA", "item": { "lov_name": "TEXT", "lov_code": "AI_ERROR", @@ -1013,7 +1010,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_ERROR_RETURN French", + "userkey": "TEXT~AI_ERROR_RETURN~FRA", "item": { "lov_name": "TEXT", "lov_code": "AI_ERROR_RETURN", @@ -1026,7 +1023,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_FINISH_REASON French", + "userkey": "TEXT~AI_FINISH_REASON~FRA", "item": { "lov_name": "TEXT", "lov_code": "AI_FINISH_REASON", @@ -1039,7 +1036,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_GRAPH_DISCLAIMER French", + "userkey": "TEXT~AI_GRAPH_DISCLAIMER~FRA", "item": { "lov_name": "TEXT", "lov_code": "AI_GRAPH_DISCLAIMER", @@ -1052,7 +1049,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_ICON_ADD_IMG French", + "userkey": "TEXT~AI_ICON_ADD_IMG~FRA", "item": { "lov_name": "TEXT", "lov_code": "AI_ICON_ADD_IMG", @@ -1065,7 +1062,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_ICON_SPEECH French", + "userkey": "TEXT~AI_ICON_SPEECH~FRA", "item": { "lov_name": "TEXT", "lov_code": "AI_ICON_SPEECH", @@ -1078,7 +1075,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_ICON_TAKE_IMG French", + "userkey": "TEXT~AI_ICON_TAKE_IMG~FRA", "item": { "lov_name": "TEXT", "lov_code": "AI_ICON_TAKE_IMG", @@ -1091,7 +1088,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_IMPORT_WARNING French", + "userkey": "TEXT~AI_IMPORT_WARNING~FRA", "item": { "lov_name": "TEXT", "lov_code": "AI_IMPORT_WARNING", @@ -1104,7 +1101,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_JSON_EMPTY_ERROR French", + "userkey": "TEXT~AI_JSON_EMPTY_ERROR~FRA", "item": { "lov_name": "TEXT", "lov_code": "AI_JSON_EMPTY_ERROR", @@ -1117,7 +1114,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_JSON_ERROR French", + "userkey": "TEXT~AI_JSON_ERROR~FRA", "item": { "lov_name": "TEXT", "lov_code": "AI_JSON_ERROR", @@ -1130,7 +1127,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_MONITORING_CONFIG French", + "userkey": "TEXT~AI_MONITORING_CONFIG~FRA", "item": { "lov_name": "TEXT", "lov_code": "AI_MONITORING_CONFIG", @@ -1143,7 +1140,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_MONITORING_TEST French", + "userkey": "TEXT~AI_MONITORING_TEST~FRA", "item": { "lov_name": "TEXT", "lov_code": "AI_MONITORING_TEST", @@ -1156,7 +1153,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_NO_PING_URL French", + "userkey": "TEXT~AI_NO_PING_URL~FRA", "item": { "lov_name": "TEXT", "lov_code": "AI_NO_PING_URL", @@ -1169,7 +1166,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_NOTHING_IMPORT French", + "userkey": "TEXT~AI_NOTHING_IMPORT~FRA", "item": { "lov_name": "TEXT", "lov_code": "AI_NOTHING_IMPORT", @@ -1182,7 +1179,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_PING_ERROR French", + "userkey": "TEXT~AI_PING_ERROR~FRA", "item": { "lov_name": "TEXT", "lov_code": "AI_PING_ERROR", @@ -1195,7 +1192,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_RECORDING_TITLE French", + "userkey": "TEXT~AI_RECORDING_TITLE~FRA", "item": { "lov_name": "TEXT", "lov_code": "AI_RECORDING_TITLE", @@ -1208,7 +1205,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_SETTING_BUTTON French", + "userkey": "TEXT~AI_SETTING_BUTTON~FRA", "item": { "lov_name": "TEXT", "lov_code": "AI_SETTING_BUTTON", @@ -1221,7 +1218,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_SETTING_NEED French", + "userkey": "TEXT~AI_SETTING_NEED~FRA", "item": { "lov_name": "TEXT", "lov_code": "AI_SETTING_NEED", @@ -1234,7 +1231,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_SUCCESS French", + "userkey": "TEXT~AI_SUCCESS~FRA", "item": { "lov_name": "TEXT", "lov_code": "AI_SUCCESS", @@ -1247,7 +1244,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_SUCCESS_PING French", + "userkey": "TEXT~AI_SUCCESS_PING~FRA", "item": { "lov_name": "TEXT", "lov_code": "AI_SUCCESS_PING", @@ -1260,7 +1257,7 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_THINKING French", + "userkey": "TEXT~AI_THINKING~FRA", "item": { "lov_name": "TEXT", "lov_code": "AI_THINKING", @@ -1273,7 +1270,20 @@ }, { "object": "ListOfValue", - "userkey": "TEXT AI_WARN_PREFIX French", + "userkey": "TEXT~AI_TOKEN_LIMIT_REACHED~FRA", + "item": { + "lov_name": "TEXT", + "lov_code": "AI_TOKEN_LIMIT_REACHED", + "lov_lang": "FRA", + "lov_value": "Vous avez atteint la limite de jetons, veuillez relancer avec un nombre inférieur de données ou demander la modification du nombre maximum de jetons.", + "lov_order_by": 1, + "lov_event_id__lev_code": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "ListOfValue", + "userkey": "TEXT~AI_WARN_PREFIX~FRA", "item": { "lov_name": "TEXT", "lov_code": "AI_WARN_PREFIX", @@ -1324,7 +1334,7 @@ "list": [ { "object": "FieldListCode", - "userkey": "AI_CONF_MODELE MISTRAL", + "userkey": "AI_CONF_MODELE~MISTRAL", "item": { "lov_list_id__lov_name": "AI_CONF_MODELE", "lov_code": "MISTRAL", @@ -1339,7 +1349,7 @@ }, { "object": "FieldListCode", - "userkey": "AI_CONF_MODELE OPENAI", + "userkey": "AI_CONF_MODELE~OPENAI", "item": { "lov_list_id__lov_name": "AI_CONF_MODELE", "lov_code": "OPENAI", @@ -1354,7 +1364,7 @@ }, { "object": "FieldListCode", - "userkey": "AI_EX_TYPE CODE", + "userkey": "AI_EX_TYPE~CODE", "item": { "lov_list_id__lov_name": "AI_EX_TYPE", "lov_code": "CODE", @@ -1369,7 +1379,7 @@ }, { "object": "FieldListCode", - "userkey": "AI_EX_TYPE OTHER", + "userkey": "AI_EX_TYPE~OTHER", "item": { "lov_list_id__lov_name": "AI_EX_TYPE", "lov_code": "OTHER", @@ -1384,7 +1394,7 @@ }, { "object": "FieldListCode", - "userkey": "FIELD_RENDERING_LONGSTRING AI", + "userkey": "FIELD_RENDERING_LONGSTRING~AI", "item": { "lov_list_id__lov_name": "FIELD_RENDERING_LONGSTRING", "lov_code": "AI", @@ -1399,7 +1409,7 @@ }, { "object": "FieldListCode", - "userkey": "FIELD_RENDERING_NOTEPAD AI", + "userkey": "FIELD_RENDERING_NOTEPAD~AI", "item": { "lov_list_id__lov_name": "FIELD_RENDERING_NOTEPAD", "lov_code": "AI", @@ -1422,7 +1432,7 @@ "list": [ { "object": "FieldListValue", - "userkey": "AI_CONF_MODELE OPENAI English", + "userkey": "AI_CONF_MODELE~OPENAI~ENU", "item": { "lov_code_id__lov_list_id__lov_name": "AI_CONF_MODELE", "lov_code_id__lov_code": "OPENAI", @@ -1433,7 +1443,7 @@ }, { "object": "FieldListValue", - "userkey": "AI_CONF_MODELE MISTRAL English", + "userkey": "AI_CONF_MODELE~MISTRAL~ENU", "item": { "lov_code_id__lov_list_id__lov_name": "AI_CONF_MODELE", "lov_code_id__lov_code": "MISTRAL", @@ -1444,7 +1454,7 @@ }, { "object": "FieldListValue", - "userkey": "AI_CONF_MODELE OPENAI French", + "userkey": "AI_CONF_MODELE~OPENAI~FRA", "item": { "lov_code_id__lov_list_id__lov_name": "AI_CONF_MODELE", "lov_code_id__lov_code": "OPENAI", @@ -1455,7 +1465,7 @@ }, { "object": "FieldListValue", - "userkey": "AI_CONF_MODELE MISTRAL French", + "userkey": "AI_CONF_MODELE~MISTRAL~FRA", "item": { "lov_code_id__lov_list_id__lov_name": "AI_CONF_MODELE", "lov_code_id__lov_code": "MISTRAL", @@ -1466,7 +1476,7 @@ }, { "object": "FieldListValue", - "userkey": "AI_EX_TYPE CODE English", + "userkey": "AI_EX_TYPE~CODE~ENU", "item": { "lov_code_id__lov_list_id__lov_name": "AI_EX_TYPE", "lov_code_id__lov_code": "CODE", @@ -1477,7 +1487,7 @@ }, { "object": "FieldListValue", - "userkey": "AI_EX_TYPE OTHER English", + "userkey": "AI_EX_TYPE~OTHER~ENU", "item": { "lov_code_id__lov_list_id__lov_name": "AI_EX_TYPE", "lov_code_id__lov_code": "OTHER", @@ -1488,7 +1498,7 @@ }, { "object": "FieldListValue", - "userkey": "AI_EX_TYPE CODE French", + "userkey": "AI_EX_TYPE~CODE~FRA", "item": { "lov_code_id__lov_list_id__lov_name": "AI_EX_TYPE", "lov_code_id__lov_code": "CODE", @@ -1499,7 +1509,7 @@ }, { "object": "FieldListValue", - "userkey": "AI_EX_TYPE OTHER French", + "userkey": "AI_EX_TYPE~OTHER~FRA", "item": { "lov_code_id__lov_list_id__lov_name": "AI_EX_TYPE", "lov_code_id__lov_code": "OTHER", @@ -1510,7 +1520,7 @@ }, { "object": "FieldListValue", - "userkey": "FIELD_RENDERING_NOTEPAD AI English", + "userkey": "FIELD_RENDERING_NOTEPAD~AI~ENU", "item": { "lov_code_id__lov_list_id__lov_name": "FIELD_RENDERING_NOTEPAD", "lov_code_id__lov_code": "AI", @@ -1521,7 +1531,7 @@ }, { "object": "FieldListValue", - "userkey": "FIELD_RENDERING_NOTEPAD AI French", + "userkey": "FIELD_RENDERING_NOTEPAD~AI~FRA", "item": { "lov_code_id__lov_list_id__lov_name": "FIELD_RENDERING_NOTEPAD", "lov_code_id__lov_code": "AI", @@ -3553,7 +3563,7 @@ "list": [ { "object": "ObjectFieldSystem", - "userkey": "AiGroupGuiDesc aiGgdDescription 120", + "userkey": "AiGroupGuiDesc~aiGgdDescription~120", "item": { "obf_object_id__obo_name": "AiGroupGuiDesc", "obf_field_id__fld_name": "aiGgdDescription", @@ -3588,7 +3598,7 @@ }, { "object": "ObjectFieldSystem", - "userkey": "AiGroupGuiDesc aiGgdViewhomeId 200", + "userkey": "AiGroupGuiDesc~aiGgdViewhomeId~200", "item": { "obf_object_id__obo_name": "AiGroupGuiDesc", "obf_field_id__fld_name": "aiGgdViewhomeId", @@ -3623,7 +3633,7 @@ }, { "object": "ObjectFieldSystem", - "userkey": "AiGroupGuiDesc viw_name 210", + "userkey": "AiGroupGuiDesc~viw_name~210", "item": { "obf_object_id__obo_name": "AiGroupGuiDesc", "obf_field_id__fld_name": "viw_name", @@ -3658,7 +3668,7 @@ }, { "object": "ObjectFieldSystem", - "userkey": "AiGroupGuiDesc aiGgdLang 230", + "userkey": "AiGroupGuiDesc~aiGgdLang~230", "item": { "obf_object_id__obo_name": "AiGroupGuiDesc", "obf_field_id__fld_name": "aiGgdLang", @@ -3693,7 +3703,7 @@ }, { "object": "ObjectFieldSystem", - "userkey": "AiGroupView aiGroupGuiDescId 100", + "userkey": "AiGroupView~aiGroupGuiDescId~100", "item": { "obf_object_id__obo_name": "AiGroupView", "obf_field_id__fld_name": "aiGroupGuiDescId", @@ -3728,7 +3738,7 @@ }, { "object": "ObjectFieldSystem", - "userkey": "AiGroupView aiGgdViewhomeId 110", + "userkey": "AiGroupView~aiGgdViewhomeId~110", "item": { "obf_object_id__obo_name": "AiGroupView", "obf_field_id__fld_name": "aiGgdViewhomeId", @@ -3763,7 +3773,7 @@ }, { "object": "ObjectFieldSystem", - "userkey": "AiGroupView viw_name 120", + "userkey": "AiGroupView~viw_name~120", "item": { "obf_object_id__obo_name": "AiGroupView", "obf_field_id__fld_name": "viw_name", @@ -3798,7 +3808,7 @@ }, { "object": "ObjectFieldSystem", - "userkey": "AiGroupView aiGgdLang 121", + "userkey": "AiGroupView~aiGgdLang~121", "item": { "obf_object_id__obo_name": "AiGroupView", "obf_field_id__fld_name": "aiGgdLang", @@ -3833,7 +3843,7 @@ }, { "object": "ObjectFieldSystem", - "userkey": "AiGroupView aiGroupId 200", + "userkey": "AiGroupView~aiGroupId~200", "item": { "obf_object_id__obo_name": "AiGroupView", "obf_field_id__fld_name": "aiGroupId", @@ -3868,7 +3878,7 @@ }, { "object": "ObjectFieldSystem", - "userkey": "AiGroupView grp_name 210", + "userkey": "AiGroupView~grp_name~210", "item": { "obf_object_id__obo_name": "AiGroupView", "obf_field_id__fld_name": "grp_name", @@ -3903,7 +3913,7 @@ }, { "object": "ObjectFieldSystem", - "userkey": "AiGroupView aiAigroupviewUsed 220", + "userkey": "AiGroupView~aiAigroupviewUsed~220", "item": { "obf_object_id__obo_name": "AiGroupView", "obf_field_id__fld_name": "aiAigroupviewUsed", @@ -3938,7 +3948,7 @@ }, { "object": "ObjectFieldSystem", - "userkey": "AiMetricsHist aiMhSimpleuserId 100", + "userkey": "AiMetricsHist~aiMhSimpleuserId~100", "item": { "obf_object_id__obo_name": "AiMetricsHist", "obf_field_id__fld_name": "aiMhSimpleuserId", @@ -3976,7 +3986,7 @@ }, { "object": "ObjectFieldSystem", - "userkey": "AiMetricsHist usr_login 110", + "userkey": "AiMetricsHist~usr_login~110", "item": { "obf_object_id__obo_name": "AiMetricsHist", "obf_field_id__fld_name": "usr_login", @@ -4011,7 +4021,7 @@ }, { "object": "ObjectFieldSystem", - "userkey": "AiMetricsHist aiMhCreateOn 120", + "userkey": "AiMetricsHist~aiMhCreateOn~120", "item": { "obf_object_id__obo_name": "AiMetricsHist", "obf_field_id__fld_name": "aiMhCreateOn", @@ -4046,7 +4056,7 @@ }, { "object": "ObjectFieldSystem", - "userkey": "AiMetricsHist aiMhModuleId 200", + "userkey": "AiMetricsHist~aiMhModuleId~200", "item": { "obf_object_id__obo_name": "AiMetricsHist", "obf_field_id__fld_name": "aiMhModuleId", @@ -4081,7 +4091,7 @@ }, { "object": "ObjectFieldSystem", - "userkey": "AiMetricsHist mdl_name 210", + "userkey": "AiMetricsHist~mdl_name~210", "item": { "obf_object_id__obo_name": "AiMetricsHist", "obf_field_id__fld_name": "mdl_name", @@ -4116,7 +4126,7 @@ }, { "object": "ObjectFieldSystem", - "userkey": "AiMetricsHist aiMhMetrics 220", + "userkey": "AiMetricsHist~aiMhMetrics~220", "item": { "obf_object_id__obo_name": "AiMetricsHist", "obf_field_id__fld_name": "aiMhMetrics", @@ -4151,7 +4161,7 @@ }, { "object": "ObjectFieldSystem", - "userkey": "AiMetricsHist aiMhPreview 230", + "userkey": "AiMetricsHist~aiMhPreview~230", "item": { "obf_object_id__obo_name": "AiMetricsHist", "obf_field_id__fld_name": "aiMhPreview", @@ -4186,7 +4196,7 @@ }, { "object": "ObjectFieldSystem", - "userkey": "AiMetricsHist aiMhPrompt 240", + "userkey": "AiMetricsHist~aiMhPrompt~240", "item": { "obf_object_id__obo_name": "AiMetricsHist", "obf_field_id__fld_name": "aiMhPrompt", @@ -4221,7 +4231,7 @@ }, { "object": "ObjectFieldSystem", - "userkey": "AIProvider aiPrvProvider 10", + "userkey": "AIProvider~aiPrvProvider~10", "item": { "obf_object_id__obo_name": "AIProvider", "obf_field_id__fld_name": "aiPrvProvider", @@ -4256,7 +4266,7 @@ }, { "object": "ObjectFieldSystem", - "userkey": "AIProvider aiPrvDefaultUrl 20", + "userkey": "AIProvider~aiPrvDefaultUrl~20", "item": { "obf_object_id__obo_name": "AIProvider", "obf_field_id__fld_name": "aiPrvDefaultUrl", @@ -4291,7 +4301,7 @@ }, { "object": "ObjectFieldSystem", - "userkey": "AIProvider aiPrvDataModel 30", + "userkey": "AIProvider~aiPrvDataModel~30", "item": { "obf_object_id__obo_name": "AIProvider", "obf_field_id__fld_name": "aiPrvDataModel", @@ -4326,7 +4336,7 @@ }, { "object": "ObjectFieldSystem", - "userkey": "AIProvider aiPrvModelsUrl 40", + "userkey": "AIProvider~aiPrvModelsUrl~40", "item": { "obf_object_id__obo_name": "AIProvider", "obf_field_id__fld_name": "aiPrvModelsUrl", @@ -4361,7 +4371,7 @@ }, { "object": "ObjectFieldSystem", - "userkey": "AIProvider aiPrvHelp 50", + "userkey": "AIProvider~aiPrvHelp~50", "item": { "obf_object_id__obo_name": "AIProvider", "obf_field_id__fld_name": "aiPrvHelp", @@ -4396,7 +4406,7 @@ }, { "object": "ObjectFieldSystem", - "userkey": "AIProvider aiPrvCompletionUrl 60", + "userkey": "AIProvider~aiPrvCompletionUrl~60", "item": { "obf_object_id__obo_name": "AIProvider", "obf_field_id__fld_name": "aiPrvCompletionUrl", @@ -4431,7 +4441,7 @@ }, { "object": "ObjectFieldSystem", - "userkey": "AIProvider aiPrvPingUrl 70", + "userkey": "AIProvider~aiPrvPingUrl~70", "item": { "obf_object_id__obo_name": "AIProvider", "obf_field_id__fld_name": "aiPrvPingUrl", @@ -4466,7 +4476,7 @@ }, { "object": "ObjectFieldSystem", - "userkey": "AIProvider aiPrvSttUrl 80", + "userkey": "AIProvider~aiPrvSttUrl~80", "item": { "obf_object_id__obo_name": "AIProvider", "obf_field_id__fld_name": "aiPrvSttUrl", @@ -4501,7 +4511,7 @@ }, { "object": "ObjectFieldSystem", - "userkey": "AIProvider aiPrvUserParameters 90", + "userkey": "AIProvider~aiPrvUserParameters~90", "item": { "obf_object_id__obo_name": "AIProvider", "obf_field_id__fld_name": "aiPrvUserParameters", @@ -4536,7 +4546,7 @@ }, { "object": "ObjectFieldSystem", - "userkey": "Group aiGroupGuiVirtual 1", + "userkey": "Group~aiGroupGuiVirtual~1", "item": { "obf_object_id__obo_name": "Group", "obf_field_id__fld_name": "aiGroupGuiVirtual", @@ -4579,7 +4589,7 @@ "list": [ { "object": "Link", - "userkey": "100 AiGroupView aiGroupGuiDescId", + "userkey": "100~AiGroupView~aiGroupGuiDescId", "item": { "obf_ref_object_id__obo_name": "AiGroupGuiDesc", "obf_order": 100, @@ -4603,7 +4613,7 @@ }, { "object": "Link", - "userkey": "1 Group aiGroupGuiVirtual", + "userkey": "1~Group~aiGroupGuiVirtual", "item": { "obf_ref_object_id__obo_name": "AiGroupGuiDesc", "obf_order": 1, @@ -4627,7 +4637,7 @@ }, { "object": "Link", - "userkey": "200 AiGroupView aiGroupId", + "userkey": "200~AiGroupView~aiGroupId", "item": { "obf_ref_object_id__obo_name": "Group", "obf_order": 200, @@ -4651,7 +4661,7 @@ }, { "object": "Link", - "userkey": "200 AiMetricsHist aiMhModuleId", + "userkey": "200~AiMetricsHist~aiMhModuleId", "item": { "obf_ref_object_id__obo_name": "Module", "obf_order": 200, @@ -4675,7 +4685,7 @@ }, { "object": "Link", - "userkey": "100 AiMetricsHist aiMhSimpleuserId", + "userkey": "100~AiMetricsHist~aiMhSimpleuserId", "item": { "obf_ref_object_id__obo_name": "User", "obf_order": 100, @@ -4699,7 +4709,7 @@ }, { "object": "Link", - "userkey": "200 AiGroupGuiDesc aiGgdViewhomeId", + "userkey": "200~AiGroupGuiDesc~aiGgdViewhomeId", "item": { "obf_ref_object_id__obo_name": "ViewHome", "obf_order": 200, @@ -5225,7 +5235,7 @@ "list": [ { "object": "ActionField", - "userkey": "AIButton aiActPrompt 100", + "userkey": "AIButton~aiActPrompt~100", "item": { "afd_action_id__act_name": "AIButton", "afd_field_id__fld_name": "aiActPrompt", @@ -5237,7 +5247,7 @@ }, { "object": "ActionField", - "userkey": "AIButtonSkip aiActPrompt 100", + "userkey": "AIButtonSkip~aiActPrompt~100", "item": { "afd_action_id__act_name": "AIButtonSkip", "afd_field_id__fld_name": "aiActPrompt", @@ -5433,7 +5443,7 @@ "list": [ { "object": "Grant", - "userkey": "ADMIN AI_MODULE_AI_ADD_DATA_A Module AIAddData", + "userkey": "ADMIN~AI_MODULE_AI_ADD_DATA_A~Module~AIAddData", "item": { "grt_group_id__grp_name": "ADMIN", "grt_function_id__fct_name": "AI_MODULE_AI_ADD_DATA_A", @@ -5445,7 +5455,7 @@ }, { "object": "Grant", - "userkey": "AI_ADMIN AI_GGD_AI_UPDATE_DESC_A AiGroupGuiDesc AI_UPDATE_DESC", + "userkey": "AI_ADMIN~AI_GGD_AI_UPDATE_DESC_A~AiGroupGuiDesc~AI_UPDATE_DESC", "item": { "grt_group_id__grp_name": "AI_ADMIN", "grt_function_id__fct_name": "AI_GGD_AI_UPDATE_DESC_A", @@ -5457,7 +5467,7 @@ }, { "object": "Grant", - "userkey": "AI_ADMIN AI_GGD_AI_UPDATE_DESC_GLOBAL_A AiGroupGuiDesc AI_UPDATE_DESC_GLOBAL", + "userkey": "AI_ADMIN~AI_GGD_AI_UPDATE_DESC_GLOBAL_A~AiGroupGuiDesc~AI_UPDATE_DESC_GLOBAL", "item": { "grt_group_id__grp_name": "AI_ADMIN", "grt_function_id__fct_name": "AI_GGD_AI_UPDATE_DESC_GLOBAL_A", @@ -5469,7 +5479,7 @@ }, { "object": "Grant", - "userkey": "AI_ADMIN AI_GGD_CRUD AiGroupGuiDesc", + "userkey": "AI_ADMIN~AI_GGD_CRUD~AiGroupGuiDesc~", "item": { "grt_group_id__grp_name": "AI_ADMIN", "grt_function_id__fct_name": "AI_GGD_CRUD", @@ -5481,7 +5491,7 @@ }, { "object": "Grant", - "userkey": "AI_ADMIN AI_GROUP_GUI_DESC_GROUP_CRUD AiGroupView", + "userkey": "AI_ADMIN~AI_GROUP_GUI_DESC_GROUP_CRUD~AiGroupView~", "item": { "grt_group_id__grp_name": "AI_ADMIN", "grt_function_id__fct_name": "AI_GROUP_GUI_DESC_GROUP_CRUD", @@ -5493,7 +5503,7 @@ }, { "object": "Grant", - "userkey": "AI_ADMIN AI_MH_CRUD AiMetricsHist", + "userkey": "AI_ADMIN~AI_MH_CRUD~AiMetricsHist~", "item": { "grt_group_id__grp_name": "AI_ADMIN", "grt_function_id__fct_name": "AI_MH_CRUD", @@ -5505,7 +5515,7 @@ }, { "object": "Grant", - "userkey": "AI_ADMIN AI_PRV_A_I_PROVIDERS_IMPORT_A AIProvider AIProvidersImport", + "userkey": "AI_ADMIN~AI_PRV_A_I_PROVIDERS_IMPORT_A~AIProvider~AIProvidersImport", "item": { "grt_group_id__grp_name": "AI_ADMIN", "grt_function_id__fct_name": "AI_PRV_A_I_PROVIDERS_IMPORT_A", @@ -5517,7 +5527,7 @@ }, { "object": "Grant", - "userkey": "AI_ADMIN AI_PRV_CRUD AIProvider", + "userkey": "AI_ADMIN~AI_PRV_CRUD~AIProvider~", "item": { "grt_group_id__grp_name": "AI_ADMIN", "grt_function_id__fct_name": "AI_PRV_CRUD", @@ -5529,7 +5539,7 @@ }, { "object": "Grant", - "userkey": "AI_BUSINESS AI_GGD_R AiGroupGuiDesc", + "userkey": "AI_BUSINESS~AI_GGD_R~AiGroupGuiDesc~", "item": { "grt_group_id__grp_name": "AI_BUSINESS", "grt_function_id__fct_name": "AI_GGD_R", @@ -5541,7 +5551,7 @@ }, { "object": "Grant", - "userkey": "AI_BUSINESS AI_MH_CRD AiMetricsHist", + "userkey": "AI_BUSINESS~AI_MH_CRD~AiMetricsHist~", "item": { "grt_group_id__grp_name": "AI_BUSINESS", "grt_function_id__fct_name": "AI_MH_CRD", @@ -5553,7 +5563,7 @@ }, { "object": "Grant", - "userkey": "AI_BUSINESS AI_PRV_R AIProvider", + "userkey": "AI_BUSINESS~AI_PRV_R~AIProvider~", "item": { "grt_group_id__grp_name": "AI_BUSINESS", "grt_function_id__fct_name": "AI_PRV_R", @@ -5565,7 +5575,7 @@ }, { "object": "Grant", - "userkey": "AI_DESIGNER AI_GGD_AI_UPDATE_DESC_A AiGroupGuiDesc AI_UPDATE_DESC", + "userkey": "AI_DESIGNER~AI_GGD_AI_UPDATE_DESC_A~AiGroupGuiDesc~AI_UPDATE_DESC", "item": { "grt_group_id__grp_name": "AI_DESIGNER", "grt_function_id__fct_name": "AI_GGD_AI_UPDATE_DESC_A", @@ -5577,7 +5587,7 @@ }, { "object": "Grant", - "userkey": "AI_DESIGNER AI_GGD_AI_UPDATE_DESC_GLOBAL_A AiGroupGuiDesc AI_UPDATE_DESC_GLOBAL", + "userkey": "AI_DESIGNER~AI_GGD_AI_UPDATE_DESC_GLOBAL_A~AiGroupGuiDesc~AI_UPDATE_DESC_GLOBAL", "item": { "grt_group_id__grp_name": "AI_DESIGNER", "grt_function_id__fct_name": "AI_GGD_AI_UPDATE_DESC_GLOBAL_A", @@ -5589,7 +5599,7 @@ }, { "object": "Grant", - "userkey": "AI_DESIGNER AI_GGD_CRUD AiGroupGuiDesc", + "userkey": "AI_DESIGNER~AI_GGD_CRUD~AiGroupGuiDesc~", "item": { "grt_group_id__grp_name": "AI_DESIGNER", "grt_function_id__fct_name": "AI_GGD_CRUD", @@ -5601,7 +5611,7 @@ }, { "object": "Grant", - "userkey": "AI_DESIGNER AI_GGD_R AiGroupGuiDesc", + "userkey": "AI_DESIGNER~AI_GGD_R~AiGroupGuiDesc~", "item": { "grt_group_id__grp_name": "AI_DESIGNER", "grt_function_id__fct_name": "AI_GGD_R", @@ -5613,7 +5623,7 @@ }, { "object": "Grant", - "userkey": "AI_DESIGNER AI_GROUP_GUI_DESC_GROUP_CRUD AiGroupView", + "userkey": "AI_DESIGNER~AI_GROUP_GUI_DESC_GROUP_CRUD~AiGroupView~", "item": { "grt_group_id__grp_name": "AI_DESIGNER", "grt_function_id__fct_name": "AI_GROUP_GUI_DESC_GROUP_CRUD", @@ -5625,7 +5635,7 @@ }, { "object": "Grant", - "userkey": "AI_DESIGNER AI_MH_CRD AiMetricsHist", + "userkey": "AI_DESIGNER~AI_MH_CRD~AiMetricsHist~", "item": { "grt_group_id__grp_name": "AI_DESIGNER", "grt_function_id__fct_name": "AI_MH_CRD", @@ -5637,7 +5647,7 @@ }, { "object": "Grant", - "userkey": "AI_DESIGNER AI_MH_CRUD AiMetricsHist", + "userkey": "AI_DESIGNER~AI_MH_CRUD~AiMetricsHist~", "item": { "grt_group_id__grp_name": "AI_DESIGNER", "grt_function_id__fct_name": "AI_MH_CRUD", @@ -5649,7 +5659,7 @@ }, { "object": "Grant", - "userkey": "AI_DESIGNER AI_PRV_A_I_PROVIDERS_IMPORT_A AIProvider AIProvidersImport", + "userkey": "AI_DESIGNER~AI_PRV_A_I_PROVIDERS_IMPORT_A~AIProvider~AIProvidersImport", "item": { "grt_group_id__grp_name": "AI_DESIGNER", "grt_function_id__fct_name": "AI_PRV_A_I_PROVIDERS_IMPORT_A", @@ -5661,7 +5671,7 @@ }, { "object": "Grant", - "userkey": "AI_DESIGNER AI_PRV_R AIProvider", + "userkey": "AI_DESIGNER~AI_PRV_R~AIProvider~", "item": { "grt_group_id__grp_name": "AI_DESIGNER", "grt_function_id__fct_name": "AI_PRV_R", @@ -5673,7 +5683,7 @@ }, { "object": "Grant", - "userkey": "AI_DESIGNER AI_MODULE_AI_ADD_DATA_A Module AIAddData", + "userkey": "AI_DESIGNER~AI_MODULE_AI_ADD_DATA_A~Module~AIAddData", "item": { "grt_group_id__grp_name": "AI_DESIGNER", "grt_function_id__fct_name": "AI_MODULE_AI_ADD_DATA_A", @@ -5685,7 +5695,7 @@ }, { "object": "Grant", - "userkey": "AI_DESIGNER AI_MODULE_AI_AUTO_GEN_MODULE_A Module AIAutoGenModule", + "userkey": "AI_DESIGNER~AI_MODULE_AI_AUTO_GEN_MODULE_A~Module~AIAutoGenModule", "item": { "grt_group_id__grp_name": "AI_DESIGNER", "grt_function_id__fct_name": "AI_MODULE_AI_AUTO_GEN_MODULE_A", @@ -5697,7 +5707,7 @@ }, { "object": "Grant", - "userkey": "AI_DESIGNER MDL-CMS Module", + "userkey": "AI_DESIGNER~MDL-CMS~Module~", "item": { "grt_group_id__grp_name": "AI_DESIGNER", "grt_function_id__fct_name": "MDL-CMS", @@ -5798,7 +5808,7 @@ "list": [ { "object": "ConstraintImpact", - "userkey": "CreateSpe AiGroupGuiDesc 1", + "userkey": "CreateSpe~AiGroupGuiDesc~1", "item": { "csi_const_id__cst_name": "CreateSpe", "csi_const_id__cst_object_id__obo_name": "AiGroupGuiDesc", @@ -5816,7 +5826,7 @@ }, { "object": "ConstraintImpact", - "userkey": "canCreateOnList AiGroupGuiDesc 1", + "userkey": "canCreateOnList~AiGroupGuiDesc~1", "item": { "csi_const_id__cst_name": "canCreateOnList", "csi_const_id__cst_object_id__obo_name": "AiGroupGuiDesc", @@ -5834,7 +5844,7 @@ }, { "object": "ConstraintImpact", - "userkey": "CreateSpe AiGroupGuiDesc 2", + "userkey": "CreateSpe~AiGroupGuiDesc~2", "item": { "csi_const_id__cst_name": "CreateSpe", "csi_const_id__cst_object_id__obo_name": "AiGroupGuiDesc", @@ -5852,7 +5862,7 @@ }, { "object": "ConstraintImpact", - "userkey": "CreateSpe AiGroupGuiDesc 3", + "userkey": "CreateSpe~AiGroupGuiDesc~3", "item": { "csi_const_id__cst_name": "CreateSpe", "csi_const_id__cst_object_id__obo_name": "AiGroupGuiDesc", @@ -5870,7 +5880,7 @@ }, { "object": "ConstraintImpact", - "userkey": "newSpe AiGroupView 1", + "userkey": "newSpe~AiGroupView~1", "item": { "csi_const_id__cst_name": "newSpe", "csi_const_id__cst_object_id__obo_name": "AiGroupView", @@ -5888,7 +5898,7 @@ }, { "object": "ConstraintImpact", - "userkey": "newSpe AiGroupView 2", + "userkey": "newSpe~AiGroupView~2", "item": { "csi_const_id__cst_name": "newSpe", "csi_const_id__cst_object_id__obo_name": "AiGroupView", @@ -5928,7 +5938,7 @@ }, "pcs_max_duration": null, "pcs_duration_unit": "D", - "pcs_persitant": false, + "pcs_persitant": null, "pcs_persist_depth": null, "pcs_alert_id__alt_name": null, "pcs_compensate_id__pcs_name": null, @@ -5982,7 +5992,7 @@ }, "pcs_max_duration": null, "pcs_duration_unit": "D", - "pcs_persitant": false, + "pcs_persitant": null, "pcs_persist_depth": null, "pcs_alert_id__alt_name": null, "pcs_compensate_id__pcs_name": null, @@ -6003,7 +6013,7 @@ "list": [ { "object": "BPMActivity", - "userkey": "AIGenData GDD_SETTINGS_END", + "userkey": "AIGenData~GDD_SETTINGS_END", "item": { "acy_process_id__pcs_name": "AIGenData", "acy_step": "GDD_SETTINGS_END", @@ -6022,7 +6032,7 @@ }, { "object": "BPMActivity", - "userkey": "AIGenData GGD-BEG", + "userkey": "AIGenData~GGD-BEG", "item": { "acy_process_id__pcs_name": "AIGenData", "acy_step": "GGD-BEG", @@ -6041,7 +6051,7 @@ }, { "object": "BPMActivity", - "userkey": "AIGenData GGD-END", + "userkey": "AIGenData~GGD-END", "item": { "acy_process_id__pcs_name": "AIGenData", "acy_step": "GGD-END", @@ -6060,7 +6070,7 @@ }, { "object": "BPMActivity", - "userkey": "AIGenData GGD_0050", + "userkey": "AIGenData~GGD_0050", "item": { "acy_process_id__pcs_name": "AIGenData", "acy_step": "GGD_0050", @@ -6079,7 +6089,7 @@ }, { "object": "BPMActivity", - "userkey": "AIGenData GGD_0075", + "userkey": "AIGenData~GGD_0075", "item": { "acy_process_id__pcs_name": "AIGenData", "acy_step": "GGD_0075", @@ -6098,7 +6108,7 @@ }, { "object": "BPMActivity", - "userkey": "AIGenData GGD_0100", + "userkey": "AIGenData~GGD_0100", "item": { "acy_process_id__pcs_name": "AIGenData", "acy_step": "GGD_0100", @@ -6117,7 +6127,26 @@ }, { "object": "BPMActivity", - "userkey": "AIGenData GGD_0150", + "userkey": "AIGenData~GGD_0125", + "item": { + "acy_process_id__pcs_name": "AIGenData", + "acy_step": "GGD_0125", + "acy_name": "params", + "acy_comment": null, + "acy_type": "X", + "acy_posx": null, + "acy_posy": null, + "acy_reversible": "N", + "acy_max_duration": null, + "acy_duration_unit": null, + "acy_alert_id__alt_name": null, + "acy_user_dlg": true, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "BPMActivity", + "userkey": "AIGenData~GGD_0150", "item": { "acy_process_id__pcs_name": "AIGenData", "acy_step": "GGD_0150", @@ -6136,7 +6165,7 @@ }, { "object": "BPMActivity", - "userkey": "AIGenData GGD_0200", + "userkey": "AIGenData~GGD_0200", "item": { "acy_process_id__pcs_name": "AIGenData", "acy_step": "GGD_0200", @@ -6155,7 +6184,7 @@ }, { "object": "BPMActivity", - "userkey": "AIModuleCreate AIC-BEG", + "userkey": "AIModuleCreate~AIC-BEG", "item": { "acy_process_id__pcs_name": "AIModuleCreate", "acy_step": "AIC-BEG", @@ -6174,7 +6203,7 @@ }, { "object": "BPMActivity", - "userkey": "AIModuleCreate AIC-END", + "userkey": "AIModuleCreate~AIC-END", "item": { "acy_process_id__pcs_name": "AIModuleCreate", "acy_step": "AIC-END", @@ -6193,7 +6222,7 @@ }, { "object": "BPMActivity", - "userkey": "AIModuleCreate AIC_0005", + "userkey": "AIModuleCreate~AIC_0005", "item": { "acy_process_id__pcs_name": "AIModuleCreate", "acy_step": "AIC_0005", @@ -6212,7 +6241,7 @@ }, { "object": "BPMActivity", - "userkey": "AIModuleCreate AIC_0010", + "userkey": "AIModuleCreate~AIC_0010", "item": { "acy_process_id__pcs_name": "AIModuleCreate", "acy_step": "AIC_0010", @@ -6231,7 +6260,7 @@ }, { "object": "BPMActivity", - "userkey": "AIModuleCreate AIC_0015", + "userkey": "AIModuleCreate~AIC_0015", "item": { "acy_process_id__pcs_name": "AIModuleCreate", "acy_step": "AIC_0015", @@ -6250,7 +6279,7 @@ }, { "object": "BPMActivity", - "userkey": "AIModuleCreate AIC_0017", + "userkey": "AIModuleCreate~AIC_0017", "item": { "acy_process_id__pcs_name": "AIModuleCreate", "acy_step": "AIC_0017", @@ -6269,7 +6298,7 @@ }, { "object": "BPMActivity", - "userkey": "AIModuleCreate AIC_0020", + "userkey": "AIModuleCreate~AIC_0020", "item": { "acy_process_id__pcs_name": "AIModuleCreate", "acy_step": "AIC_0020", @@ -6288,7 +6317,7 @@ }, { "object": "BPMActivity", - "userkey": "AIModuleCreate AIC_0050", + "userkey": "AIModuleCreate~AIC_0050", "item": { "acy_process_id__pcs_name": "AIModuleCreate", "acy_step": "AIC_0050", @@ -6307,7 +6336,7 @@ }, { "object": "BPMActivity", - "userkey": "AIModuleCreate AIC_0075", + "userkey": "AIModuleCreate~AIC_0075", "item": { "acy_process_id__pcs_name": "AIModuleCreate", "acy_step": "AIC_0075", @@ -6326,7 +6355,7 @@ }, { "object": "BPMActivity", - "userkey": "AIModuleCreate AIC_0100", + "userkey": "AIModuleCreate~AIC_0100", "item": { "acy_process_id__pcs_name": "AIModuleCreate", "acy_step": "AIC_0100", @@ -6345,7 +6374,7 @@ }, { "object": "BPMActivity", - "userkey": "AIModuleCreate AIC_0200", + "userkey": "AIModuleCreate~AIC_0200", "item": { "acy_process_id__pcs_name": "AIModuleCreate", "acy_step": "AIC_0200", @@ -6364,7 +6393,7 @@ }, { "object": "BPMActivity", - "userkey": "AIModuleCreate AIC_0300", + "userkey": "AIModuleCreate~AIC_0300", "item": { "acy_process_id__pcs_name": "AIModuleCreate", "acy_step": "AIC_0300", @@ -6383,7 +6412,7 @@ }, { "object": "BPMActivity", - "userkey": "AIModuleCreate AIC_0350", + "userkey": "AIModuleCreate~AIC_0350", "item": { "acy_process_id__pcs_name": "AIModuleCreate", "acy_step": "AIC_0350", @@ -6402,7 +6431,7 @@ }, { "object": "BPMActivity", - "userkey": "AIModuleCreate AIC_0400", + "userkey": "AIModuleCreate~AIC_0400", "item": { "acy_process_id__pcs_name": "AIModuleCreate", "acy_step": "AIC_0400", @@ -6421,7 +6450,7 @@ }, { "object": "BPMActivity", - "userkey": "AIModuleCreate AIC_0500", + "userkey": "AIModuleCreate~AIC_0500", "item": { "acy_process_id__pcs_name": "AIModuleCreate", "acy_step": "AIC_0500", @@ -6440,7 +6469,7 @@ }, { "object": "BPMActivity", - "userkey": "AIModuleCreate AIC_0600", + "userkey": "AIModuleCreate~AIC_0600", "item": { "acy_process_id__pcs_name": "AIModuleCreate", "acy_step": "AIC_0600", @@ -6459,7 +6488,7 @@ }, { "object": "BPMActivity", - "userkey": "AIModuleCreate AIC_0700", + "userkey": "AIModuleCreate~AIC_0700", "item": { "acy_process_id__pcs_name": "AIModuleCreate", "acy_step": "AIC_0700", @@ -6478,7 +6507,7 @@ }, { "object": "BPMActivity", - "userkey": "AIModuleCreate GDD_SETTINGS_END", + "userkey": "AIModuleCreate~GDD_SETTINGS_END", "item": { "acy_process_id__pcs_name": "AIModuleCreate", "acy_step": "GDD_SETTINGS_END", @@ -6497,7 +6526,7 @@ }, { "object": "BPMActivity", - "userkey": "AiSettingsProcess ASP-0050", + "userkey": "AiSettingsProcess~ASP-0050", "item": { "acy_process_id__pcs_name": "AiSettingsProcess", "acy_step": "ASP-0050", @@ -6516,7 +6545,7 @@ }, { "object": "BPMActivity", - "userkey": "AiSettingsProcess ASP-0075", + "userkey": "AiSettingsProcess~ASP-0075", "item": { "acy_process_id__pcs_name": "AiSettingsProcess", "acy_step": "ASP-0075", @@ -6535,7 +6564,7 @@ }, { "object": "BPMActivity", - "userkey": "AiSettingsProcess ASP-0100", + "userkey": "AiSettingsProcess~ASP-0100", "item": { "acy_process_id__pcs_name": "AiSettingsProcess", "acy_step": "ASP-0100", @@ -6554,7 +6583,7 @@ }, { "object": "BPMActivity", - "userkey": "AiSettingsProcess ASP-0200", + "userkey": "AiSettingsProcess~ASP-0200", "item": { "acy_process_id__pcs_name": "AiSettingsProcess", "acy_step": "ASP-0200", @@ -6573,7 +6602,7 @@ }, { "object": "BPMActivity", - "userkey": "AiSettingsProcess ASP-0400", + "userkey": "AiSettingsProcess~ASP-0400", "item": { "acy_process_id__pcs_name": "AiSettingsProcess", "acy_step": "ASP-0400", @@ -6592,7 +6621,7 @@ }, { "object": "BPMActivity", - "userkey": "AiSettingsProcess ASP-0500", + "userkey": "AiSettingsProcess~ASP-0500", "item": { "acy_process_id__pcs_name": "AiSettingsProcess", "acy_step": "ASP-0500", @@ -6611,7 +6640,7 @@ }, { "object": "BPMActivity", - "userkey": "AiSettingsProcess ASP-BEG", + "userkey": "AiSettingsProcess~ASP-BEG", "item": { "acy_process_id__pcs_name": "AiSettingsProcess", "acy_step": "ASP-BEG", @@ -6630,7 +6659,7 @@ }, { "object": "BPMActivity", - "userkey": "AiSettingsProcess ASP-END", + "userkey": "AiSettingsProcess~ASP-END", "item": { "acy_process_id__pcs_name": "AiSettingsProcess", "acy_step": "ASP-END", @@ -6657,7 +6686,7 @@ "list": [ { "object": "BPMTransition", - "userkey": "AIGenData AIGenData GGD-BEG AIGenData GGD_0050", + "userkey": "AIGenData~AIGenData~GGD-BEG~AIGenData~GGD_0050", "item": { "trs_process_id__pcs_name": "AIGenData", "trs_from_id__acy_process_id__pcs_name": "AIGenData", @@ -6674,7 +6703,7 @@ }, { "object": "BPMTransition", - "userkey": "AIGenData AIGenData GGD_0050 AIGenData GGD_0075", + "userkey": "AIGenData~AIGenData~GGD_0050~AIGenData~GGD_0075", "item": { "trs_process_id__pcs_name": "AIGenData", "trs_from_id__acy_process_id__pcs_name": "AIGenData", @@ -6691,7 +6720,7 @@ }, { "object": "BPMTransition", - "userkey": "AIGenData AIGenData GGD_0050 AIGenData GGD_0100", + "userkey": "AIGenData~AIGenData~GGD_0050~AIGenData~GGD_0100", "item": { "trs_process_id__pcs_name": "AIGenData", "trs_from_id__acy_process_id__pcs_name": "AIGenData", @@ -6708,7 +6737,7 @@ }, { "object": "BPMTransition", - "userkey": "AIGenData AIGenData GGD_0075 AIGenData GDD_SETTINGS_END", + "userkey": "AIGenData~AIGenData~GGD_0075~AIGenData~GDD_SETTINGS_END", "item": { "trs_process_id__pcs_name": "AIGenData", "trs_from_id__acy_process_id__pcs_name": "AIGenData", @@ -6725,12 +6754,29 @@ }, { "object": "BPMTransition", - "userkey": "AIGenData AIGenData GGD_0100 AIGenData GGD_0150", + "userkey": "AIGenData~AIGenData~GGD_0100~AIGenData~GGD_0125", "item": { "trs_process_id__pcs_name": "AIGenData", "trs_from_id__acy_process_id__pcs_name": "AIGenData", "trs_from_id__acy_step": "GGD_0100", "trs_to_id__acy_process_id__pcs_name": "AIGenData", + "trs_to_id__acy_step": "GGD_0125", + "trs_name": null, + "trs_action_id__act_name": null, + "trs_condition": null, + "trs_callback": null, + "trs_alert_id__alt_name": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "BPMTransition", + "userkey": "AIGenData~AIGenData~GGD_0125~AIGenData~GGD_0150", + "item": { + "trs_process_id__pcs_name": "AIGenData", + "trs_from_id__acy_process_id__pcs_name": "AIGenData", + "trs_from_id__acy_step": "GGD_0125", + "trs_to_id__acy_process_id__pcs_name": "AIGenData", "trs_to_id__acy_step": "GGD_0150", "trs_name": null, "trs_action_id__act_name": null, @@ -6742,7 +6788,7 @@ }, { "object": "BPMTransition", - "userkey": "AIGenData AIGenData GGD_0150 AIGenData GGD_0200", + "userkey": "AIGenData~AIGenData~GGD_0150~AIGenData~GGD_0200", "item": { "trs_process_id__pcs_name": "AIGenData", "trs_from_id__acy_process_id__pcs_name": "AIGenData", @@ -6759,7 +6805,7 @@ }, { "object": "BPMTransition", - "userkey": "AIGenData AIGenData GGD_0200 AIGenData GGD-END", + "userkey": "AIGenData~AIGenData~GGD_0200~AIGenData~GGD-END", "item": { "trs_process_id__pcs_name": "AIGenData", "trs_from_id__acy_process_id__pcs_name": "AIGenData", @@ -6776,24 +6822,24 @@ }, { "object": "BPMTransition", - "userkey": "AIGenData AIGenData GGD_0200 AIGenData GGD_0150", + "userkey": "AIGenData~AIGenData~GGD_0200~AIGenData~GGD_0125", "item": { "trs_process_id__pcs_name": "AIGenData", "trs_from_id__acy_process_id__pcs_name": "AIGenData", "trs_from_id__acy_step": "GGD_0200", "trs_to_id__acy_process_id__pcs_name": "AIGenData", - "trs_to_id__acy_step": "GGD_0150", + "trs_to_id__acy_step": "GGD_0125", "trs_name": "Retry", "trs_action_id__act_name": "AI_GENDATA_RETRY", "trs_condition": null, - "trs_callback": "relaunchingGeneration", + "trs_callback": null, "trs_alert_id__alt_name": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "BPMTransition", - "userkey": "AIModuleCreate AIModuleCreate AIC-BEG AIModuleCreate AIC_0050", + "userkey": "AIModuleCreate~AIModuleCreate~AIC-BEG~AIModuleCreate~AIC_0050", "item": { "trs_process_id__pcs_name": "AIModuleCreate", "trs_from_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -6810,7 +6856,7 @@ }, { "object": "BPMTransition", - "userkey": "AIModuleCreate AIModuleCreate AIC_0005 AIModuleCreate AIC_0010", + "userkey": "AIModuleCreate~AIModuleCreate~AIC_0005~AIModuleCreate~AIC_0010", "item": { "trs_process_id__pcs_name": "AIModuleCreate", "trs_from_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -6827,7 +6873,7 @@ }, { "object": "BPMTransition", - "userkey": "AIModuleCreate AIModuleCreate AIC_0005 AIModuleCreate AIC_0100", + "userkey": "AIModuleCreate~AIModuleCreate~AIC_0005~AIModuleCreate~AIC_0100", "item": { "trs_process_id__pcs_name": "AIModuleCreate", "trs_from_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -6844,7 +6890,7 @@ }, { "object": "BPMTransition", - "userkey": "AIModuleCreate AIModuleCreate AIC_0010 AIModuleCreate AIC_0015", + "userkey": "AIModuleCreate~AIModuleCreate~AIC_0010~AIModuleCreate~AIC_0015", "item": { "trs_process_id__pcs_name": "AIModuleCreate", "trs_from_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -6861,7 +6907,7 @@ }, { "object": "BPMTransition", - "userkey": "AIModuleCreate AIModuleCreate AIC_0015 AIModuleCreate AIC_0017", + "userkey": "AIModuleCreate~AIModuleCreate~AIC_0015~AIModuleCreate~AIC_0017", "item": { "trs_process_id__pcs_name": "AIModuleCreate", "trs_from_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -6878,7 +6924,7 @@ }, { "object": "BPMTransition", - "userkey": "AIModuleCreate AIModuleCreate AIC_0017 AIModuleCreate AIC_0020", + "userkey": "AIModuleCreate~AIModuleCreate~AIC_0017~AIModuleCreate~AIC_0020", "item": { "trs_process_id__pcs_name": "AIModuleCreate", "trs_from_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -6895,7 +6941,7 @@ }, { "object": "BPMTransition", - "userkey": "AIModuleCreate AIModuleCreate AIC_0020 AIModuleCreate AIC_0350", + "userkey": "AIModuleCreate~AIModuleCreate~AIC_0020~AIModuleCreate~AIC_0350", "item": { "trs_process_id__pcs_name": "AIModuleCreate", "trs_from_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -6912,7 +6958,7 @@ }, { "object": "BPMTransition", - "userkey": "AIModuleCreate AIModuleCreate AIC_0050 AIModuleCreate AIC_0005", + "userkey": "AIModuleCreate~AIModuleCreate~AIC_0050~AIModuleCreate~AIC_0005", "item": { "trs_process_id__pcs_name": "AIModuleCreate", "trs_from_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -6929,7 +6975,7 @@ }, { "object": "BPMTransition", - "userkey": "AIModuleCreate AIModuleCreate AIC_0050 AIModuleCreate AIC_0075", + "userkey": "AIModuleCreate~AIModuleCreate~AIC_0050~AIModuleCreate~AIC_0075", "item": { "trs_process_id__pcs_name": "AIModuleCreate", "trs_from_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -6946,7 +6992,7 @@ }, { "object": "BPMTransition", - "userkey": "AIModuleCreate AIModuleCreate AIC_0075 AIModuleCreate GDD_SETTINGS_END", + "userkey": "AIModuleCreate~AIModuleCreate~AIC_0075~AIModuleCreate~GDD_SETTINGS_END", "item": { "trs_process_id__pcs_name": "AIModuleCreate", "trs_from_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -6963,7 +7009,7 @@ }, { "object": "BPMTransition", - "userkey": "AIModuleCreate AIModuleCreate AIC_0100 AIModuleCreate AIC_0200", + "userkey": "AIModuleCreate~AIModuleCreate~AIC_0100~AIModuleCreate~AIC_0200", "item": { "trs_process_id__pcs_name": "AIModuleCreate", "trs_from_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -6980,7 +7026,7 @@ }, { "object": "BPMTransition", - "userkey": "AIModuleCreate AIModuleCreate AIC_0200 AIModuleCreate AIC_0300", + "userkey": "AIModuleCreate~AIModuleCreate~AIC_0200~AIModuleCreate~AIC_0300", "item": { "trs_process_id__pcs_name": "AIModuleCreate", "trs_from_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -6997,7 +7043,7 @@ }, { "object": "BPMTransition", - "userkey": "AIModuleCreate AIModuleCreate AIC_0300 AIModuleCreate AIC_0350", + "userkey": "AIModuleCreate~AIModuleCreate~AIC_0300~AIModuleCreate~AIC_0350", "item": { "trs_process_id__pcs_name": "AIModuleCreate", "trs_from_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -7014,7 +7060,7 @@ }, { "object": "BPMTransition", - "userkey": "AIModuleCreate AIModuleCreate AIC_0350 AIModuleCreate AIC_0500", + "userkey": "AIModuleCreate~AIModuleCreate~AIC_0350~AIModuleCreate~AIC_0500", "item": { "trs_process_id__pcs_name": "AIModuleCreate", "trs_from_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -7031,7 +7077,7 @@ }, { "object": "BPMTransition", - "userkey": "AIModuleCreate AIModuleCreate AIC_0400 AIModuleCreate AIC_0500", + "userkey": "AIModuleCreate~AIModuleCreate~AIC_0400~AIModuleCreate~AIC_0500", "item": { "trs_process_id__pcs_name": "AIModuleCreate", "trs_from_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -7048,7 +7094,7 @@ }, { "object": "BPMTransition", - "userkey": "AIModuleCreate AIModuleCreate AIC_0500 AIModuleCreate AIC_0600", + "userkey": "AIModuleCreate~AIModuleCreate~AIC_0500~AIModuleCreate~AIC_0600", "item": { "trs_process_id__pcs_name": "AIModuleCreate", "trs_from_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -7065,7 +7111,7 @@ }, { "object": "BPMTransition", - "userkey": "AIModuleCreate AIModuleCreate AIC_0600 AIModuleCreate AIC-END", + "userkey": "AIModuleCreate~AIModuleCreate~AIC_0600~AIModuleCreate~AIC-END", "item": { "trs_process_id__pcs_name": "AIModuleCreate", "trs_from_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -7082,7 +7128,7 @@ }, { "object": "BPMTransition", - "userkey": "AIModuleCreate AIModuleCreate AIC_0600 AIModuleCreate AIC_0700", + "userkey": "AIModuleCreate~AIModuleCreate~AIC_0600~AIModuleCreate~AIC_0700", "item": { "trs_process_id__pcs_name": "AIModuleCreate", "trs_from_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -7099,7 +7145,7 @@ }, { "object": "BPMTransition", - "userkey": "AiSettingsProcess AiSettingsProcess ASP-0050 AiSettingsProcess ASP-0075", + "userkey": "AiSettingsProcess~AiSettingsProcess~ASP-0050~AiSettingsProcess~ASP-0075", "item": { "trs_process_id__pcs_name": "AiSettingsProcess", "trs_from_id__acy_process_id__pcs_name": "AiSettingsProcess", @@ -7116,7 +7162,7 @@ }, { "object": "BPMTransition", - "userkey": "AiSettingsProcess AiSettingsProcess ASP-0050 AiSettingsProcess ASP-0100", + "userkey": "AiSettingsProcess~AiSettingsProcess~ASP-0050~AiSettingsProcess~ASP-0100", "item": { "trs_process_id__pcs_name": "AiSettingsProcess", "trs_from_id__acy_process_id__pcs_name": "AiSettingsProcess", @@ -7133,7 +7179,7 @@ }, { "object": "BPMTransition", - "userkey": "AiSettingsProcess AiSettingsProcess ASP-0075 AiSettingsProcess ASP-END", + "userkey": "AiSettingsProcess~AiSettingsProcess~ASP-0075~AiSettingsProcess~ASP-END", "item": { "trs_process_id__pcs_name": "AiSettingsProcess", "trs_from_id__acy_process_id__pcs_name": "AiSettingsProcess", @@ -7150,7 +7196,7 @@ }, { "object": "BPMTransition", - "userkey": "AiSettingsProcess AiSettingsProcess ASP-0100 AiSettingsProcess ASP-0200", + "userkey": "AiSettingsProcess~AiSettingsProcess~ASP-0100~AiSettingsProcess~ASP-0200", "item": { "trs_process_id__pcs_name": "AiSettingsProcess", "trs_from_id__acy_process_id__pcs_name": "AiSettingsProcess", @@ -7167,7 +7213,7 @@ }, { "object": "BPMTransition", - "userkey": "AiSettingsProcess AiSettingsProcess ASP-0200 AiSettingsProcess ASP-0400", + "userkey": "AiSettingsProcess~AiSettingsProcess~ASP-0200~AiSettingsProcess~ASP-0400", "item": { "trs_process_id__pcs_name": "AiSettingsProcess", "trs_from_id__acy_process_id__pcs_name": "AiSettingsProcess", @@ -7184,7 +7230,7 @@ }, { "object": "BPMTransition", - "userkey": "AiSettingsProcess AiSettingsProcess ASP-0400 AiSettingsProcess ASP-0500", + "userkey": "AiSettingsProcess~AiSettingsProcess~ASP-0400~AiSettingsProcess~ASP-0500", "item": { "trs_process_id__pcs_name": "AiSettingsProcess", "trs_from_id__acy_process_id__pcs_name": "AiSettingsProcess", @@ -7201,7 +7247,7 @@ }, { "object": "BPMTransition", - "userkey": "AiSettingsProcess AiSettingsProcess ASP-0500 AiSettingsProcess ASP-END", + "userkey": "AiSettingsProcess~AiSettingsProcess~ASP-0500~AiSettingsProcess~ASP-END", "item": { "trs_process_id__pcs_name": "AiSettingsProcess", "trs_from_id__acy_process_id__pcs_name": "AiSettingsProcess", @@ -7218,7 +7264,7 @@ }, { "object": "BPMTransition", - "userkey": "AiSettingsProcess AiSettingsProcess ASP-BEG AiSettingsProcess ASP-0050", + "userkey": "AiSettingsProcess~AiSettingsProcess~ASP-BEG~AiSettingsProcess~ASP-0050", "item": { "trs_process_id__pcs_name": "AiSettingsProcess", "trs_from_id__acy_process_id__pcs_name": "AiSettingsProcess", @@ -7243,7 +7289,7 @@ "list": [ { "object": "BPMData", - "userkey": "AIGenData GDD_SETTINGS_END Forward Page", + "userkey": "AIGenData~GDD_SETTINGS_END~Forward~Page", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIGenData", "dta_activity_id__acy_step": "GDD_SETTINGS_END", @@ -7257,35 +7303,35 @@ }, { "object": "BPMData", - "userkey": "AIGenData GGD-END Forward PARAM:1", + "userkey": "AIGenData~GGD-END~Forward~Page", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIGenData", "dta_activity_id__acy_step": "GGD-END", "dta_group": "Forward", - "dta_name": "PARAM:1", + "dta_name": "Page", "dta_order": 1, - "dta_value": "GGD_0100.Field.row_id", + "dta_value": "[EXPR:HTMLTool.getFormURL(\"Module\", null, \"[PARAM:1]\", \"nav=add\")]", "dta_field_id__fld_name": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "BPMData", - "userkey": "AIGenData GGD-END Forward Page", + "userkey": "AIGenData~GGD-END~Forward~PARAM=1", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIGenData", "dta_activity_id__acy_step": "GGD-END", "dta_group": "Forward", - "dta_name": "Page", + "dta_name": "PARAM:1", "dta_order": 1, - "dta_value": "[EXPR:HTMLTool.getFormURL(\"Module\", null, \"[PARAM:1]\", \"nav=add\")]", + "dta_value": "GGD_0100.Field.row_id", "dta_field_id__fld_name": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "BPMData", - "userkey": "AIGenData GGD_0050 Return Code", + "userkey": "AIGenData~GGD_0050~Return~Code", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIGenData", "dta_activity_id__acy_step": "GGD_0050", @@ -7299,7 +7345,7 @@ }, { "object": "BPMData", - "userkey": "AIGenData GGD_0075 Page Method", + "userkey": "AIGenData~GGD_0075~Page~Method", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIGenData", "dta_activity_id__acy_step": "GGD_0075", @@ -7313,7 +7359,7 @@ }, { "object": "BPMData", - "userkey": "AIGenData GGD_0100 Constraint Mandatory", + "userkey": "AIGenData~GGD_0100~Constraint~Mandatory", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIGenData", "dta_activity_id__acy_step": "GGD_0100", @@ -7327,7 +7373,7 @@ }, { "object": "BPMData", - "userkey": "AIGenData GGD_0100 Filter mdl_type", + "userkey": "AIGenData~GGD_0100~Filter~mdl_type", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIGenData", "dta_activity_id__acy_step": "GGD_0100", @@ -7341,7 +7387,7 @@ }, { "object": "BPMData", - "userkey": "AIGenData GGD_0100 Object Name", + "userkey": "AIGenData~GGD_0100~Object~Name", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIGenData", "dta_activity_id__acy_step": "GGD_0100", @@ -7355,7 +7401,35 @@ }, { "object": "BPMData", - "userkey": "AIGenData GGD_0150 Data json_return", + "userkey": "AIGenData~GGD_0125~Data~nbData", + "item": { + "dta_activity_id__acy_process_id__pcs_name": "AIGenData", + "dta_activity_id__acy_step": "GGD_0125", + "dta_group": "Data", + "dta_name": "nbData", + "dta_order": 2, + "dta_value": null, + "dta_field_id__fld_name": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "BPMData", + "userkey": "AIGenData~GGD_0125~Page~Method", + "item": { + "dta_activity_id__acy_process_id__pcs_name": "AIGenData", + "dta_activity_id__acy_step": "GGD_0125", + "dta_group": "Page", + "dta_name": "Method", + "dta_order": 1, + "dta_value": "params", + "dta_field_id__fld_name": null, + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "BPMData", + "userkey": "AIGenData~GGD_0150~Data~json_return", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIGenData", "dta_activity_id__acy_step": "GGD_0150", @@ -7369,7 +7443,7 @@ }, { "object": "BPMData", - "userkey": "AIGenData GGD_0150 Page Method", + "userkey": "AIGenData~GGD_0150~Page~Method", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIGenData", "dta_activity_id__acy_step": "GGD_0150", @@ -7383,7 +7457,7 @@ }, { "object": "BPMData", - "userkey": "AIGenData GGD_0200 Page Method", + "userkey": "AIGenData~GGD_0200~Page~Method", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIGenData", "dta_activity_id__acy_step": "GGD_0200", @@ -7397,7 +7471,7 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate AIC-BEG Data AI_prompt", + "userkey": "AIModuleCreate~AIC-BEG~Data~AI_prompt", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC-BEG", @@ -7411,7 +7485,7 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate AIC-END Forward Page", + "userkey": "AIModuleCreate~AIC-END~Forward~Page", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC-END", @@ -7425,7 +7499,7 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate AIC_0005 Data AREA:1", + "userkey": "AIModuleCreate~AIC_0005~Data~AREA=1", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0005", @@ -7439,7 +7513,7 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate AIC_0005 Data Template", + "userkey": "AIModuleCreate~AIC_0005~Data~Template", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0005", @@ -7453,7 +7527,7 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate AIC_0005 Question Return", + "userkey": "AIModuleCreate~AIC_0005~Question~Return", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0005", @@ -7467,7 +7541,7 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate AIC_0010 Object Name", + "userkey": "AIModuleCreate~AIC_0010~Object~Name", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0010", @@ -7481,7 +7555,7 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate AIC_0015 Page Method", + "userkey": "AIModuleCreate~AIC_0015~Page~Method", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0015", @@ -7495,7 +7569,7 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate AIC_0017 Field viw_type", + "userkey": "AIModuleCreate~AIC_0017~Field~viw_type", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0017", @@ -7509,7 +7583,7 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate AIC_0017 Field row_module_id", + "userkey": "AIModuleCreate~AIC_0017~Field~row_module_id", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0017", @@ -7523,7 +7597,7 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate AIC_0017 Field viw_icon", + "userkey": "AIModuleCreate~AIC_0017~Field~viw_icon", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0017", @@ -7537,7 +7611,7 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate AIC_0017 Field row_module_id.mdl_name", + "userkey": "AIModuleCreate~AIC_0017~Field~row_module_id.mdl_name", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0017", @@ -7551,7 +7625,7 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate AIC_0017 Object Name", + "userkey": "AIModuleCreate~AIC_0017~Object~Name", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0017", @@ -7565,7 +7639,7 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate AIC_0020 Data Template", + "userkey": "AIModuleCreate~AIC_0020~Data~Template", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0020", @@ -7579,7 +7653,7 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate AIC_0020 Data AREA:1", + "userkey": "AIModuleCreate~AIC_0020~Data~AREA=1", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0020", @@ -7593,7 +7667,7 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate AIC_0050 Return Code", + "userkey": "AIModuleCreate~AIC_0050~Return~Code", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0050", @@ -7607,7 +7681,7 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate AIC_0075 Page Method", + "userkey": "AIModuleCreate~AIC_0075~Page~Method", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0075", @@ -7621,7 +7695,7 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate AIC_0100 Constraint Mandatory", + "userkey": "AIModuleCreate~AIC_0100~Constraint~Mandatory", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0100", @@ -7635,7 +7709,7 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate AIC_0100 Filter mdl_type", + "userkey": "AIModuleCreate~AIC_0100~Filter~mdl_type", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0100", @@ -7649,7 +7723,7 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate AIC_0100 Object Name", + "userkey": "AIModuleCreate~AIC_0100~Object~Name", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0100", @@ -7663,7 +7737,7 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate AIC_0200 Constraint Mandatory", + "userkey": "AIModuleCreate~AIC_0200~Constraint~Mandatory", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0200", @@ -7677,7 +7751,7 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate AIC_0200 Filter row_module_id", + "userkey": "AIModuleCreate~AIC_0200~Filter~row_module_id", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0200", @@ -7691,7 +7765,7 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate AIC_0200 Object Name", + "userkey": "AIModuleCreate~AIC_0200~Object~Name", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0200", @@ -7705,7 +7779,7 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate AIC_0300 Constraint Mandatory", + "userkey": "AIModuleCreate~AIC_0300~Constraint~Mandatory", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0300", @@ -7719,7 +7793,7 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate AIC_0300 Filter row_module_id", + "userkey": "AIModuleCreate~AIC_0300~Filter~row_module_id", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0300", @@ -7733,7 +7807,7 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate AIC_0300 Object Name", + "userkey": "AIModuleCreate~AIC_0300~Object~Name", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0300", @@ -7747,7 +7821,7 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate AIC_0350 Data AI_data", + "userkey": "AIModuleCreate~AIC_0350~Data~AI_data", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0350", @@ -7761,7 +7835,7 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate AIC_0350 Page Method", + "userkey": "AIModuleCreate~AIC_0350~Page~Method", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0350", @@ -7775,7 +7849,7 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate AIC_0400 Data AI_prompt", + "userkey": "AIModuleCreate~AIC_0400~Data~AI_prompt", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0400", @@ -7789,7 +7863,7 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate AIC_0400 Page Method", + "userkey": "AIModuleCreate~AIC_0400~Page~Method", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0400", @@ -7803,7 +7877,7 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate AIC_0500 Data json_return", + "userkey": "AIModuleCreate~AIC_0500~Data~json_return", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0500", @@ -7817,7 +7891,7 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate AIC_0500 Page Method", + "userkey": "AIModuleCreate~AIC_0500~Page~Method", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0500", @@ -7831,7 +7905,7 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate AIC_0600 Page Method", + "userkey": "AIModuleCreate~AIC_0600~Page~Method", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0600", @@ -7845,7 +7919,7 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate AIC_0700 Page Method", + "userkey": "AIModuleCreate~AIC_0700~Page~Method", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "AIC_0700", @@ -7859,7 +7933,7 @@ }, { "object": "BPMData", - "userkey": "AIModuleCreate GDD_SETTINGS_END Forward Page", + "userkey": "AIModuleCreate~GDD_SETTINGS_END~Forward~Page", "item": { "dta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "dta_activity_id__acy_step": "GDD_SETTINGS_END", @@ -7873,7 +7947,7 @@ }, { "object": "BPMData", - "userkey": "AiSettingsProcess ASP-0050 Return Code", + "userkey": "AiSettingsProcess~ASP-0050~Return~Code", "item": { "dta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "dta_activity_id__acy_step": "ASP-0050", @@ -7887,7 +7961,7 @@ }, { "object": "BPMData", - "userkey": "AiSettingsProcess ASP-0075 Page Method", + "userkey": "AiSettingsProcess~ASP-0075~Page~Method", "item": { "dta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "dta_activity_id__acy_step": "ASP-0075", @@ -7901,7 +7975,7 @@ }, { "object": "BPMData", - "userkey": "AiSettingsProcess ASP-0100 Constraint Mandatory", + "userkey": "AiSettingsProcess~ASP-0100~Constraint~Mandatory", "item": { "dta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "dta_activity_id__acy_step": "ASP-0100", @@ -7915,7 +7989,7 @@ }, { "object": "BPMData", - "userkey": "AiSettingsProcess ASP-0100 Object Name", + "userkey": "AiSettingsProcess~ASP-0100~Object~Name", "item": { "dta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "dta_activity_id__acy_step": "ASP-0100", @@ -7929,7 +8003,7 @@ }, { "object": "BPMData", - "userkey": "AiSettingsProcess ASP-0200 Data aiPrvSttUrl", + "userkey": "AiSettingsProcess~ASP-0200~Data~aiPrvSttUrl", "item": { "dta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "dta_activity_id__acy_step": "ASP-0200", @@ -7943,7 +8017,7 @@ }, { "object": "BPMData", - "userkey": "AiSettingsProcess ASP-0200 Data aiPrvCompletionUrl", + "userkey": "AiSettingsProcess~ASP-0200~Data~aiPrvCompletionUrl", "item": { "dta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "dta_activity_id__acy_step": "ASP-0200", @@ -7957,7 +8031,7 @@ }, { "object": "BPMData", - "userkey": "AiSettingsProcess ASP-0200 Data key", + "userkey": "AiSettingsProcess~ASP-0200~Data~key", "item": { "dta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "dta_activity_id__acy_step": "ASP-0200", @@ -7971,7 +8045,7 @@ }, { "object": "BPMData", - "userkey": "AiSettingsProcess ASP-0200 Data aiPrvModelsUrl", + "userkey": "AiSettingsProcess~ASP-0200~Data~aiPrvModelsUrl", "item": { "dta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "dta_activity_id__acy_step": "ASP-0200", @@ -7985,7 +8059,7 @@ }, { "object": "BPMData", - "userkey": "AiSettingsProcess ASP-0200 Data aiPrvDefaultUrl", + "userkey": "AiSettingsProcess~ASP-0200~Data~aiPrvDefaultUrl", "item": { "dta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "dta_activity_id__acy_step": "ASP-0200", @@ -7999,7 +8073,7 @@ }, { "object": "BPMData", - "userkey": "AiSettingsProcess ASP-0200 Page Method", + "userkey": "AiSettingsProcess~ASP-0200~Page~Method", "item": { "dta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "dta_activity_id__acy_step": "ASP-0200", @@ -8013,7 +8087,7 @@ }, { "object": "BPMData", - "userkey": "AiSettingsProcess ASP-0400 GDataestion aiPrvModels", + "userkey": "AiSettingsProcess~ASP-0400~GDataestion~aiPrvModels", "item": { "dta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "dta_activity_id__acy_step": "ASP-0400", @@ -8027,7 +8101,7 @@ }, { "object": "BPMData", - "userkey": "AiSettingsProcess ASP-0400 Page Method", + "userkey": "AiSettingsProcess~ASP-0400~Page~Method", "item": { "dta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "dta_activity_id__acy_step": "ASP-0400", @@ -8041,7 +8115,7 @@ }, { "object": "BPMData", - "userkey": "AiSettingsProcess ASP-0500 Data Template", + "userkey": "AiSettingsProcess~ASP-0500~Data~Template", "item": { "dta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "dta_activity_id__acy_step": "ASP-0500", @@ -8055,7 +8129,7 @@ }, { "object": "BPMData", - "userkey": "AiSettingsProcess ASP-0500 Data AREA:1", + "userkey": "AiSettingsProcess~ASP-0500~Data~AREA=1", "item": { "dta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "dta_activity_id__acy_step": "ASP-0500", @@ -8069,7 +8143,7 @@ }, { "object": "BPMData", - "userkey": "AiSettingsProcess ASP-END Forward Page", + "userkey": "AiSettingsProcess~ASP-END~Forward~Page", "item": { "dta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "dta_activity_id__acy_step": "ASP-END", @@ -8091,7 +8165,7 @@ "list": [ { "object": "BPMHelp", - "userkey": "AIModuleCreate AIC_0400 English", + "userkey": "AIModuleCreate~AIC_0400~ENU", "item": { "hlp_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "hlp_activity_id__acy_step": "AIC_0400", @@ -8103,7 +8177,7 @@ }, { "object": "BPMHelp", - "userkey": "AIModuleCreate AIC_0400 French", + "userkey": "AIModuleCreate~AIC_0400~FRA", "item": { "hlp_activity_id__acy_process_id__pcs_name": "AIModuleCreate", "hlp_activity_id__acy_step": "AIC_0400", @@ -8115,7 +8189,7 @@ }, { "object": "BPMHelp", - "userkey": "AiSettingsProcess ASP-0500 English", + "userkey": "AiSettingsProcess~ASP-0500~ENU", "item": { "hlp_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "hlp_activity_id__acy_step": "ASP-0500", @@ -8127,7 +8201,7 @@ }, { "object": "BPMHelp", - "userkey": "AiSettingsProcess ASP-0500 French", + "userkey": "AiSettingsProcess~ASP-0500~FRA", "item": { "hlp_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", "hlp_activity_id__acy_step": "ASP-0500", @@ -8147,7 +8221,7 @@ "list": [ { "object": "BPMGrantActivity", - "userkey": "ADMIN AIGenData GDD_SETTINGS_END", + "userkey": "ADMIN~AIGenData~GDD_SETTINGS_END", "item": { "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIGenData", @@ -8163,7 +8237,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "ADMIN AIGenData GGD_0050", + "userkey": "ADMIN~AIGenData~GGD_0050", "item": { "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIGenData", @@ -8179,7 +8253,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "ADMIN AIGenData GGD_0075", + "userkey": "ADMIN~AIGenData~GGD_0075", "item": { "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIGenData", @@ -8191,7 +8265,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "ADMIN AIGenData GGD_0100", + "userkey": "ADMIN~AIGenData~GGD_0100", "item": { "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIGenData", @@ -8203,7 +8277,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "ADMIN AIGenData GGD_0150", + "userkey": "ADMIN~AIGenData~GGD_0150", "item": { "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIGenData", @@ -8215,7 +8289,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "ADMIN AIGenData GGD_0200", + "userkey": "ADMIN~AIGenData~GGD_0200", "item": { "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIGenData", @@ -8227,7 +8301,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "ADMIN AIModuleCreate AIC_0005", + "userkey": "ADMIN~AIModuleCreate~AIC_0005", "item": { "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -8243,7 +8317,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "ADMIN AIModuleCreate AIC_0010", + "userkey": "ADMIN~AIModuleCreate~AIC_0010", "item": { "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -8255,7 +8329,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "ADMIN AIModuleCreate AIC_0015", + "userkey": "ADMIN~AIModuleCreate~AIC_0015", "item": { "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -8271,7 +8345,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "ADMIN AIModuleCreate AIC_0017", + "userkey": "ADMIN~AIModuleCreate~AIC_0017", "item": { "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -8287,7 +8361,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "ADMIN AIModuleCreate AIC_0020", + "userkey": "ADMIN~AIModuleCreate~AIC_0020", "item": { "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -8303,7 +8377,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "ADMIN AIModuleCreate AIC_0050", + "userkey": "ADMIN~AIModuleCreate~AIC_0050", "item": { "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -8319,7 +8393,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "ADMIN AIModuleCreate AIC_0075", + "userkey": "ADMIN~AIModuleCreate~AIC_0075", "item": { "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -8331,7 +8405,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "ADMIN AIModuleCreate AIC_0100", + "userkey": "ADMIN~AIModuleCreate~AIC_0100", "item": { "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -8343,7 +8417,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "ADMIN AIModuleCreate AIC_0200", + "userkey": "ADMIN~AIModuleCreate~AIC_0200", "item": { "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -8355,7 +8429,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "ADMIN AIModuleCreate AIC_0300", + "userkey": "ADMIN~AIModuleCreate~AIC_0300", "item": { "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -8370,7 +8444,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "ADMIN AIModuleCreate AIC_0350", + "userkey": "ADMIN~AIModuleCreate~AIC_0350", "item": { "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -8382,7 +8456,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "ADMIN AIModuleCreate AIC_0400", + "userkey": "ADMIN~AIModuleCreate~AIC_0400", "item": { "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -8398,7 +8472,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "ADMIN AIModuleCreate AIC_0500", + "userkey": "ADMIN~AIModuleCreate~AIC_0500", "item": { "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -8410,7 +8484,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "ADMIN AIModuleCreate AIC_0600", + "userkey": "ADMIN~AIModuleCreate~AIC_0600", "item": { "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -8422,7 +8496,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "ADMIN AIModuleCreate AIC_0700", + "userkey": "ADMIN~AIModuleCreate~AIC_0700", "item": { "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -8434,7 +8508,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "ADMIN AiSettingsProcess ASP-0050", + "userkey": "ADMIN~AiSettingsProcess~ASP-0050", "item": { "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", @@ -8450,7 +8524,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "ADMIN AiSettingsProcess ASP-0075", + "userkey": "ADMIN~AiSettingsProcess~ASP-0075", "item": { "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", @@ -8462,7 +8536,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "ADMIN AiSettingsProcess ASP-0100", + "userkey": "ADMIN~AiSettingsProcess~ASP-0100", "item": { "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", @@ -8474,7 +8548,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "ADMIN AiSettingsProcess ASP-0200", + "userkey": "ADMIN~AiSettingsProcess~ASP-0200", "item": { "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", @@ -8486,7 +8560,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "ADMIN AiSettingsProcess ASP-0400", + "userkey": "ADMIN~AiSettingsProcess~ASP-0400", "item": { "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", @@ -8502,7 +8576,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "ADMIN AiSettingsProcess ASP-0500", + "userkey": "ADMIN~AiSettingsProcess~ASP-0500", "item": { "gta_group_id__grp_name": "ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", @@ -8514,7 +8588,23 @@ }, { "object": "BPMGrantActivity", - "userkey": "AI_ADMIN AiSettingsProcess ASP-0050", + "userkey": "AI_ADMIN~AIGenData~GGD_0125", + "item": { + "gta_group_id__grp_name": "AI_ADMIN", + "gta_activity_id__acy_process_id__pcs_name": "AIGenData", + "gta_activity_id__acy_step": "GGD_0125", + "gta_activity_id__acy_name": "params", + "gta_grant": [ + "R", + "W", + "C" + ], + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "BPMGrantActivity", + "userkey": "AI_ADMIN~AiSettingsProcess~ASP-0050", "item": { "gta_group_id__grp_name": "AI_ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", @@ -8530,7 +8620,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "AI_ADMIN AiSettingsProcess ASP-0075", + "userkey": "AI_ADMIN~AiSettingsProcess~ASP-0075", "item": { "gta_group_id__grp_name": "AI_ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", @@ -8542,7 +8632,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "AI_ADMIN AiSettingsProcess ASP-0100", + "userkey": "AI_ADMIN~AiSettingsProcess~ASP-0100", "item": { "gta_group_id__grp_name": "AI_ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", @@ -8554,7 +8644,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "AI_ADMIN AiSettingsProcess ASP-0200", + "userkey": "AI_ADMIN~AiSettingsProcess~ASP-0200", "item": { "gta_group_id__grp_name": "AI_ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", @@ -8566,7 +8656,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "AI_ADMIN AiSettingsProcess ASP-0400", + "userkey": "AI_ADMIN~AiSettingsProcess~ASP-0400", "item": { "gta_group_id__grp_name": "AI_ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", @@ -8582,7 +8672,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "AI_ADMIN AiSettingsProcess ASP-0500", + "userkey": "AI_ADMIN~AiSettingsProcess~ASP-0500", "item": { "gta_group_id__grp_name": "AI_ADMIN", "gta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", @@ -8594,7 +8684,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "AI_DESIGNER AIGenData GDD_SETTINGS_END", + "userkey": "AI_DESIGNER~AIGenData~GDD_SETTINGS_END", "item": { "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIGenData", @@ -8610,7 +8700,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "AI_DESIGNER AIGenData GGD_0050", + "userkey": "AI_DESIGNER~AIGenData~GGD_0050", "item": { "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIGenData", @@ -8626,7 +8716,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "AI_DESIGNER AIGenData GGD_0075", + "userkey": "AI_DESIGNER~AIGenData~GGD_0075", "item": { "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIGenData", @@ -8638,7 +8728,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "AI_DESIGNER AIGenData GGD_0100", + "userkey": "AI_DESIGNER~AIGenData~GGD_0100", "item": { "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIGenData", @@ -8650,7 +8740,23 @@ }, { "object": "BPMGrantActivity", - "userkey": "AI_DESIGNER AIGenData GGD_0150", + "userkey": "AI_DESIGNER~AIGenData~GGD_0125", + "item": { + "gta_group_id__grp_name": "AI_DESIGNER", + "gta_activity_id__acy_process_id__pcs_name": "AIGenData", + "gta_activity_id__acy_step": "GGD_0125", + "gta_activity_id__acy_name": "params", + "gta_grant": [ + "R", + "W", + "C" + ], + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "BPMGrantActivity", + "userkey": "AI_DESIGNER~AIGenData~GGD_0150", "item": { "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIGenData", @@ -8662,7 +8768,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "AI_DESIGNER AIGenData GGD_0200", + "userkey": "AI_DESIGNER~AIGenData~GGD_0200", "item": { "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIGenData", @@ -8674,7 +8780,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "AI_DESIGNER AIModuleCreate AIC_0005", + "userkey": "AI_DESIGNER~AIModuleCreate~AIC_0005", "item": { "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -8690,7 +8796,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "AI_DESIGNER AIModuleCreate AIC_0010", + "userkey": "AI_DESIGNER~AIModuleCreate~AIC_0010", "item": { "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -8702,7 +8808,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "AI_DESIGNER AIModuleCreate AIC_0015", + "userkey": "AI_DESIGNER~AIModuleCreate~AIC_0015", "item": { "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -8718,7 +8824,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "AI_DESIGNER AIModuleCreate AIC_0017", + "userkey": "AI_DESIGNER~AIModuleCreate~AIC_0017", "item": { "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -8734,7 +8840,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "AI_DESIGNER AIModuleCreate AIC_0020", + "userkey": "AI_DESIGNER~AIModuleCreate~AIC_0020", "item": { "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -8750,7 +8856,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "AI_DESIGNER AIModuleCreate AIC_0050", + "userkey": "AI_DESIGNER~AIModuleCreate~AIC_0050", "item": { "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -8766,7 +8872,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "AI_DESIGNER AIModuleCreate AIC_0075", + "userkey": "AI_DESIGNER~AIModuleCreate~AIC_0075", "item": { "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -8778,7 +8884,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "AI_DESIGNER AIModuleCreate AIC_0100", + "userkey": "AI_DESIGNER~AIModuleCreate~AIC_0100", "item": { "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -8790,7 +8896,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "AI_DESIGNER AIModuleCreate AIC_0200", + "userkey": "AI_DESIGNER~AIModuleCreate~AIC_0200", "item": { "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -8802,7 +8908,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "AI_DESIGNER AIModuleCreate AIC_0300", + "userkey": "AI_DESIGNER~AIModuleCreate~AIC_0300", "item": { "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -8817,7 +8923,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "AI_DESIGNER AIModuleCreate AIC_0350", + "userkey": "AI_DESIGNER~AIModuleCreate~AIC_0350", "item": { "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -8829,7 +8935,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "AI_DESIGNER AIModuleCreate AIC_0500", + "userkey": "AI_DESIGNER~AIModuleCreate~AIC_0500", "item": { "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -8841,7 +8947,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "AI_DESIGNER AIModuleCreate AIC_0600", + "userkey": "AI_DESIGNER~AIModuleCreate~AIC_0600", "item": { "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -8853,7 +8959,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "AI_DESIGNER AIModuleCreate AIC_0700", + "userkey": "AI_DESIGNER~AIModuleCreate~AIC_0700", "item": { "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AIModuleCreate", @@ -8868,7 +8974,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "AI_DESIGNER AiSettingsProcess ASP-0050", + "userkey": "AI_DESIGNER~AiSettingsProcess~ASP-0050", "item": { "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", @@ -8884,7 +8990,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "AI_DESIGNER AiSettingsProcess ASP-0075", + "userkey": "AI_DESIGNER~AiSettingsProcess~ASP-0075", "item": { "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", @@ -8896,7 +9002,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "AI_DESIGNER AiSettingsProcess ASP-0100", + "userkey": "AI_DESIGNER~AiSettingsProcess~ASP-0100", "item": { "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", @@ -8908,7 +9014,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "AI_DESIGNER AiSettingsProcess ASP-0200", + "userkey": "AI_DESIGNER~AiSettingsProcess~ASP-0200", "item": { "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", @@ -8920,7 +9026,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "AI_DESIGNER AiSettingsProcess ASP-0400", + "userkey": "AI_DESIGNER~AiSettingsProcess~ASP-0400", "item": { "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", @@ -8936,7 +9042,7 @@ }, { "object": "BPMGrantActivity", - "userkey": "AI_DESIGNER AiSettingsProcess ASP-0500", + "userkey": "AI_DESIGNER~AiSettingsProcess~ASP-0500", "item": { "gta_group_id__grp_name": "AI_DESIGNER", "gta_activity_id__acy_process_id__pcs_name": "AiSettingsProcess", @@ -8956,7 +9062,7 @@ "list": [ { "object": "BPMGrantProcess", - "userkey": "ADMIN AIModuleCreate", + "userkey": "ADMIN~AIModuleCreate", "item": { "gtp_group_id__grp_name": "ADMIN", "gtp_process_id__pcs_name": "AIModuleCreate", @@ -8970,7 +9076,7 @@ }, { "object": "BPMGrantProcess", - "userkey": "AI_DESIGNER AIGenData", + "userkey": "AI_DESIGNER~AIGenData", "item": { "gtp_group_id__grp_name": "AI_DESIGNER", "gtp_process_id__pcs_name": "AIGenData", @@ -8983,7 +9089,7 @@ }, { "object": "BPMGrantProcess", - "userkey": "AI_DESIGNER AIModuleCreate", + "userkey": "AI_DESIGNER~AIModuleCreate", "item": { "gtp_group_id__grp_name": "AI_DESIGNER", "gtp_process_id__pcs_name": "AIModuleCreate", @@ -8993,7 +9099,7 @@ }, { "object": "BPMGrantProcess", - "userkey": "AI_DESIGNER AiSettingsProcess", + "userkey": "AI_DESIGNER~AiSettingsProcess", "item": { "gtp_group_id__grp_name": "AI_DESIGNER", "gtp_process_id__pcs_name": "AiSettingsProcess", @@ -9006,7 +9112,7 @@ }, { "object": "BPMGrantProcess", - "userkey": "DESIGNER AIModuleCreate", + "userkey": "DESIGNER~AIModuleCreate", "item": { "gtp_group_id__grp_name": "DESIGNER", "gtp_process_id__pcs_name": "AIModuleCreate", @@ -9028,7 +9134,7 @@ "list": [ { "object": "Map", - "userkey": "AIDomain AIModuleCreate 150", + "userkey": "AIDomain~BPMProcess(AIModuleCreate)~150", "item": { "map_domain_id__obd_name": "AIDomain", "map_object": { @@ -9045,7 +9151,7 @@ }, { "object": "Map", - "userkey": "AIDomain AIGenData 200", + "userkey": "AIDomain~BPMProcess(AIGenData)~200", "item": { "map_domain_id__obd_name": "AIDomain", "map_object": { @@ -9062,7 +9168,7 @@ }, { "object": "Map", - "userkey": "AIDomain AIChatBot 300", + "userkey": "AIDomain~ObjectExternal(AIChatBot)~300", "item": { "map_domain_id__obd_name": "AIDomain", "map_object": { @@ -9079,7 +9185,7 @@ }, { "object": "Map", - "userkey": "AIDomain AiSettingsProcess 300", + "userkey": "AIDomain~BPMProcess(AiSettingsProcess)~300", "item": { "map_domain_id__obd_name": "AIDomain", "map_object": { @@ -9096,7 +9202,7 @@ }, { "object": "Map", - "userkey": "AIDomain AIProvider 400", + "userkey": "AIDomain~ObjectInternal(AIProvider)~400", "item": { "map_domain_id__obd_name": "AIDomain", "map_object": { @@ -9121,7 +9227,7 @@ "list": [ { "object": "ViewItem", - "userkey": "AIChatVue 1", + "userkey": "AIChatVue~1", "item": { "vwi_view_id__viw_name": "AIChatVue", "vwi_position": 1, @@ -9145,7 +9251,7 @@ }, { "object": "ViewItem", - "userkey": "AIMonitoring 3", + "userkey": "AIMonitoring~3", "item": { "vwi_view_id__viw_name": "AIMonitoring", "vwi_position": 3, @@ -9169,7 +9275,7 @@ }, { "object": "ViewItem", - "userkey": "AIMonitoring 4", + "userkey": "AIMonitoring~4", "item": { "vwi_view_id__viw_name": "AIMonitoring", "vwi_position": 4, @@ -9193,7 +9299,7 @@ }, { "object": "ViewItem", - "userkey": "AIscope 1", + "userkey": "AIscope~1", "item": { "vwi_view_id__viw_name": "AIscope", "vwi_position": 1, @@ -9217,7 +9323,7 @@ }, { "object": "ViewItem", - "userkey": "AIscope 2", + "userkey": "AIscope~2", "item": { "vwi_view_id__viw_name": "AIscope", "vwi_position": 2, @@ -9241,7 +9347,7 @@ }, { "object": "ViewItem", - "userkey": "AIscope 3", + "userkey": "AIscope~3", "item": { "vwi_view_id__viw_name": "AIscope", "vwi_position": 3, @@ -9265,7 +9371,7 @@ }, { "object": "ViewItem", - "userkey": "AIscope 4", + "userkey": "AIscope~4", "item": { "vwi_view_id__viw_name": "AIscope", "vwi_position": 4, @@ -9289,7 +9395,7 @@ }, { "object": "ViewItem", - "userkey": "AIViewExpTool 1", + "userkey": "AIViewExpTool~1", "item": { "vwi_view_id__viw_name": "AIViewExpTool", "vwi_position": 1, @@ -9313,7 +9419,7 @@ }, { "object": "ViewItem", - "userkey": "AIViewExpTool 2", + "userkey": "AIViewExpTool~2", "item": { "vwi_view_id__viw_name": "AIViewExpTool", "vwi_position": 2, @@ -9345,7 +9451,7 @@ "list": [ { "object": "Resource", - "userkey": "responsive5 * CHATBOT", + "userkey": "Disposition(responsive5)~ANY~CHATBOT", "item": { "res_object": { "item": {"dis_code": "responsive5"}, @@ -9369,7 +9475,7 @@ }, { "object": "Resource", - "userkey": "responsive5 * CHATBOT_SCRIPT", + "userkey": "Disposition(responsive5)~ANY~CHATBOT_SCRIPT", "item": { "res_object": { "item": {"dis_code": "responsive5"}, @@ -9393,7 +9499,7 @@ }, { "object": "Resource", - "userkey": "responsive5 * SCRIPT_AI", + "userkey": "Disposition(responsive5)~ANY~SCRIPT_AI", "item": { "res_object": { "item": {"dis_code": "responsive5"}, @@ -9417,7 +9523,7 @@ }, { "object": "Resource", - "userkey": "AiEnhancedSimplicite * SCRIPT", + "userkey": "Disposition(AiEnhancedSimplicite)~ANY~SCRIPT", "item": { "res_object": { "item": {"dis_code": "AiEnhancedSimplicite"}, @@ -9441,7 +9547,7 @@ }, { "object": "Resource", - "userkey": "default * AI_STYLE", + "userkey": "Disposition(default)~ANY~AI_STYLE", "item": { "res_object": { "item": {"dis_code": "default"}, @@ -9465,7 +9571,7 @@ }, { "object": "Resource", - "userkey": "default * AI", + "userkey": "Disposition(default)~ANY~AI", "item": { "res_object": { "item": {"dis_code": "default"}, @@ -9489,7 +9595,7 @@ }, { "object": "Resource", - "userkey": "default * VIEW_AI", + "userkey": "Disposition(default)~ANY~VIEW_AI", "item": { "res_object": { "item": {"dis_code": "default"}, @@ -9513,7 +9619,7 @@ }, { "object": "Resource", - "userkey": "default * ai_module", + "userkey": "Disposition(default)~ANY~ai_module", "item": { "res_object": { "item": {"dis_code": "default"}, @@ -9537,7 +9643,7 @@ }, { "object": "Resource", - "userkey": "default * AiJsTools", + "userkey": "Disposition(default)~ANY~AiJsTools", "item": { "res_object": { "item": {"dis_code": "default"}, @@ -9561,7 +9667,7 @@ }, { "object": "Resource", - "userkey": "AIChatBot * STYLES", + "userkey": "ObjectExternal(AIChatBot)~ANY~STYLES", "item": { "res_object": { "item": {"obe_name": "AIChatBot"}, @@ -9585,7 +9691,7 @@ }, { "object": "Resource", - "userkey": "AIChatBot * HTML", + "userkey": "ObjectExternal(AIChatBot)~ANY~HTML", "item": { "res_object": { "item": {"obe_name": "AIChatBot"}, @@ -9609,7 +9715,7 @@ }, { "object": "Resource", - "userkey": "AIChatBot * SCRIPT", + "userkey": "ObjectExternal(AIChatBot)~ANY~SCRIPT", "item": { "res_object": { "item": {"obe_name": "AIChatBot"}, @@ -9633,13 +9739,13 @@ }, { "object": "Resource", - "userkey": "AIMetricsChat * STYLES", + "userkey": "ObjectExternal(AIExpTool)~ANY~STYLES", "item": { "res_object": { - "item": {"obe_name": "AIMetricsChat"}, + "item": {"obe_name": "AIExpTool"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIMetricsChat", + "userkeylabel": "AIExpTool", "object": "ObjectExternal" }, "res_type": "CSS", @@ -9647,7 +9753,7 @@ "res_code": "STYLES", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AIMetricsChat/STYLES.less", + "path": "resources/ObjectExternal/AIExpTool/STYLES.less", "mime": "text/x-less", "name": "STYLES.less" }, @@ -9657,13 +9763,13 @@ }, { "object": "Resource", - "userkey": "AIMetricsChat * HTML", + "userkey": "ObjectExternal(AIExpTool)~ANY~HTML", "item": { "res_object": { - "item": {"obe_name": "AIMetricsChat"}, + "item": {"obe_name": "AIExpTool"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIMetricsChat", + "userkeylabel": "AIExpTool", "object": "ObjectExternal" }, "res_type": "HTML", @@ -9671,7 +9777,7 @@ "res_code": "HTML", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AIMetricsChat/HTML.html", + "path": "resources/ObjectExternal/AIExpTool/HTML.html", "mime": "text/html", "name": "HTML.html" }, @@ -9681,13 +9787,13 @@ }, { "object": "Resource", - "userkey": "AIMetricsChat * SCRIPT", + "userkey": "ObjectExternal(AIExpTool)~ANY~SCRIPT", "item": { "res_object": { - "item": {"obe_name": "AIMetricsChat"}, + "item": {"obe_name": "AIExpTool"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIMetricsChat", + "userkeylabel": "AIExpTool", "object": "ObjectExternal" }, "res_type": "JS", @@ -9695,7 +9801,7 @@ "res_code": "SCRIPT", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AIMetricsChat/SCRIPT.js", + "path": "resources/ObjectExternal/AIExpTool/SCRIPT.js", "mime": "text/javascript", "name": "SCRIPT.js" }, @@ -9705,23 +9811,23 @@ }, { "object": "Resource", - "userkey": "AIExpTool * STYLES", + "userkey": "ObjectExternal(AIProcessResource)~ANY~CHAT_BOT_CSS", "item": { "res_object": { - "item": {"obe_name": "AIExpTool"}, + "item": {"obe_name": "AIProcessResource"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIExpTool", + "userkeylabel": "AIProcessResource", "object": "ObjectExternal" }, "res_type": "CSS", "res_lang": "ANY", - "res_code": "STYLES", + "res_code": "CHAT_BOT_CSS", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AIExpTool/STYLES.less", + "path": "resources/ObjectExternal/AIProcessResource/CHAT_BOT_CSS.less", "mime": "text/x-less", - "name": "STYLES.less" + "name": "CHAT_BOT_CSS.less" }, "res_image": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -9729,23 +9835,23 @@ }, { "object": "Resource", - "userkey": "AIExpTool * HTML", + "userkey": "ObjectExternal(AIProcessResource)~ANY~CHAT_BOT_MODEL", "item": { "res_object": { - "item": {"obe_name": "AIExpTool"}, + "item": {"obe_name": "AIProcessResource"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIExpTool", + "userkeylabel": "AIProcessResource", "object": "ObjectExternal" }, "res_type": "HTML", "res_lang": "ANY", - "res_code": "HTML", + "res_code": "CHAT_BOT_MODEL", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AIExpTool/HTML.html", + "path": "resources/ObjectExternal/AIProcessResource/CHAT_BOT_MODEL.html", "mime": "text/html", - "name": "HTML.html" + "name": "CHAT_BOT_MODEL.html" }, "res_image": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -9753,23 +9859,23 @@ }, { "object": "Resource", - "userkey": "AIExpTool * SCRIPT", + "userkey": "ObjectExternal(AIProcessResource)~ANY~AI_GEN_MODEL", "item": { "res_object": { - "item": {"obe_name": "AIExpTool"}, + "item": {"obe_name": "AIProcessResource"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIExpTool", + "userkeylabel": "AIProcessResource", "object": "ObjectExternal" }, "res_type": "JS", "res_lang": "ANY", - "res_code": "SCRIPT", + "res_code": "AI_GEN_MODEL", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AIExpTool/SCRIPT.js", + "path": "resources/ObjectExternal/AIProcessResource/AI_GEN_MODEL.js", "mime": "text/javascript", - "name": "SCRIPT.js" + "name": "AI_GEN_MODEL.js" }, "res_image": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -9777,23 +9883,23 @@ }, { "object": "Resource", - "userkey": "AiMonitoring * STYLES", + "userkey": "ObjectExternal(AIProcessResource)~ANY~CHAT_BOT_SCRIPT", "item": { "res_object": { - "item": {"obe_name": "AiMonitoring"}, + "item": {"obe_name": "AIProcessResource"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AiMonitoring", + "userkeylabel": "AIProcessResource", "object": "ObjectExternal" }, - "res_type": "CSS", + "res_type": "JS", "res_lang": "ANY", - "res_code": "STYLES", + "res_code": "CHAT_BOT_SCRIPT", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AiMonitoring/STYLES.less", - "mime": "text/x-less", - "name": "STYLES.less" + "path": "resources/ObjectExternal/AIProcessResource/CHAT_BOT_SCRIPT.js", + "mime": "text/javascript", + "name": "CHAT_BOT_SCRIPT.js" }, "res_image": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -9801,23 +9907,23 @@ }, { "object": "Resource", - "userkey": "AiMonitoring * HTML", + "userkey": "ObjectExternal(AIProcessResource)~ANY~CONTEXT_DIRECT_PROMPT", "item": { "res_object": { - "item": {"obe_name": "AiMonitoring"}, + "item": {"obe_name": "AIProcessResource"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AiMonitoring", + "userkeylabel": "AIProcessResource", "object": "ObjectExternal" }, - "res_type": "HTML", + "res_type": "OTHER", "res_lang": "ANY", - "res_code": "HTML", + "res_code": "CONTEXT_DIRECT_PROMPT", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AiMonitoring/HTML.html", - "mime": "text/html", - "name": "HTML.html" + "path": "resources/ObjectExternal/AIProcessResource/CONTEXT_DIRECT_PROMPT.text", + "mime": "application/octet-stream", + "name": "CONTEXT_DIRECT_PROMPT.text" }, "res_image": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -9825,23 +9931,23 @@ }, { "object": "Resource", - "userkey": "AiMonitoring French HTML", + "userkey": "ObjectExternal(AIProcessResource)~ANY~CONTEXT_INTERACTION_PROMPT", "item": { "res_object": { - "item": {"obe_name": "AiMonitoring"}, + "item": {"obe_name": "AIProcessResource"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AiMonitoring", + "userkeylabel": "AIProcessResource", "object": "ObjectExternal" }, - "res_type": "HTML", - "res_lang": "FRA", - "res_code": "HTML", + "res_type": "OTHER", + "res_lang": "ANY", + "res_code": "CONTEXT_INTERACTION_PROMPT", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AiMonitoring/FRA/HTML.html", - "mime": "text/html", - "name": "HTML.html" + "path": "resources/ObjectExternal/AIProcessResource/CONTEXT_INTERACTION_PROMPT.text", + "mime": "application/octet-stream", + "name": "CONTEXT_INTERACTION_PROMPT.text" }, "res_image": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -9849,23 +9955,23 @@ }, { "object": "Resource", - "userkey": "AiMonitoring * SCRIPT", + "userkey": "ObjectExternal(AIProcessResource)~ANY~CROSSTABLE_PROMPT", "item": { "res_object": { - "item": {"obe_name": "AiMonitoring"}, + "item": {"obe_name": "AIProcessResource"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AiMonitoring", + "userkeylabel": "AIProcessResource", "object": "ObjectExternal" }, - "res_type": "JS", + "res_type": "OTHER", "res_lang": "ANY", - "res_code": "SCRIPT", + "res_code": "CROSSTABLE_PROMPT", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AiMonitoring/SCRIPT.js", - "mime": "text/javascript", - "name": "SCRIPT.js" + "path": "resources/ObjectExternal/AIProcessResource/CROSSTABLE_PROMPT.text", + "mime": "application/octet-stream", + "name": "CROSSTABLE_PROMPT.text" }, "res_image": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -9873,7 +9979,7 @@ }, { "object": "Resource", - "userkey": "AIProcessResource * CHAT_BOT_CSS", + "userkey": "ObjectExternal(AIProcessResource)~ANY~MODELE_CLASSE", "item": { "res_object": { "item": {"obe_name": "AIProcessResource"}, @@ -9882,14 +9988,14 @@ "userkeylabel": "AIProcessResource", "object": "ObjectExternal" }, - "res_type": "CSS", + "res_type": "OTHER", "res_lang": "ANY", - "res_code": "CHAT_BOT_CSS", + "res_code": "MODELE_CLASSE", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AIProcessResource/CHAT_BOT_CSS.less", - "mime": "text/x-less", - "name": "CHAT_BOT_CSS.less" + "path": "resources/ObjectExternal/AIProcessResource/MODELE_CLASSE.text", + "mime": "application/octet-stream", + "name": "MODELE_CLASSE.text" }, "res_image": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -9897,23 +10003,23 @@ }, { "object": "Resource", - "userkey": "AIProcessResource * CHAT_BOT_MODEL", + "userkey": "ObjectExternal(AiMonitoring)~ANY~STYLES", "item": { "res_object": { - "item": {"obe_name": "AIProcessResource"}, + "item": {"obe_name": "AiMonitoring"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIProcessResource", + "userkeylabel": "AiMonitoring", "object": "ObjectExternal" }, - "res_type": "HTML", + "res_type": "CSS", "res_lang": "ANY", - "res_code": "CHAT_BOT_MODEL", + "res_code": "STYLES", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AIProcessResource/CHAT_BOT_MODEL.html", - "mime": "text/html", - "name": "CHAT_BOT_MODEL.html" + "path": "resources/ObjectExternal/AiMonitoring/STYLES.less", + "mime": "text/x-less", + "name": "STYLES.less" }, "res_image": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -9921,23 +10027,23 @@ }, { "object": "Resource", - "userkey": "AIProcessResource * AI_GEN_MODEL", + "userkey": "ObjectExternal(AiMonitoring)~ANY~HTML", "item": { "res_object": { - "item": {"obe_name": "AIProcessResource"}, + "item": {"obe_name": "AiMonitoring"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIProcessResource", + "userkeylabel": "AiMonitoring", "object": "ObjectExternal" }, - "res_type": "JS", + "res_type": "HTML", "res_lang": "ANY", - "res_code": "AI_GEN_MODEL", + "res_code": "HTML", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AIProcessResource/AI_GEN_MODEL.js", - "mime": "text/javascript", - "name": "AI_GEN_MODEL.js" + "path": "resources/ObjectExternal/AiMonitoring/HTML.html", + "mime": "text/html", + "name": "HTML.html" }, "res_image": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -9945,23 +10051,23 @@ }, { "object": "Resource", - "userkey": "AIProcessResource * CHAT_BOT_SCRIPT", + "userkey": "ObjectExternal(AiMonitoring)~FRA~HTML", "item": { "res_object": { - "item": {"obe_name": "AIProcessResource"}, + "item": {"obe_name": "AiMonitoring"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIProcessResource", + "userkeylabel": "AiMonitoring", "object": "ObjectExternal" }, - "res_type": "JS", - "res_lang": "ANY", - "res_code": "CHAT_BOT_SCRIPT", + "res_type": "HTML", + "res_lang": "FRA", + "res_code": "HTML", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AIProcessResource/CHAT_BOT_SCRIPT.js", - "mime": "text/javascript", - "name": "CHAT_BOT_SCRIPT.js" + "path": "resources/ObjectExternal/AiMonitoring/FRA/HTML.html", + "mime": "text/html", + "name": "HTML.html" }, "res_image": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -9969,23 +10075,23 @@ }, { "object": "Resource", - "userkey": "AIProcessResource * CONTEXT_DIRECT_PROMPT", + "userkey": "ObjectExternal(AiMonitoring)~ANY~SCRIPT", "item": { "res_object": { - "item": {"obe_name": "AIProcessResource"}, + "item": {"obe_name": "AiMonitoring"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIProcessResource", + "userkeylabel": "AiMonitoring", "object": "ObjectExternal" }, - "res_type": "OTHER", + "res_type": "JS", "res_lang": "ANY", - "res_code": "CONTEXT_DIRECT_PROMPT", + "res_code": "SCRIPT", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AIProcessResource/CONTEXT_DIRECT_PROMPT.text", - "mime": "application/octet-stream", - "name": "CONTEXT_DIRECT_PROMPT.text" + "path": "resources/ObjectExternal/AiMonitoring/SCRIPT.js", + "mime": "text/javascript", + "name": "SCRIPT.js" }, "res_image": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -9993,23 +10099,23 @@ }, { "object": "Resource", - "userkey": "AIProcessResource * CONTEXT_INTERACTION_PROMPT", + "userkey": "ObjectExternal(AIPromptTool)~ANY~STYLES", "item": { "res_object": { - "item": {"obe_name": "AIProcessResource"}, + "item": {"obe_name": "AIPromptTool"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIProcessResource", + "userkeylabel": "AIPromptTool", "object": "ObjectExternal" }, - "res_type": "OTHER", + "res_type": "CSS", "res_lang": "ANY", - "res_code": "CONTEXT_INTERACTION_PROMPT", + "res_code": "STYLES", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AIProcessResource/CONTEXT_INTERACTION_PROMPT.text", - "mime": "application/octet-stream", - "name": "CONTEXT_INTERACTION_PROMPT.text" + "path": "resources/ObjectExternal/AIPromptTool/STYLES.less", + "mime": "text/x-less", + "name": "STYLES.less" }, "res_image": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -10017,23 +10123,23 @@ }, { "object": "Resource", - "userkey": "AIProcessResource * CROSSTABLE_PROMPT", + "userkey": "ObjectExternal(AIPromptTool)~ANY~HTML", "item": { "res_object": { - "item": {"obe_name": "AIProcessResource"}, + "item": {"obe_name": "AIPromptTool"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIProcessResource", + "userkeylabel": "AIPromptTool", "object": "ObjectExternal" }, - "res_type": "OTHER", + "res_type": "HTML", "res_lang": "ANY", - "res_code": "CROSSTABLE_PROMPT", + "res_code": "HTML", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AIProcessResource/CROSSTABLE_PROMPT.text", - "mime": "application/octet-stream", - "name": "CROSSTABLE_PROMPT.text" + "path": "resources/ObjectExternal/AIPromptTool/HTML.html", + "mime": "text/html", + "name": "HTML.html" }, "res_image": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -10041,23 +10147,23 @@ }, { "object": "Resource", - "userkey": "AIProcessResource * MODELE_CLASSE", + "userkey": "ObjectExternal(AIPromptTool)~ANY~SCRIPT", "item": { "res_object": { - "item": {"obe_name": "AIProcessResource"}, + "item": {"obe_name": "AIPromptTool"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIProcessResource", + "userkeylabel": "AIPromptTool", "object": "ObjectExternal" }, - "res_type": "OTHER", + "res_type": "JS", "res_lang": "ANY", - "res_code": "MODELE_CLASSE", + "res_code": "SCRIPT", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AIProcessResource/MODELE_CLASSE.text", - "mime": "application/octet-stream", - "name": "MODELE_CLASSE.text" + "path": "resources/ObjectExternal/AIPromptTool/SCRIPT.js", + "mime": "text/javascript", + "name": "SCRIPT.js" }, "res_image": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -10065,13 +10171,13 @@ }, { "object": "Resource", - "userkey": "AIPromptTool * STYLES", + "userkey": "ObjectExternal(AIMetricsChat)~ANY~STYLES", "item": { "res_object": { - "item": {"obe_name": "AIPromptTool"}, + "item": {"obe_name": "AIMetricsChat"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIPromptTool", + "userkeylabel": "AIMetricsChat", "object": "ObjectExternal" }, "res_type": "CSS", @@ -10079,7 +10185,7 @@ "res_code": "STYLES", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AIPromptTool/STYLES.less", + "path": "resources/ObjectExternal/AIMetricsChat/STYLES.less", "mime": "text/x-less", "name": "STYLES.less" }, @@ -10089,13 +10195,13 @@ }, { "object": "Resource", - "userkey": "AIPromptTool * HTML", + "userkey": "ObjectExternal(AIMetricsChat)~ANY~HTML", "item": { "res_object": { - "item": {"obe_name": "AIPromptTool"}, + "item": {"obe_name": "AIMetricsChat"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIPromptTool", + "userkeylabel": "AIMetricsChat", "object": "ObjectExternal" }, "res_type": "HTML", @@ -10103,7 +10209,7 @@ "res_code": "HTML", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AIPromptTool/HTML.html", + "path": "resources/ObjectExternal/AIMetricsChat/HTML.html", "mime": "text/html", "name": "HTML.html" }, @@ -10113,13 +10219,13 @@ }, { "object": "Resource", - "userkey": "AIPromptTool * SCRIPT", + "userkey": "ObjectExternal(AIMetricsChat)~ANY~SCRIPT", "item": { "res_object": { - "item": {"obe_name": "AIPromptTool"}, + "item": {"obe_name": "AIMetricsChat"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIPromptTool", + "userkeylabel": "AIMetricsChat", "object": "ObjectExternal" }, "res_type": "JS", @@ -10127,7 +10233,7 @@ "res_code": "SCRIPT", "res_cached": false, "res_file": { - "path": "resources/ObjectExternal/AIPromptTool/SCRIPT.js", + "path": "resources/ObjectExternal/AIMetricsChat/SCRIPT.js", "mime": "text/javascript", "name": "SCRIPT.js" }, @@ -10137,23 +10243,23 @@ }, { "object": "Resource", - "userkey": "AiGroupGuiDesc * AI_DOMAIN_TEMPLATE_DESC_ENU", + "userkey": "ObjectInternal(AiMetricsHist)~ANY~SCRIPT", "item": { "res_object": { - "item": {"obo_name": "AiGroupGuiDesc"}, + "item": {"obo_name": "AiMetricsHist"}, "icon": "img/system/business_object", "label": "Business object", - "userkeylabel": "AiGroupGuiDesc", + "userkeylabel": "AiMetricsHist", "object": "ObjectInternal" }, - "res_type": "MD", + "res_type": "JS", "res_lang": "ANY", - "res_code": "AI_DOMAIN_TEMPLATE_DESC_ENU", + "res_code": "SCRIPT", "res_cached": false, "res_file": { - "path": "resources/ObjectInternal/AiGroupGuiDesc/AI_DOMAIN_TEMPLATE_DESC_ENU.text", - "mime": "application/octet-stream", - "name": "AI_DOMAIN_TEMPLATE_DESC_ENU.text" + "path": "resources/ObjectInternal/AiMetricsHist/SCRIPT.js", + "mime": "text/javascript", + "name": "SCRIPT.js" }, "res_image": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -10161,7 +10267,7 @@ }, { "object": "Resource", - "userkey": "AiGroupGuiDesc * AI_DOMAIN_TEMPLATE_DESC_FRA", + "userkey": "ObjectInternal(AiGroupGuiDesc)~ANY~AI_DOMAIN_TEMPLATE_DESC_ENU", "item": { "res_object": { "item": {"obo_name": "AiGroupGuiDesc"}, @@ -10172,12 +10278,12 @@ }, "res_type": "MD", "res_lang": "ANY", - "res_code": "AI_DOMAIN_TEMPLATE_DESC_FRA", + "res_code": "AI_DOMAIN_TEMPLATE_DESC_ENU", "res_cached": false, "res_file": { - "path": "resources/ObjectInternal/AiGroupGuiDesc/AI_DOMAIN_TEMPLATE_DESC_FRA.text", + "path": "resources/ObjectInternal/AiGroupGuiDesc/AI_DOMAIN_TEMPLATE_DESC_ENU.text", "mime": "application/octet-stream", - "name": "AI_DOMAIN_TEMPLATE_DESC_FRA.text" + "name": "AI_DOMAIN_TEMPLATE_DESC_ENU.text" }, "res_image": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -10185,7 +10291,7 @@ }, { "object": "Resource", - "userkey": "AiGroupGuiDesc * AI_FORM_ZONE_DESC_ENU", + "userkey": "ObjectInternal(AiGroupGuiDesc)~ANY~AI_DOMAIN_TEMPLATE_DESC_FRA", "item": { "res_object": { "item": {"obo_name": "AiGroupGuiDesc"}, @@ -10196,12 +10302,12 @@ }, "res_type": "MD", "res_lang": "ANY", - "res_code": "AI_FORM_ZONE_DESC_ENU", + "res_code": "AI_DOMAIN_TEMPLATE_DESC_FRA", "res_cached": false, "res_file": { - "path": "resources/ObjectInternal/AiGroupGuiDesc/AI_FORM_ZONE_DESC_ENU.text", + "path": "resources/ObjectInternal/AiGroupGuiDesc/AI_DOMAIN_TEMPLATE_DESC_FRA.text", "mime": "application/octet-stream", - "name": "AI_FORM_ZONE_DESC_ENU.text" + "name": "AI_DOMAIN_TEMPLATE_DESC_FRA.text" }, "res_image": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -10209,7 +10315,7 @@ }, { "object": "Resource", - "userkey": "AiGroupGuiDesc * AI_FORM_ZONE_DESC_FRA", + "userkey": "ObjectInternal(AiGroupGuiDesc)~ANY~AI_FORM_ZONE_DESC_ENU", "item": { "res_object": { "item": {"obo_name": "AiGroupGuiDesc"}, @@ -10220,12 +10326,12 @@ }, "res_type": "MD", "res_lang": "ANY", - "res_code": "AI_FORM_ZONE_DESC_FRA", + "res_code": "AI_FORM_ZONE_DESC_ENU", "res_cached": false, "res_file": { - "path": "resources/ObjectInternal/AiGroupGuiDesc/AI_FORM_ZONE_DESC_FRA.text", + "path": "resources/ObjectInternal/AiGroupGuiDesc/AI_FORM_ZONE_DESC_ENU.text", "mime": "application/octet-stream", - "name": "AI_FORM_ZONE_DESC_FRA.text" + "name": "AI_FORM_ZONE_DESC_ENU.text" }, "res_image": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -10233,23 +10339,23 @@ }, { "object": "Resource", - "userkey": "AiMetricsHist * SCRIPT", + "userkey": "ObjectInternal(AiGroupGuiDesc)~ANY~AI_FORM_ZONE_DESC_FRA", "item": { "res_object": { - "item": {"obo_name": "AiMetricsHist"}, + "item": {"obo_name": "AiGroupGuiDesc"}, "icon": "img/system/business_object", "label": "Business object", - "userkeylabel": "AiMetricsHist", + "userkeylabel": "AiGroupGuiDesc", "object": "ObjectInternal" }, - "res_type": "JS", + "res_type": "MD", "res_lang": "ANY", - "res_code": "SCRIPT", + "res_code": "AI_FORM_ZONE_DESC_FRA", "res_cached": false, "res_file": { - "path": "resources/ObjectInternal/AiMetricsHist/SCRIPT.js", - "mime": "text/javascript", - "name": "SCRIPT.js" + "path": "resources/ObjectInternal/AiGroupGuiDesc/AI_FORM_ZONE_DESC_FRA.text", + "mime": "application/octet-stream", + "name": "AI_FORM_ZONE_DESC_FRA.text" }, "res_image": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -10257,7 +10363,7 @@ }, { "object": "Resource", - "userkey": "AIProvider * AISettingsFieldsTemplate", + "userkey": "ObjectInternal(AIProvider)~ANY~AISettingsFieldsTemplate", "item": { "res_object": { "item": {"obo_name": "AIProvider"}, @@ -10281,7 +10387,7 @@ }, { "object": "Resource", - "userkey": "AIProvider * AISettingsKeyAndEPTemplate", + "userkey": "ObjectInternal(AIProvider)~ANY~AISettingsKeyAndEPTemplate", "item": { "res_object": { "item": {"obo_name": "AIProvider"}, @@ -10305,7 +10411,7 @@ }, { "object": "Resource", - "userkey": "AIProvider * AISettingsParamTemplate", + "userkey": "ObjectInternal(AIProvider)~ANY~AISettingsParamTemplate", "item": { "res_object": { "item": {"obo_name": "AIProvider"}, @@ -10329,7 +10435,7 @@ }, { "object": "Resource", - "userkey": "AIProvider * CLASS", + "userkey": "ObjectInternal(AIProvider)~ANY~CLASS", "item": { "res_object": { "item": {"obo_name": "AIProvider"}, @@ -10439,7 +10545,7 @@ "list": [ { "object": "TranslateAction", - "userkey": "AI_CLEAR_HIST English", + "userkey": "Action(AI_CLEAR_HIST)~ENU", "item": { "tsl_object": { "item": {"act_name": "AI_CLEAR_HIST"}, @@ -10456,7 +10562,7 @@ }, { "object": "TranslateAction", - "userkey": "AI_CLEAR_HIST French", + "userkey": "Action(AI_CLEAR_HIST)~FRA", "item": { "tsl_object": { "item": {"act_name": "AI_CLEAR_HIST"}, @@ -10473,7 +10579,7 @@ }, { "object": "TranslateAction", - "userkey": "AI_GENDATA_RETRY English", + "userkey": "Action(AI_GENDATA_RETRY)~ENU", "item": { "tsl_object": { "item": {"act_name": "AI_GENDATA_RETRY"}, @@ -10490,7 +10596,7 @@ }, { "object": "TranslateAction", - "userkey": "AI_GENDATA_RETRY French", + "userkey": "Action(AI_GENDATA_RETRY)~FRA", "item": { "tsl_object": { "item": {"act_name": "AI_GENDATA_RETRY"}, @@ -10507,7 +10613,7 @@ }, { "object": "TranslateAction", - "userkey": "AI_SENT English", + "userkey": "Action(AI_SENT)~ENU", "item": { "tsl_object": { "item": {"act_name": "AI_SENT"}, @@ -10524,7 +10630,7 @@ }, { "object": "TranslateAction", - "userkey": "AI_SENT French", + "userkey": "Action(AI_SENT)~FRA", "item": { "tsl_object": { "item": {"act_name": "AI_SENT"}, @@ -10541,7 +10647,7 @@ }, { "object": "TranslateAction", - "userkey": "AI_UPDATE_DESC English", + "userkey": "Action(AI_UPDATE_DESC)~ENU", "item": { "tsl_object": { "item": {"act_name": "AI_UPDATE_DESC"}, @@ -10558,7 +10664,7 @@ }, { "object": "TranslateAction", - "userkey": "AI_UPDATE_DESC French", + "userkey": "Action(AI_UPDATE_DESC)~FRA", "item": { "tsl_object": { "item": {"act_name": "AI_UPDATE_DESC"}, @@ -10575,143 +10681,143 @@ }, { "object": "TranslateAction", - "userkey": "AIAddData English", + "userkey": "Action(AI_UPDATE_DESC_GLOBAL)~ENU", "item": { "tsl_object": { - "item": {"act_name": "AIAddData"}, + "item": {"act_name": "AI_UPDATE_DESC_GLOBAL"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIAddData", + "userkeylabel": "AI_UPDATE_DESC_GLOBAL", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Data generation", + "tsl_value": "Update descriptions", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "AIAddData French", + "userkey": "Action(AI_UPDATE_DESC_GLOBAL)~FRA", "item": { "tsl_object": { - "item": {"act_name": "AIAddData"}, + "item": {"act_name": "AI_UPDATE_DESC_GLOBAL"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIAddData", + "userkeylabel": "AI_UPDATE_DESC_GLOBAL", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Génération de données", + "tsl_value": "Mettre à jour de les descriptions", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "AIButtonSkip English", + "userkey": "Action(AIAddData)~ENU", "item": { "tsl_object": { - "item": {"act_name": "AIButtonSkip"}, + "item": {"act_name": "AIAddData"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIButtonSkip", + "userkeylabel": "AIAddData", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Button skip", + "tsl_value": "Data generation", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "AIButtonSkip French", + "userkey": "Action(AIAddData)~FRA", "item": { "tsl_object": { - "item": {"act_name": "AIButtonSkip"}, + "item": {"act_name": "AIAddData"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIButtonSkip", + "userkeylabel": "AIAddData", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Saut de bouton", + "tsl_value": "Génération de données", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "AIDeleteModule English", + "userkey": "Action(AIAutoGenModule)~ENU", "item": { "tsl_object": { - "item": {"act_name": "AIDeleteModule"}, + "item": {"act_name": "AIAutoGenModule"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIDeleteModule", + "userkeylabel": "AIAutoGenModule", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Delete module", + "tsl_value": "Model generation by AI", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "AIDeleteModule French", + "userkey": "Action(AIAutoGenModule)~FRA", "item": { "tsl_object": { - "item": {"act_name": "AIDeleteModule"}, + "item": {"act_name": "AIAutoGenModule"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIDeleteModule", + "userkeylabel": "AIAutoGenModule", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Supprimer le module", + "tsl_value": "Génération du modèle par l'IA", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "AI_UPDATE_DESC_GLOBAL English", + "userkey": "Action(AIButtonSkip)~ENU", "item": { "tsl_object": { - "item": {"act_name": "AI_UPDATE_DESC_GLOBAL"}, + "item": {"act_name": "AIButtonSkip"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AI_UPDATE_DESC_GLOBAL", + "userkeylabel": "AIButtonSkip", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Update descriptions", + "tsl_value": "Button skip", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "AI_UPDATE_DESC_GLOBAL French", + "userkey": "Action(AIButtonSkip)~FRA", "item": { "tsl_object": { - "item": {"act_name": "AI_UPDATE_DESC_GLOBAL"}, + "item": {"act_name": "AIButtonSkip"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AI_UPDATE_DESC_GLOBAL", + "userkeylabel": "AIButtonSkip", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Mettre à jour de les descriptions", + "tsl_value": "Saut de bouton", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "AICalculateFieldJs English", + "userkey": "Action(AICalculateFieldJs)~ENU", "item": { "tsl_object": { "item": {"act_name": "AICalculateFieldJs"}, @@ -10728,7 +10834,7 @@ }, { "object": "TranslateAction", - "userkey": "AICalculateFieldJs French", + "userkey": "Action(AICalculateFieldJs)~FRA", "item": { "tsl_object": { "item": {"act_name": "AICalculateFieldJs"}, @@ -10745,41 +10851,41 @@ }, { "object": "TranslateAction", - "userkey": "AIAutoGenModule English", + "userkey": "Action(AIDeleteModule)~ENU", "item": { "tsl_object": { - "item": {"act_name": "AIAutoGenModule"}, + "item": {"act_name": "AIDeleteModule"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIAutoGenModule", + "userkeylabel": "AIDeleteModule", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Model generation by AI", + "tsl_value": "Delete module", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "AIAutoGenModule French", + "userkey": "Action(AIDeleteModule)~FRA", "item": { "tsl_object": { - "item": {"act_name": "AIAutoGenModule"}, + "item": {"act_name": "AIDeleteModule"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIAutoGenModule", + "userkeylabel": "AIDeleteModule", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Génération du modèle par l'IA", + "tsl_value": "Supprimer le module", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "AIDirectPrompt English", + "userkey": "Action(AIDirectPrompt)~ENU", "item": { "tsl_object": { "item": {"act_name": "AIDirectPrompt"}, @@ -10796,7 +10902,7 @@ }, { "object": "TranslateAction", - "userkey": "AIDirectPrompt French", + "userkey": "Action(AIDirectPrompt)~FRA", "item": { "tsl_object": { "item": {"act_name": "AIDirectPrompt"}, @@ -10813,7 +10919,7 @@ }, { "object": "TranslateAction", - "userkey": "AIGenerate English", + "userkey": "Action(AIGenerate)~ENU", "item": { "tsl_object": { "item": {"act_name": "AIGenerate"}, @@ -10830,7 +10936,7 @@ }, { "object": "TranslateAction", - "userkey": "AIGenerate French", + "userkey": "Action(AIGenerate)~FRA", "item": { "tsl_object": { "item": {"act_name": "AIGenerate"}, @@ -10847,7 +10953,7 @@ }, { "object": "TranslateAction", - "userkey": "AIProvidersImport English", + "userkey": "Action(AIProvidersImport)~ENU", "item": { "tsl_object": { "item": {"act_name": "AIProvidersImport"}, @@ -10864,7 +10970,7 @@ }, { "object": "TranslateAction", - "userkey": "AIProvidersImport French", + "userkey": "Action(AIProvidersImport)~FRA", "item": { "tsl_object": { "item": {"act_name": "AIProvidersImport"}, @@ -10881,41 +10987,41 @@ }, { "object": "TranslateAction", - "userkey": "AISetSettings English", + "userkey": "Action(AIStartParam)~ENU", "item": { "tsl_object": { - "item": {"act_name": "AISetSettings"}, + "item": {"act_name": "AIStartParam"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AISetSettings", + "userkeylabel": "AIStartParam", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Configuring the wizard", + "tsl_value": "Setting AI", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "AISetSettings French", + "userkey": "Action(AIStartParam)~FRA", "item": { "tsl_object": { - "item": {"act_name": "AISetSettings"}, + "item": {"act_name": "AIStartParam"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AISetSettings", + "userkeylabel": "AIStartParam", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Configuration de l'assistant", + "tsl_value": "Paramétrer l'IA", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "AiSaveAsCrosstable English", + "userkey": "Action(AiSaveAsCrosstable)~ENU", "item": { "tsl_object": { "item": {"act_name": "AiSaveAsCrosstable"}, @@ -10932,7 +11038,7 @@ }, { "object": "TranslateAction", - "userkey": "AiSaveAsCrosstable French", + "userkey": "Action(AiSaveAsCrosstable)~FRA", "item": { "tsl_object": { "item": {"act_name": "AiSaveAsCrosstable"}, @@ -10949,41 +11055,41 @@ }, { "object": "TranslateAction", - "userkey": "AIStartParam English", + "userkey": "Action(AISetSettings)~ENU", "item": { "tsl_object": { - "item": {"act_name": "AIStartParam"}, + "item": {"act_name": "AISetSettings"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIStartParam", + "userkeylabel": "AISetSettings", "object": "Action" }, "tsl_lang": "ENU", - "tsl_value": "Setting AI", + "tsl_value": "Configuring the wizard", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "AIStartParam French", + "userkey": "Action(AISetSettings)~FRA", "item": { "tsl_object": { - "item": {"act_name": "AIStartParam"}, + "item": {"act_name": "AISetSettings"}, "icon": "img/system/action_btn", "label": "Action", - "userkeylabel": "AIStartParam", + "userkeylabel": "AISetSettings", "object": "Action" }, "tsl_lang": "FRA", - "tsl_value": "Paramétrer l'IA", + "tsl_value": "Configuration de l'assistant", "tsl_simplehelp": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateAction", - "userkey": "CompleteModule English", + "userkey": "Action(CompleteModule)~ENU", "item": { "tsl_object": { "item": {"act_name": "CompleteModule"}, @@ -11000,7 +11106,7 @@ }, { "object": "TranslateAction", - "userkey": "CompleteModule French", + "userkey": "Action(CompleteModule)~FRA", "item": { "tsl_object": { "item": {"act_name": "CompleteModule"}, @@ -11025,7 +11131,7 @@ "list": [ { "object": "TranslateField", - "userkey": "aiActPrompt English", + "userkey": "Field(aiActPrompt)~ENU", "item": { "tsl_object": { "item": {"fld_name": "aiActPrompt"}, @@ -11047,7 +11153,7 @@ }, { "object": "TranslateField", - "userkey": "aiActPrompt French", + "userkey": "Field(aiActPrompt)~FRA", "item": { "tsl_object": { "item": {"fld_name": "aiActPrompt"}, @@ -11069,17 +11175,17 @@ }, { "object": "TranslateField", - "userkey": "aiAigroupviewUsed English", + "userkey": "Field(aiAddShortCut)~ENU", "item": { "tsl_object": { - "item": {"fld_name": "aiAigroupviewUsed"}, + "item": {"fld_name": "aiAddShortCut"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiAigroupviewUsed", + "userkeylabel": "aiAddShortCut", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "GUIDescription", + "tsl_value": "Add the chatbot to your header ?", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11091,17 +11197,17 @@ }, { "object": "TranslateField", - "userkey": "aiAigroupviewUsed French", + "userkey": "Field(aiAddShortCut)~FRA", "item": { "tsl_object": { - "item": {"fld_name": "aiAigroupviewUsed"}, + "item": {"fld_name": "aiAddShortCut"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiAigroupviewUsed", + "userkeylabel": "aiAddShortCut", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "IHM à décrire", + "tsl_value": "Ajoutez le chatbot à votre en-tête ?", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11113,17 +11219,17 @@ }, { "object": "TranslateField", - "userkey": "aiGgdDescription English", + "userkey": "Field(aiGgdLang)~ENU", "item": { "tsl_object": { - "item": {"fld_name": "aiGgdDescription"}, + "item": {"fld_name": "aiGgdLang"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiGgdDescription", + "userkeylabel": "aiGgdLang", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Description", + "tsl_value": "Language", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11135,17 +11241,17 @@ }, { "object": "TranslateField", - "userkey": "aiGgdDescription French", + "userkey": "Field(aiGgdLang)~FRA", "item": { "tsl_object": { - "item": {"fld_name": "aiGgdDescription"}, + "item": {"fld_name": "aiGgdLang"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiGgdDescription", + "userkeylabel": "aiGgdLang", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Description", + "tsl_value": "Langue", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11157,17 +11263,17 @@ }, { "object": "TranslateField", - "userkey": "aiGgdViewhomeId English", + "userkey": "Field(aiAigroupviewUsed)~ENU", "item": { "tsl_object": { - "item": {"fld_name": "aiGgdViewhomeId"}, + "item": {"fld_name": "aiAigroupviewUsed"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiGgdViewhomeId", + "userkeylabel": "aiAigroupviewUsed", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Home page", + "tsl_value": "GUIDescription", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11179,17 +11285,17 @@ }, { "object": "TranslateField", - "userkey": "aiGgdViewhomeId French", + "userkey": "Field(aiAigroupviewUsed)~FRA", "item": { "tsl_object": { - "item": {"fld_name": "aiGgdViewhomeId"}, + "item": {"fld_name": "aiAigroupviewUsed"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiGgdViewhomeId", + "userkeylabel": "aiAigroupviewUsed", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Ggd viewhome id", + "tsl_value": "IHM à décrire", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11201,17 +11307,17 @@ }, { "object": "TranslateField", - "userkey": "aiGroupGuiDescId English", + "userkey": "Field(aiGgdViewhomeId)~ENU", "item": { "tsl_object": { - "item": {"fld_name": "aiGroupGuiDescId"}, + "item": {"fld_name": "aiGgdViewhomeId"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiGroupGuiDescId", + "userkeylabel": "aiGgdViewhomeId", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Group gui desc id", + "tsl_value": "Home page", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11223,17 +11329,17 @@ }, { "object": "TranslateField", - "userkey": "aiGroupGuiDescId French", + "userkey": "Field(aiGgdViewhomeId)~FRA", "item": { "tsl_object": { - "item": {"fld_name": "aiGroupGuiDescId"}, + "item": {"fld_name": "aiGgdViewhomeId"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiGroupGuiDescId", + "userkeylabel": "aiGgdViewhomeId", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Group gui desc id", + "tsl_value": "Ggd viewhome id", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11245,7 +11351,7 @@ }, { "object": "TranslateField", - "userkey": "aiGrantUser English", + "userkey": "Field(aiGrantUser)~ENU", "item": { "tsl_object": { "item": {"fld_name": "aiGrantUser"}, @@ -11267,7 +11373,7 @@ }, { "object": "TranslateField", - "userkey": "aiGrantUser French", + "userkey": "Field(aiGrantUser)~FRA", "item": { "tsl_object": { "item": {"fld_name": "aiGrantUser"}, @@ -11289,17 +11395,17 @@ }, { "object": "TranslateField", - "userkey": "aiGroupGuiVirtual English", + "userkey": "Field(aiGgdDescription)~ENU", "item": { "tsl_object": { - "item": {"fld_name": "aiGroupGuiVirtual"}, + "item": {"fld_name": "aiGgdDescription"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiGroupGuiVirtual", + "userkeylabel": "aiGgdDescription", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Group gui virtual", + "tsl_value": "Description", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11311,17 +11417,17 @@ }, { "object": "TranslateField", - "userkey": "aiGroupGuiVirtual French", + "userkey": "Field(aiGgdDescription)~FRA", "item": { "tsl_object": { - "item": {"fld_name": "aiGroupGuiVirtual"}, + "item": {"fld_name": "aiGgdDescription"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiGroupGuiVirtual", + "userkeylabel": "aiGgdDescription", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Group gui virtual", + "tsl_value": "Description", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11333,17 +11439,17 @@ }, { "object": "TranslateField", - "userkey": "aiGgdLang English", + "userkey": "Field(aiGroupGuiVirtual)~ENU", "item": { "tsl_object": { - "item": {"fld_name": "aiGgdLang"}, + "item": {"fld_name": "aiGroupGuiVirtual"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiGgdLang", + "userkeylabel": "aiGroupGuiVirtual", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Language", + "tsl_value": "Group gui virtual", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11355,17 +11461,17 @@ }, { "object": "TranslateField", - "userkey": "aiGgdLang French", + "userkey": "Field(aiGroupGuiVirtual)~FRA", "item": { "tsl_object": { - "item": {"fld_name": "aiGgdLang"}, + "item": {"fld_name": "aiGroupGuiVirtual"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiGgdLang", + "userkeylabel": "aiGroupGuiVirtual", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Langue", + "tsl_value": "Group gui virtual", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11377,17 +11483,17 @@ }, { "object": "TranslateField", - "userkey": "aiAddShortCut English", + "userkey": "Field(aiGroupGuiDescId)~ENU", "item": { "tsl_object": { - "item": {"fld_name": "aiAddShortCut"}, + "item": {"fld_name": "aiGroupGuiDescId"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiAddShortCut", + "userkeylabel": "aiGroupGuiDescId", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Add the chatbot to your header ?", + "tsl_value": "Group gui desc id", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11399,17 +11505,17 @@ }, { "object": "TranslateField", - "userkey": "aiAddShortCut French", + "userkey": "Field(aiGroupGuiDescId)~FRA", "item": { "tsl_object": { - "item": {"fld_name": "aiAddShortCut"}, + "item": {"fld_name": "aiGroupGuiDescId"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiAddShortCut", + "userkeylabel": "aiGroupGuiDescId", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Ajoutez le chatbot à votre en-tête ?", + "tsl_value": "Group gui desc id", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11421,7 +11527,7 @@ }, { "object": "TranslateField", - "userkey": "aiMhCreateOn English", + "userkey": "Field(aiMhCreateOn)~ENU", "item": { "tsl_object": { "item": {"fld_name": "aiMhCreateOn"}, @@ -11443,7 +11549,7 @@ }, { "object": "TranslateField", - "userkey": "aiMhCreateOn French", + "userkey": "Field(aiMhCreateOn)~FRA", "item": { "tsl_object": { "item": {"fld_name": "aiMhCreateOn"}, @@ -11465,7 +11571,7 @@ }, { "object": "TranslateField", - "userkey": "aiMhMetrics English", + "userkey": "Field(aiMhMetrics)~ENU", "item": { "tsl_object": { "item": {"fld_name": "aiMhMetrics"}, @@ -11487,7 +11593,7 @@ }, { "object": "TranslateField", - "userkey": "aiMhMetrics French", + "userkey": "Field(aiMhMetrics)~FRA", "item": { "tsl_object": { "item": {"fld_name": "aiMhMetrics"}, @@ -11509,17 +11615,17 @@ }, { "object": "TranslateField", - "userkey": "aiMhModuleId English", + "userkey": "Field(aiMhPreview)~ENU", "item": { "tsl_object": { - "item": {"fld_name": "aiMhModuleId"}, + "item": {"fld_name": "aiMhPreview"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiMhModuleId", + "userkeylabel": "aiMhPreview", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Mh module id", + "tsl_value": "Preview", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11531,17 +11637,17 @@ }, { "object": "TranslateField", - "userkey": "aiMhModuleId French", + "userkey": "Field(aiMhPreview)~FRA", "item": { "tsl_object": { - "item": {"fld_name": "aiMhModuleId"}, + "item": {"fld_name": "aiMhPreview"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiMhModuleId", + "userkeylabel": "aiMhPreview", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Module", + "tsl_value": "Preview", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11553,17 +11659,17 @@ }, { "object": "TranslateField", - "userkey": "aiMhPrompt English", + "userkey": "Field(aiMhModuleId)~ENU", "item": { "tsl_object": { - "item": {"fld_name": "aiMhPrompt"}, + "item": {"fld_name": "aiMhModuleId"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiMhPrompt", + "userkeylabel": "aiMhModuleId", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Title", + "tsl_value": "Mh module id", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11575,17 +11681,17 @@ }, { "object": "TranslateField", - "userkey": "aiMhPrompt French", + "userkey": "Field(aiMhModuleId)~FRA", "item": { "tsl_object": { - "item": {"fld_name": "aiMhPrompt"}, + "item": {"fld_name": "aiMhModuleId"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiMhPrompt", + "userkeylabel": "aiMhModuleId", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Mh prompt", + "tsl_value": "Module", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11597,17 +11703,17 @@ }, { "object": "TranslateField", - "userkey": "aiMhSimpleuserId English", + "userkey": "Field(aiMhPrompt)~ENU", "item": { "tsl_object": { - "item": {"fld_name": "aiMhSimpleuserId"}, + "item": {"fld_name": "aiMhPrompt"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiMhSimpleuserId", + "userkeylabel": "aiMhPrompt", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Mh simpleuser id", + "tsl_value": "Title", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11619,17 +11725,17 @@ }, { "object": "TranslateField", - "userkey": "aiMhSimpleuserId French", + "userkey": "Field(aiMhPrompt)~FRA", "item": { "tsl_object": { - "item": {"fld_name": "aiMhSimpleuserId"}, + "item": {"fld_name": "aiMhPrompt"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiMhSimpleuserId", + "userkeylabel": "aiMhPrompt", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Utilisateur", + "tsl_value": "Mh prompt", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11641,17 +11747,17 @@ }, { "object": "TranslateField", - "userkey": "aiPrvPingUrl English", + "userkey": "Field(aiMhSimpleuserId)~ENU", "item": { "tsl_object": { - "item": {"fld_name": "aiPrvPingUrl"}, + "item": {"fld_name": "aiMhSimpleuserId"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiPrvPingUrl", + "userkeylabel": "aiMhSimpleuserId", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Ping url", + "tsl_value": "Mh simpleuser id", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11663,17 +11769,17 @@ }, { "object": "TranslateField", - "userkey": "aiPrvPingUrl French", + "userkey": "Field(aiMhSimpleuserId)~FRA", "item": { "tsl_object": { - "item": {"fld_name": "aiPrvPingUrl"}, + "item": {"fld_name": "aiMhSimpleuserId"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiPrvPingUrl", + "userkeylabel": "aiMhSimpleuserId", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Ping url", + "tsl_value": "Utilisateur", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11685,7 +11791,7 @@ }, { "object": "TranslateField", - "userkey": "aiPrvDefaultUrl English", + "userkey": "Field(aiPrvDefaultUrl)~ENU", "item": { "tsl_object": { "item": {"fld_name": "aiPrvDefaultUrl"}, @@ -11707,7 +11813,7 @@ }, { "object": "TranslateField", - "userkey": "aiPrvDefaultUrl French", + "userkey": "Field(aiPrvDefaultUrl)~FRA", "item": { "tsl_object": { "item": {"fld_name": "aiPrvDefaultUrl"}, @@ -11729,17 +11835,17 @@ }, { "object": "TranslateField", - "userkey": "aiPrvModelsUrl English", + "userkey": "Field(aiPrvHelp)~ENU", "item": { "tsl_object": { - "item": {"fld_name": "aiPrvModelsUrl"}, + "item": {"fld_name": "aiPrvHelp"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiPrvModelsUrl", + "userkeylabel": "aiPrvHelp", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Models url", + "tsl_value": "Key and endpoints help", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11751,17 +11857,17 @@ }, { "object": "TranslateField", - "userkey": "aiPrvModelsUrl French", + "userkey": "Field(aiPrvHelp)~FRA", "item": { "tsl_object": { - "item": {"fld_name": "aiPrvModelsUrl"}, + "item": {"fld_name": "aiPrvHelp"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiPrvModelsUrl", + "userkeylabel": "aiPrvHelp", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Models Url", + "tsl_value": "Aide sur les clés et les endpoints", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11773,17 +11879,17 @@ }, { "object": "TranslateField", - "userkey": "aiPrvHelp English", + "userkey": "Field(aiPrvDataModel)~ENU", "item": { "tsl_object": { - "item": {"fld_name": "aiPrvHelp"}, + "item": {"fld_name": "aiPrvDataModel"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiPrvHelp", + "userkeylabel": "aiPrvDataModel", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Key and endpoints help", + "tsl_value": "Specific parameter", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11795,17 +11901,17 @@ }, { "object": "TranslateField", - "userkey": "aiPrvHelp French", + "userkey": "Field(aiPrvDataModel)~FRA", "item": { "tsl_object": { - "item": {"fld_name": "aiPrvHelp"}, + "item": {"fld_name": "aiPrvDataModel"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiPrvHelp", + "userkeylabel": "aiPrvDataModel", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Aide sur les clés et les endpoints", + "tsl_value": "Paramètre spécifique", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11817,17 +11923,17 @@ }, { "object": "TranslateField", - "userkey": "aiMhPreview English", + "userkey": "Field(aiPrvCompletionUrl)~ENU", "item": { "tsl_object": { - "item": {"fld_name": "aiMhPreview"}, + "item": {"fld_name": "aiPrvCompletionUrl"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiMhPreview", + "userkeylabel": "aiPrvCompletionUrl", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Preview", + "tsl_value": "Completion endpoint url", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11839,17 +11945,17 @@ }, { "object": "TranslateField", - "userkey": "aiMhPreview French", + "userkey": "Field(aiPrvCompletionUrl)~FRA", "item": { "tsl_object": { - "item": {"fld_name": "aiMhPreview"}, + "item": {"fld_name": "aiPrvCompletionUrl"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiMhPreview", + "userkeylabel": "aiPrvCompletionUrl", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Preview", + "tsl_value": "Completion Url", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11861,17 +11967,17 @@ }, { "object": "TranslateField", - "userkey": "aiPrvCompletionUrl English", + "userkey": "Field(aiPrvPingUrl)~ENU", "item": { "tsl_object": { - "item": {"fld_name": "aiPrvCompletionUrl"}, + "item": {"fld_name": "aiPrvPingUrl"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiPrvCompletionUrl", + "userkeylabel": "aiPrvPingUrl", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Completion endpoint url", + "tsl_value": "Ping url", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11883,17 +11989,17 @@ }, { "object": "TranslateField", - "userkey": "aiPrvCompletionUrl French", + "userkey": "Field(aiPrvPingUrl)~FRA", "item": { "tsl_object": { - "item": {"fld_name": "aiPrvCompletionUrl"}, + "item": {"fld_name": "aiPrvPingUrl"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiPrvCompletionUrl", + "userkeylabel": "aiPrvPingUrl", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Completion Url", + "tsl_value": "Ping url", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11905,17 +12011,17 @@ }, { "object": "TranslateField", - "userkey": "aiPrvDataModel English", + "userkey": "Field(aiPrvModelsUrl)~ENU", "item": { "tsl_object": { - "item": {"fld_name": "aiPrvDataModel"}, + "item": {"fld_name": "aiPrvModelsUrl"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiPrvDataModel", + "userkeylabel": "aiPrvModelsUrl", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Specific parameter", + "tsl_value": "Models url", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11927,17 +12033,17 @@ }, { "object": "TranslateField", - "userkey": "aiPrvDataModel French", + "userkey": "Field(aiPrvModelsUrl)~FRA", "item": { "tsl_object": { - "item": {"fld_name": "aiPrvDataModel"}, + "item": {"fld_name": "aiPrvModelsUrl"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiPrvDataModel", + "userkeylabel": "aiPrvModelsUrl", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Paramètre spécifique", + "tsl_value": "Models Url", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -11949,7 +12055,7 @@ }, { "object": "TranslateField", - "userkey": "aiPrvProvider English", + "userkey": "Field(aiPrvProvider)~ENU", "item": { "tsl_object": { "item": {"fld_name": "aiPrvProvider"}, @@ -11971,7 +12077,7 @@ }, { "object": "TranslateField", - "userkey": "aiPrvProvider French", + "userkey": "Field(aiPrvProvider)~FRA", "item": { "tsl_object": { "item": {"fld_name": "aiPrvProvider"}, @@ -11993,17 +12099,17 @@ }, { "object": "TranslateField", - "userkey": "aiPrvSttUrl English", + "userkey": "Field(aiPrvUserParameters)~ENU", "item": { "tsl_object": { - "item": {"fld_name": "aiPrvSttUrl"}, + "item": {"fld_name": "aiPrvUserParameters"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiPrvSttUrl", + "userkeylabel": "aiPrvUserParameters", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Speech to text url", + "tsl_value": "Prv user parameters", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -12015,17 +12121,17 @@ }, { "object": "TranslateField", - "userkey": "aiPrvSttUrl French", + "userkey": "Field(aiPrvUserParameters)~FRA", "item": { "tsl_object": { - "item": {"fld_name": "aiPrvSttUrl"}, + "item": {"fld_name": "aiPrvUserParameters"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiPrvSttUrl", + "userkeylabel": "aiPrvUserParameters", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "URL de la synthèse vocale", + "tsl_value": "User Parameters", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -12037,17 +12143,17 @@ }, { "object": "TranslateField", - "userkey": "aiSelectProcess English", + "userkey": "Field(aiPrvSttUrl)~ENU", "item": { "tsl_object": { - "item": {"fld_name": "aiSelectProcess"}, + "item": {"fld_name": "aiPrvSttUrl"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiSelectProcess", + "userkeylabel": "aiPrvSttUrl", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Create new module", + "tsl_value": "Speech to text url", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -12059,17 +12165,17 @@ }, { "object": "TranslateField", - "userkey": "aiSelectProcess French", + "userkey": "Field(aiPrvSttUrl)~FRA", "item": { "tsl_object": { - "item": {"fld_name": "aiSelectProcess"}, + "item": {"fld_name": "aiPrvSttUrl"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiSelectProcess", + "userkeylabel": "aiPrvSttUrl", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "Créer un module", + "tsl_value": "URL de la synthèse vocale", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -12081,17 +12187,17 @@ }, { "object": "TranslateField", - "userkey": "aiPrvUserParameters English", + "userkey": "Field(aiSelectProcess)~ENU", "item": { "tsl_object": { - "item": {"fld_name": "aiPrvUserParameters"}, + "item": {"fld_name": "aiSelectProcess"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiPrvUserParameters", + "userkeylabel": "aiSelectProcess", "object": "Field" }, "tsl_lang": "ENU", - "tsl_value": "Prv user parameters", + "tsl_value": "Create new module", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -12103,17 +12209,17 @@ }, { "object": "TranslateField", - "userkey": "aiPrvUserParameters French", + "userkey": "Field(aiSelectProcess)~FRA", "item": { "tsl_object": { - "item": {"fld_name": "aiPrvUserParameters"}, + "item": {"fld_name": "aiSelectProcess"}, "icon": "img/system/field", "label": "Field", - "userkeylabel": "aiPrvUserParameters", + "userkeylabel": "aiSelectProcess", "object": "Field" }, "tsl_lang": "FRA", - "tsl_value": "User Parameters", + "tsl_value": "Créer un module", "tsl_simplehelp": null, "tsl_plural_value": null, "tsl_short_value": null, @@ -12133,7 +12239,7 @@ "list": [ { "object": "TranslateFieldArea", - "userkey": "AIExemple-1 English", + "userkey": "ObjectFieldArea(AIExemple-1)~ENU", "item": { "tsl_object": { "item": {"ofa_name": "AIExemple-1"}, @@ -12149,7 +12255,7 @@ }, { "object": "TranslateFieldArea", - "userkey": "AIExemple-1 French", + "userkey": "ObjectFieldArea(AIExemple-1)~FRA", "item": { "tsl_object": { "item": {"ofa_name": "AIExemple-1"}, @@ -12165,103 +12271,103 @@ }, { "object": "TranslateFieldArea", - "userkey": "AiGroupGuiDesc-2 English", + "userkey": "ObjectFieldArea(AiGroupGuiDesc-1)~ENU", "item": { "tsl_object": { - "item": {"ofa_name": "AiGroupGuiDesc-2"}, + "item": {"ofa_name": "AiGroupGuiDesc-1"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AiGroupGuiDesc-2", + "userkeylabel": "AiGroupGuiDesc-1", "object": "ObjectFieldArea" }, "tsl_lang": "ENU", - "tsl_value": "Group gui desc -2", + "tsl_value": "AiGroupGuiDesc-1", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AiGroupGuiDesc-2 French", + "userkey": "ObjectFieldArea(AiGroupGuiDesc-1)~FRA", "item": { "tsl_object": { - "item": {"ofa_name": "AiGroupGuiDesc-2"}, + "item": {"ofa_name": "AiGroupGuiDesc-1"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AiGroupGuiDesc-2", + "userkeylabel": "AiGroupGuiDesc-1", "object": "ObjectFieldArea" }, "tsl_lang": "FRA", - "tsl_value": "AiGroupGuiDesc-2", + "tsl_value": "Group gui desc -1", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AiGroupView-1 English", + "userkey": "ObjectFieldArea(AiGroupGuiDesc-2)~ENU", "item": { "tsl_object": { - "item": {"ofa_name": "AiGroupView-1"}, + "item": {"ofa_name": "AiGroupGuiDesc-2"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AiGroupView-1", + "userkeylabel": "AiGroupGuiDesc-2", "object": "ObjectFieldArea" }, "tsl_lang": "ENU", - "tsl_value": "AiGroupView-1", + "tsl_value": "Group gui desc -2", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AiGroupView-1 French", + "userkey": "ObjectFieldArea(AiGroupGuiDesc-2)~FRA", "item": { "tsl_object": { - "item": {"ofa_name": "AiGroupView-1"}, + "item": {"ofa_name": "AiGroupGuiDesc-2"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AiGroupView-1", + "userkeylabel": "AiGroupGuiDesc-2", "object": "ObjectFieldArea" }, "tsl_lang": "FRA", - "tsl_value": "Group view -1", + "tsl_value": "AiGroupGuiDesc-2", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AIProvider-1 English", + "userkey": "ObjectFieldArea(AiGroupView-1)~ENU", "item": { "tsl_object": { - "item": {"ofa_name": "AIProvider-1"}, + "item": {"ofa_name": "AiGroupView-1"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AIProvider-1", + "userkeylabel": "AiGroupView-1", "object": "ObjectFieldArea" }, "tsl_lang": "ENU", - "tsl_value": "Provider -1", + "tsl_value": "AiGroupView-1", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AIProvider-1 French", + "userkey": "ObjectFieldArea(AiGroupView-1)~FRA", "item": { "tsl_object": { - "item": {"ofa_name": "AIProvider-1"}, + "item": {"ofa_name": "AiGroupView-1"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AIProvider-1", + "userkeylabel": "AiGroupView-1", "object": "ObjectFieldArea" }, "tsl_lang": "FRA", - "tsl_value": "AIProvider-1", + "tsl_value": "Group view -1", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AiMetricsHist-1 English", + "userkey": "ObjectFieldArea(AiMetricsHist-1)~ENU", "item": { "tsl_object": { "item": {"ofa_name": "AiMetricsHist-1"}, @@ -12277,7 +12383,7 @@ }, { "object": "TranslateFieldArea", - "userkey": "AiMetricsHist-1 French", + "userkey": "ObjectFieldArea(AiMetricsHist-1)~FRA", "item": { "tsl_object": { "item": {"ofa_name": "AiMetricsHist-1"}, @@ -12293,199 +12399,199 @@ }, { "object": "TranslateFieldArea", - "userkey": "AiGroupGuiDesc-1 English", + "userkey": "ObjectFieldArea(AIModuleIHMDescription-1)~ENU", "item": { "tsl_object": { - "item": {"ofa_name": "AiGroupGuiDesc-1"}, + "item": {"ofa_name": "AIModuleIHMDescription-1"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AiGroupGuiDesc-1", + "userkeylabel": "AIModuleIHMDescription-1", "object": "ObjectFieldArea" }, "tsl_lang": "ENU", - "tsl_value": "AiGroupGuiDesc-1", + "tsl_value": "AIModuleIHMDescription-1", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AiGroupGuiDesc-1 French", + "userkey": "ObjectFieldArea(AIModuleIHMDescription-1)~FRA", "item": { "tsl_object": { - "item": {"ofa_name": "AiGroupGuiDesc-1"}, + "item": {"ofa_name": "AIModuleIHMDescription-1"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AiGroupGuiDesc-1", + "userkeylabel": "AIModuleIHMDescription-1", "object": "ObjectFieldArea" }, "tsl_lang": "FRA", - "tsl_value": "Group gui desc -1", + "tsl_value": "Module IHMdescription -1", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AIProvider-2 English", + "userkey": "ObjectFieldArea(AIProvider-1)~ENU", "item": { "tsl_object": { - "item": {"ofa_name": "AIProvider-2"}, + "item": {"ofa_name": "AIProvider-1"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AIProvider-2", + "userkeylabel": "AIProvider-1", "object": "ObjectFieldArea" }, "tsl_lang": "ENU", - "tsl_value": "Endpoints", + "tsl_value": "Provider -1", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AIProvider-2 French", + "userkey": "ObjectFieldArea(AIProvider-1)~FRA", "item": { "tsl_object": { - "item": {"ofa_name": "AIProvider-2"}, + "item": {"ofa_name": "AIProvider-1"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AIProvider-2", + "userkeylabel": "AIProvider-1", "object": "ObjectFieldArea" }, "tsl_lang": "FRA", - "tsl_value": "Endpoint", + "tsl_value": "AIProvider-1", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AIProvider-3 English", + "userkey": "ObjectFieldArea(AIProvider-2)~ENU", "item": { "tsl_object": { - "item": {"ofa_name": "AIProvider-3"}, + "item": {"ofa_name": "AIProvider-2"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AIProvider-3", + "userkeylabel": "AIProvider-2", "object": "ObjectFieldArea" }, "tsl_lang": "ENU", - "tsl_value": "User parameters", + "tsl_value": "Endpoints", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AIProvider-3 French", + "userkey": "ObjectFieldArea(AIProvider-2)~FRA", "item": { "tsl_object": { - "item": {"ofa_name": "AIProvider-3"}, + "item": {"ofa_name": "AIProvider-2"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AIProvider-3", + "userkeylabel": "AIProvider-2", "object": "ObjectFieldArea" }, "tsl_lang": "FRA", - "tsl_value": "Paramètres de l'utilisateur", + "tsl_value": "Endpoint", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AiSettings-1 English", + "userkey": "ObjectFieldArea(AIProvider-3)~ENU", "item": { "tsl_object": { - "item": {"ofa_name": "AiSettings-1"}, + "item": {"ofa_name": "AIProvider-3"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AiSettings-1", + "userkeylabel": "AIProvider-3", "object": "ObjectFieldArea" }, "tsl_lang": "ENU", - "tsl_value": "Configuration -1", + "tsl_value": "User parameters", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AiSettings-1 French", + "userkey": "ObjectFieldArea(AIProvider-3)~FRA", "item": { "tsl_object": { - "item": {"ofa_name": "AiSettings-1"}, + "item": {"ofa_name": "AIProvider-3"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AiSettings-1", + "userkeylabel": "AIProvider-3", "object": "ObjectFieldArea" }, "tsl_lang": "FRA", - "tsl_value": "AiConfiguration-1", + "tsl_value": "Paramètres de l'utilisateur", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AiSettings-2 English", + "userkey": "ObjectFieldArea(AiSettings-1)~ENU", "item": { "tsl_object": { - "item": {"ofa_name": "AiSettings-2"}, + "item": {"ofa_name": "AiSettings-1"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AiSettings-2", + "userkeylabel": "AiSettings-1", "object": "ObjectFieldArea" }, "tsl_lang": "ENU", - "tsl_value": "Settings -2", + "tsl_value": "Configuration -1", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AiSettings-2 French", + "userkey": "ObjectFieldArea(AiSettings-1)~FRA", "item": { "tsl_object": { - "item": {"ofa_name": "AiSettings-2"}, + "item": {"ofa_name": "AiSettings-1"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AiSettings-2", + "userkeylabel": "AiSettings-1", "object": "ObjectFieldArea" }, "tsl_lang": "FRA", - "tsl_value": "AiSettings-2", + "tsl_value": "AiConfiguration-1", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AIModuleIHMDescription-1 English", + "userkey": "ObjectFieldArea(AiSettings-2)~ENU", "item": { "tsl_object": { - "item": {"ofa_name": "AIModuleIHMDescription-1"}, + "item": {"ofa_name": "AiSettings-2"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AIModuleIHMDescription-1", + "userkeylabel": "AiSettings-2", "object": "ObjectFieldArea" }, "tsl_lang": "ENU", - "tsl_value": "AIModuleIHMDescription-1", + "tsl_value": "Settings -2", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AIModuleIHMDescription-1 French", + "userkey": "ObjectFieldArea(AiSettings-2)~FRA", "item": { "tsl_object": { - "item": {"ofa_name": "AIModuleIHMDescription-1"}, + "item": {"ofa_name": "AiSettings-2"}, "icon": "img/system/field_area", "label": "Fields area", - "userkeylabel": "AIModuleIHMDescription-1", + "userkeylabel": "AiSettings-2", "object": "ObjectFieldArea" }, "tsl_lang": "FRA", - "tsl_value": "Module IHMdescription -1", + "tsl_value": "AiSettings-2", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateFieldArea", - "userkey": "AITest-1 English", + "userkey": "ObjectFieldArea(AITest-1)~ENU", "item": { "tsl_object": { "item": {"ofa_name": "AITest-1"}, @@ -12501,7 +12607,7 @@ }, { "object": "TranslateFieldArea", - "userkey": "AITest-1 French", + "userkey": "ObjectFieldArea(AITest-1)~FRA", "item": { "tsl_object": { "item": {"ofa_name": "AITest-1"}, @@ -12525,7 +12631,7 @@ "list": [ { "object": "TranslateDomain", - "userkey": "AIDomain English", + "userkey": "Domain(AIDomain)~ENU", "item": { "tsl_object": { "item": {"obd_name": "AIDomain"}, @@ -12542,7 +12648,7 @@ }, { "object": "TranslateDomain", - "userkey": "AIDomain French", + "userkey": "Domain(AIDomain)~FRA", "item": { "tsl_object": { "item": {"obd_name": "AIDomain"}, @@ -12567,17 +12673,17 @@ "list": [ { "object": "TranslateObject", - "userkey": "AiGroupGuiDesc English", + "userkey": "ObjectInternal(AiMetricsHist)~ENU", "item": { "tsl_object": { - "item": {"obo_name": "AiGroupGuiDesc"}, + "item": {"obo_name": "AiMetricsHist"}, "icon": "img/system/business_object", "label": "Business object", - "userkeylabel": "AiGroupGuiDesc", + "userkeylabel": "AiMetricsHist", "object": "ObjectInternal" }, "tsl_lang": "ENU", - "tsl_value": "Group gui description", + "tsl_value": "History of generated graphs", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -12585,17 +12691,17 @@ }, { "object": "TranslateObject", - "userkey": "AiGroupGuiDesc French", + "userkey": "ObjectInternal(AiMetricsHist)~FRA", "item": { "tsl_object": { - "item": {"obo_name": "AiGroupGuiDesc"}, + "item": {"obo_name": "AiMetricsHist"}, "icon": "img/system/business_object", "label": "Business object", - "userkeylabel": "AiGroupGuiDesc", + "userkeylabel": "AiMetricsHist", "object": "ObjectInternal" }, "tsl_lang": "FRA", - "tsl_value": "Description de l'IHM du groupe", + "tsl_value": "Historique des graphique généré", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -12603,7 +12709,7 @@ }, { "object": "TranslateObject", - "userkey": "AiGroupView English", + "userkey": "ObjectInternal(AiGroupView)~ENU", "item": { "tsl_object": { "item": {"obo_name": "AiGroupView"}, @@ -12621,7 +12727,7 @@ }, { "object": "TranslateObject", - "userkey": "AiGroupView French", + "userkey": "ObjectInternal(AiGroupView)~FRA", "item": { "tsl_object": { "item": {"obo_name": "AiGroupView"}, @@ -12639,17 +12745,17 @@ }, { "object": "TranslateObject", - "userkey": "AiMetricsHist English", + "userkey": "ObjectInternal(AiGroupGuiDesc)~ENU", "item": { "tsl_object": { - "item": {"obo_name": "AiMetricsHist"}, + "item": {"obo_name": "AiGroupGuiDesc"}, "icon": "img/system/business_object", "label": "Business object", - "userkeylabel": "AiMetricsHist", + "userkeylabel": "AiGroupGuiDesc", "object": "ObjectInternal" }, "tsl_lang": "ENU", - "tsl_value": "History of generated graphs", + "tsl_value": "Group gui description", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -12657,17 +12763,17 @@ }, { "object": "TranslateObject", - "userkey": "AiMetricsHist French", + "userkey": "ObjectInternal(AiGroupGuiDesc)~FRA", "item": { "tsl_object": { - "item": {"obo_name": "AiMetricsHist"}, + "item": {"obo_name": "AiGroupGuiDesc"}, "icon": "img/system/business_object", "label": "Business object", - "userkeylabel": "AiMetricsHist", + "userkeylabel": "AiGroupGuiDesc", "object": "ObjectInternal" }, "tsl_lang": "FRA", - "tsl_value": "Historique des graphique généré", + "tsl_value": "Description de l'IHM du groupe", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -12675,7 +12781,7 @@ }, { "object": "TranslateObject", - "userkey": "AIProvider English", + "userkey": "ObjectInternal(AIProvider)~ENU", "item": { "tsl_object": { "item": {"obo_name": "AIProvider"}, @@ -12693,7 +12799,7 @@ }, { "object": "TranslateObject", - "userkey": "AIProvider French", + "userkey": "ObjectInternal(AIProvider)~FRA", "item": { "tsl_object": { "item": {"obo_name": "AIProvider"}, @@ -12719,7 +12825,7 @@ "list": [ { "object": "TranslateExternal", - "userkey": "AIChatBot English", + "userkey": "ObjectExternal(AIChatBot)~ENU", "item": { "tsl_object": { "item": {"obe_name": "AIChatBot"}, @@ -12737,7 +12843,7 @@ }, { "object": "TranslateExternal", - "userkey": "AIChatBot French", + "userkey": "ObjectExternal(AIChatBot)~FRA", "item": { "tsl_object": { "item": {"obe_name": "AIChatBot"}, @@ -12755,17 +12861,17 @@ }, { "object": "TranslateExternal", - "userkey": "AIMetricsChat English", + "userkey": "ObjectExternal(AIExpTool)~ENU", "item": { "tsl_object": { - "item": {"obe_name": "AIMetricsChat"}, + "item": {"obe_name": "AIExpTool"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIMetricsChat", + "userkeylabel": "AIExpTool", "object": "ObjectExternal" }, "tsl_lang": "ENU", - "tsl_value": "AI powered charts", + "tsl_value": "Example tools", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -12773,17 +12879,17 @@ }, { "object": "TranslateExternal", - "userkey": "AIMetricsChat French", + "userkey": "ObjectExternal(AIExpTool)~FRA", "item": { "tsl_object": { - "item": {"obe_name": "AIMetricsChat"}, + "item": {"obe_name": "AIExpTool"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIMetricsChat", + "userkeylabel": "AIExpTool", "object": "ObjectExternal" }, "tsl_lang": "FRA", - "tsl_value": "Graphiques alimentés par l'IA", + "tsl_value": "Exemples d'outils", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -12791,17 +12897,17 @@ }, { "object": "TranslateExternal", - "userkey": "AIExpTool English", + "userkey": "ObjectExternal(AIProcessResource)~ENU", "item": { "tsl_object": { - "item": {"obe_name": "AIExpTool"}, + "item": {"obe_name": "AIProcessResource"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIExpTool", + "userkeylabel": "AIProcessResource", "object": "ObjectExternal" }, "tsl_lang": "ENU", - "tsl_value": "Example tools", + "tsl_value": "Process resource", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -12809,17 +12915,17 @@ }, { "object": "TranslateExternal", - "userkey": "AIExpTool French", + "userkey": "ObjectExternal(AIProcessResource)~FRA", "item": { "tsl_object": { - "item": {"obe_name": "AIExpTool"}, + "item": {"obe_name": "AIProcessResource"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIExpTool", + "userkeylabel": "AIProcessResource", "object": "ObjectExternal" }, "tsl_lang": "FRA", - "tsl_value": "Exemples d'outils", + "tsl_value": "Ressources du processus", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -12827,7 +12933,7 @@ }, { "object": "TranslateExternal", - "userkey": "AiMonitoring English", + "userkey": "ObjectExternal(AiMonitoring)~ENU", "item": { "tsl_object": { "item": {"obe_name": "AiMonitoring"}, @@ -12845,7 +12951,7 @@ }, { "object": "TranslateExternal", - "userkey": "AiMonitoring French", + "userkey": "ObjectExternal(AiMonitoring)~FRA", "item": { "tsl_object": { "item": {"obe_name": "AiMonitoring"}, @@ -12863,17 +12969,17 @@ }, { "object": "TranslateExternal", - "userkey": "AIProcessResource English", + "userkey": "ObjectExternal(AIPromptTool)~ENU", "item": { "tsl_object": { - "item": {"obe_name": "AIProcessResource"}, + "item": {"obe_name": "AIPromptTool"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIProcessResource", + "userkeylabel": "AIPromptTool", "object": "ObjectExternal" }, "tsl_lang": "ENU", - "tsl_value": "Process resource", + "tsl_value": "Prompt tool", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -12881,17 +12987,17 @@ }, { "object": "TranslateExternal", - "userkey": "AIProcessResource French", + "userkey": "ObjectExternal(AIPromptTool)~FRA", "item": { "tsl_object": { - "item": {"obe_name": "AIProcessResource"}, + "item": {"obe_name": "AIPromptTool"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIProcessResource", + "userkeylabel": "AIPromptTool", "object": "ObjectExternal" }, "tsl_lang": "FRA", - "tsl_value": "Ressources du processus", + "tsl_value": "Outil d'invite", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -12899,17 +13005,17 @@ }, { "object": "TranslateExternal", - "userkey": "AIRestAPI English", + "userkey": "ObjectExternal(AIMetricsChat)~ENU", "item": { "tsl_object": { - "item": {"obe_name": "AIRestAPI"}, + "item": {"obe_name": "AIMetricsChat"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIRestAPI", + "userkeylabel": "AIMetricsChat", "object": "ObjectExternal" }, "tsl_lang": "ENU", - "tsl_value": "Rest API", + "tsl_value": "AI powered charts", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -12917,17 +13023,17 @@ }, { "object": "TranslateExternal", - "userkey": "AIRestAPI French", + "userkey": "ObjectExternal(AIMetricsChat)~FRA", "item": { "tsl_object": { - "item": {"obe_name": "AIRestAPI"}, + "item": {"obe_name": "AIMetricsChat"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIRestAPI", + "userkeylabel": "AIMetricsChat", "object": "ObjectExternal" }, "tsl_lang": "FRA", - "tsl_value": "Rest API", + "tsl_value": "Graphiques alimentés par l'IA", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -12935,7 +13041,7 @@ }, { "object": "TranslateExternal", - "userkey": "AIShortcut English", + "userkey": "ObjectExternal(AIShortcut)~ENU", "item": { "tsl_object": { "item": {"obe_name": "AIShortcut"}, @@ -12953,7 +13059,7 @@ }, { "object": "TranslateExternal", - "userkey": "AIShortcut French", + "userkey": "ObjectExternal(AIShortcut)~FRA", "item": { "tsl_object": { "item": {"obe_name": "AIShortcut"}, @@ -12971,17 +13077,17 @@ }, { "object": "TranslateExternal", - "userkey": "AIPromptTool English", + "userkey": "ObjectExternal(AIRestAPI)~ENU", "item": { "tsl_object": { - "item": {"obe_name": "AIPromptTool"}, + "item": {"obe_name": "AIRestAPI"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIPromptTool", + "userkeylabel": "AIRestAPI", "object": "ObjectExternal" }, "tsl_lang": "ENU", - "tsl_value": "Prompt tool", + "tsl_value": "Rest API", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -12989,17 +13095,17 @@ }, { "object": "TranslateExternal", - "userkey": "AIPromptTool French", + "userkey": "ObjectExternal(AIRestAPI)~FRA", "item": { "tsl_object": { - "item": {"obe_name": "AIPromptTool"}, + "item": {"obe_name": "AIRestAPI"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIPromptTool", + "userkeylabel": "AIRestAPI", "object": "ObjectExternal" }, "tsl_lang": "FRA", - "tsl_value": "Outil d'invite", + "tsl_value": "Rest API", "tsl_plural_value": null, "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" @@ -13014,7 +13120,7 @@ "field": "row_module_id", "list": [{ "object": "TranslateShortcut", - "userkey": "AIBot *", + "userkey": "ShortCut(AIBot)~ANY", "item": { "tsl_object": { "item": {"shc_name": "AIBot"}, @@ -13038,7 +13144,7 @@ "list": [ { "object": "TranslateObjectField", - "userkey": "AiGroupGuiDesc viw_name 210 *", + "userkey": "ObjectFieldSystem(AiGroupGuiDesc viw_name 210)~ANY", "item": { "tsl_object": { "item": { @@ -13063,7 +13169,7 @@ }, { "object": "TranslateObjectField", - "userkey": "AiGroupView grp_name 210 English", + "userkey": "ObjectFieldSystem(AiGroupView grp_name 210)~ENU", "item": { "tsl_object": { "item": { @@ -13088,7 +13194,7 @@ }, { "object": "TranslateObjectField", - "userkey": "AiGroupView grp_name 210 French", + "userkey": "ObjectFieldSystem(AiGroupView grp_name 210)~FRA", "item": { "tsl_object": { "item": { @@ -13121,137 +13227,137 @@ "list": [ { "object": "TranslateView", - "userkey": "AIChatVue English", + "userkey": "View(AIscope)~ENU", "item": { "tsl_object": { - "item": {"viw_name": "AIChatVue"}, + "item": {"viw_name": "AIscope"}, "icon": "img/system/view", "label": "View", - "userkeylabel": "AIChatVue", + "userkeylabel": "AIscope", "object": "View" }, "tsl_lang": "ENU", - "tsl_value": "Chat vue", - "tsl_help": null, + "tsl_value": "AI Simplicité Administrator", + "tsl_help": "

Global management of platform, user rights and applications with AI<\/p>", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateView", - "userkey": "AIChatVue French", + "userkey": "View(AIscope)~FRA", "item": { "tsl_object": { - "item": {"viw_name": "AIChatVue"}, + "item": {"viw_name": "AIscope"}, "icon": "img/system/view", "label": "View", - "userkeylabel": "AIChatVue", + "userkeylabel": "AIscope", "object": "View" }, "tsl_lang": "FRA", - "tsl_value": "Chat vue", - "tsl_help": null, + "tsl_value": "IA Administrateur Simplicité", + "tsl_help": "

Gestion globale de la plateforme, des droits et des applications avec IA<\/p>", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateView", - "userkey": "AIMonitoring English", + "userkey": "View(AIViewExpTool)~ENU", "item": { "tsl_object": { - "item": {"viw_name": "AIMonitoring"}, + "item": {"viw_name": "AIViewExpTool"}, "icon": "img/system/view", "label": "View", - "userkeylabel": "AIMonitoring", + "userkeylabel": "AIViewExpTool", "object": "View" }, "tsl_lang": "ENU", - "tsl_value": "Monitoring", + "tsl_value": "AI Tool", "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateView", - "userkey": "AIMonitoring French", + "userkey": "View(AIViewExpTool)~FRA", "item": { "tsl_object": { - "item": {"viw_name": "AIMonitoring"}, + "item": {"viw_name": "AIViewExpTool"}, "icon": "img/system/view", "label": "View", - "userkeylabel": "AIMonitoring", + "userkeylabel": "AIViewExpTool", "object": "View" }, "tsl_lang": "FRA", - "tsl_value": "Monitoring", + "tsl_value": "Outils IA", "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateView", - "userkey": "AIViewExpTool English", + "userkey": "View(AIChatVue)~ENU", "item": { "tsl_object": { - "item": {"viw_name": "AIViewExpTool"}, + "item": {"viw_name": "AIChatVue"}, "icon": "img/system/view", "label": "View", - "userkeylabel": "AIViewExpTool", + "userkeylabel": "AIChatVue", "object": "View" }, "tsl_lang": "ENU", - "tsl_value": "AI Tool", + "tsl_value": "Chat vue", "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateView", - "userkey": "AIViewExpTool French", + "userkey": "View(AIChatVue)~FRA", "item": { "tsl_object": { - "item": {"viw_name": "AIViewExpTool"}, + "item": {"viw_name": "AIChatVue"}, "icon": "img/system/view", "label": "View", - "userkeylabel": "AIViewExpTool", + "userkeylabel": "AIChatVue", "object": "View" }, "tsl_lang": "FRA", - "tsl_value": "Outils IA", + "tsl_value": "Chat vue", "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateView", - "userkey": "AIscope English", + "userkey": "View(AIMonitoring)~ENU", "item": { "tsl_object": { - "item": {"viw_name": "AIscope"}, + "item": {"viw_name": "AIMonitoring"}, "icon": "img/system/view", "label": "View", - "userkeylabel": "AIscope", + "userkeylabel": "AIMonitoring", "object": "View" }, "tsl_lang": "ENU", - "tsl_value": "AI Simplicité Administrator", - "tsl_help": "

Global management of platform, user rights and applications with AI<\/p>", + "tsl_value": "Monitoring", + "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateView", - "userkey": "AIscope French", + "userkey": "View(AIMonitoring)~FRA", "item": { "tsl_object": { - "item": {"viw_name": "AIscope"}, + "item": {"viw_name": "AIMonitoring"}, "icon": "img/system/view", "label": "View", - "userkeylabel": "AIscope", + "userkeylabel": "AIMonitoring", "object": "View" }, "tsl_lang": "FRA", - "tsl_value": "IA Administrateur Simplicité", - "tsl_help": "

Gestion globale de la plateforme, des droits et des applications avec IA<\/p>", + "tsl_value": "Monitoring", + "tsl_help": null, "row_module_id__mdl_name": "AIBySimplicite" } } @@ -13265,16 +13371,16 @@ "list": [ { "object": "TranslateActivity", - "userkey": "AIGenData GGD-BEG English", + "userkey": "BPMActivity(AiSettingsProcess ASP-BEG)~ENU", "item": { "tsl_object": { "item": { - "acy_process_id__pcs_name": "AIGenData", - "acy_step": "GGD-BEG" + "acy_process_id__pcs_name": "AiSettingsProcess", + "acy_step": "ASP-BEG" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIGenData GGD-BEG", + "userkeylabel": "AiSettingsProcess ASP-BEG", "object": "BPMActivity" }, "tsl_lang": "ENU", @@ -13284,16 +13390,16 @@ }, { "object": "TranslateActivity", - "userkey": "AIGenData GGD-BEG French", + "userkey": "BPMActivity(AiSettingsProcess ASP-BEG)~FRA", "item": { "tsl_object": { "item": { - "acy_process_id__pcs_name": "AIGenData", - "acy_step": "GGD-BEG" + "acy_process_id__pcs_name": "AiSettingsProcess", + "acy_step": "ASP-BEG" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIGenData GGD-BEG", + "userkeylabel": "AiSettingsProcess ASP-BEG", "object": "BPMActivity" }, "tsl_lang": "FRA", @@ -13303,7 +13409,83 @@ }, { "object": "TranslateActivity", - "userkey": "AIGenData GDD_SETTINGS_END English", + "userkey": "BPMActivity(AiSettingsProcess ASP-END)~ENU", + "item": { + "tsl_object": { + "item": { + "acy_process_id__pcs_name": "AiSettingsProcess", + "acy_step": "ASP-END" + }, + "icon": "img/system/activity", + "label": "Activity", + "userkeylabel": "AiSettingsProcess ASP-END", + "object": "BPMActivity" + }, + "tsl_lang": "ENU", + "tsl_value": "End", + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "TranslateActivity", + "userkey": "BPMActivity(AiSettingsProcess ASP-END)~FRA", + "item": { + "tsl_object": { + "item": { + "acy_process_id__pcs_name": "AiSettingsProcess", + "acy_step": "ASP-END" + }, + "icon": "img/system/activity", + "label": "Activity", + "userkeylabel": "AiSettingsProcess ASP-END", + "object": "BPMActivity" + }, + "tsl_lang": "FRA", + "tsl_value": "End", + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "TranslateActivity", + "userkey": "BPMActivity(AIGenData GGD_0125)~ENU", + "item": { + "tsl_object": { + "item": { + "acy_process_id__pcs_name": "AIGenData", + "acy_step": "GGD_0125" + }, + "icon": "img/system/activity", + "label": "Activity", + "userkeylabel": "AIGenData GGD_0125", + "object": "BPMActivity" + }, + "tsl_lang": "ENU", + "tsl_value": "data generation parameters", + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "TranslateActivity", + "userkey": "BPMActivity(AIGenData GGD_0125)~FRA", + "item": { + "tsl_object": { + "item": { + "acy_process_id__pcs_name": "AIGenData", + "acy_step": "GGD_0125" + }, + "icon": "img/system/activity", + "label": "Activity", + "userkeylabel": "AIGenData GGD_0125", + "object": "BPMActivity" + }, + "tsl_lang": "FRA", + "tsl_value": "Paramétrer la génération de données", + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "TranslateActivity", + "userkey": "BPMActivity(AIGenData GDD_SETTINGS_END)~ENU", "item": { "tsl_object": { "item": { @@ -13322,7 +13504,7 @@ }, { "object": "TranslateActivity", - "userkey": "AIGenData GDD_SETTINGS_END French", + "userkey": "BPMActivity(AIGenData GDD_SETTINGS_END)~FRA", "item": { "tsl_object": { "item": { @@ -13341,45 +13523,45 @@ }, { "object": "TranslateActivity", - "userkey": "AIGenData GGD_0050 English", + "userkey": "BPMActivity(AIGenData GGD-BEG)~ENU", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIGenData", - "acy_step": "GGD_0050" + "acy_step": "GGD-BEG" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIGenData GGD_0050", + "userkeylabel": "AIGenData GGD-BEG", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Is param", + "tsl_value": "Begin", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIGenData GGD_0050 French", + "userkey": "BPMActivity(AIGenData GGD-BEG)~FRA", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIGenData", - "acy_step": "GGD_0050" + "acy_step": "GGD-BEG" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIGenData GGD_0050", + "userkeylabel": "AIGenData GGD-BEG", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Is param", + "tsl_value": "Begin", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIGenData GGD-END English", + "userkey": "BPMActivity(AIGenData GGD-END)~ENU", "item": { "tsl_object": { "item": { @@ -13398,7 +13580,7 @@ }, { "object": "TranslateActivity", - "userkey": "AIGenData GGD-END French", + "userkey": "BPMActivity(AIGenData GGD-END)~FRA", "item": { "tsl_object": { "item": { @@ -13417,159 +13599,159 @@ }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC-END English", + "userkey": "BPMActivity(AIGenData GGD_0050)~ENU", "item": { "tsl_object": { "item": { - "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC-END" + "acy_process_id__pcs_name": "AIGenData", + "acy_step": "GGD_0050" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC-END", + "userkeylabel": "AIGenData GGD_0050", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "End", + "tsl_value": "Is param", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC-END French", + "userkey": "BPMActivity(AIGenData GGD_0050)~FRA", "item": { "tsl_object": { "item": { - "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC-END" + "acy_process_id__pcs_name": "AIGenData", + "acy_step": "GGD_0050" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC-END", + "userkeylabel": "AIGenData GGD_0050", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Fin", + "tsl_value": "Is param", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIGenData GGD_0150 English", + "userkey": "BPMActivity(AIGenData GGD_0075)~ENU", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIGenData", - "acy_step": "GGD_0150" + "acy_step": "GGD_0075" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIGenData GGD_0150", + "userkeylabel": "AIGenData GGD_0075", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Confirm", + "tsl_value": "Data cannot be generated", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIGenData GGD_0150 French", + "userkey": "BPMActivity(AIGenData GGD_0075)~FRA", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIGenData", - "acy_step": "GGD_0150" + "acy_step": "GGD_0075" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIGenData GGD_0150", + "userkeylabel": "AIGenData GGD_0075", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Confirmation", + "tsl_value": "Génération de données impossible", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIGenData GGD_0200 English", + "userkey": "BPMActivity(AIGenData GGD_0100)~ENU", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIGenData", - "acy_step": "GGD_0200" + "acy_step": "GGD_0100" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIGenData GGD_0200", + "userkeylabel": "AIGenData GGD_0100", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Data generation", + "tsl_value": "Select module", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIGenData GGD_0200 French", + "userkey": "BPMActivity(AIGenData GGD_0100)~FRA", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIGenData", - "acy_step": "GGD_0200" + "acy_step": "GGD_0100" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIGenData GGD_0200", + "userkeylabel": "AIGenData GGD_0100", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Génération des données", + "tsl_value": "Séléction du module", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIGenData GGD_0100 English", + "userkey": "BPMActivity(AIGenData GGD_0200)~ENU", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIGenData", - "acy_step": "GGD_0100" + "acy_step": "GGD_0200" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIGenData GGD_0100", + "userkeylabel": "AIGenData GGD_0200", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Select module", + "tsl_value": "Items generated", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIGenData GGD_0100 French", + "userkey": "BPMActivity(AIGenData GGD_0200)~FRA", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIGenData", - "acy_step": "GGD_0100" + "acy_step": "GGD_0200" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIGenData GGD_0100", + "userkeylabel": "AIGenData GGD_0200", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Séléction du module", + "tsl_value": "Éléments générés", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC-BEG English", + "userkey": "BPMActivity(AIModuleCreate AIC-BEG)~ENU", "item": { "tsl_object": { "item": { @@ -13588,7 +13770,7 @@ }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC-BEG French", + "userkey": "BPMActivity(AIModuleCreate AIC-BEG)~FRA", "item": { "tsl_object": { "item": { @@ -13607,83 +13789,121 @@ }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0005 English", + "userkey": "BPMActivity(AIGenData GGD_0150)~ENU", + "item": { + "tsl_object": { + "item": { + "acy_process_id__pcs_name": "AIGenData", + "acy_step": "GGD_0150" + }, + "icon": "img/system/activity", + "label": "Activity", + "userkeylabel": "AIGenData GGD_0150", + "object": "BPMActivity" + }, + "tsl_lang": "ENU", + "tsl_value": "Confirm", + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "TranslateActivity", + "userkey": "BPMActivity(AIGenData GGD_0150)~FRA", + "item": { + "tsl_object": { + "item": { + "acy_process_id__pcs_name": "AIGenData", + "acy_step": "GGD_0150" + }, + "icon": "img/system/activity", + "label": "Activity", + "userkeylabel": "AIGenData GGD_0150", + "object": "BPMActivity" + }, + "tsl_lang": "FRA", + "tsl_value": "Confirmation", + "row_module_id__mdl_name": "AIBySimplicite" + } + }, + { + "object": "TranslateActivity", + "userkey": "BPMActivity(AIModuleCreate AIC-END)~ENU", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0005" + "acy_step": "AIC-END" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0005", + "userkeylabel": "AIModuleCreate AIC-END", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Create or update module", + "tsl_value": "End", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0005 French", + "userkey": "BPMActivity(AIModuleCreate AIC-END)~FRA", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0005" + "acy_step": "AIC-END" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0005", + "userkeylabel": "AIModuleCreate AIC-END", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Créer ou mettre à jour module", + "tsl_value": "Fin", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIGenData GGD_0075 English", + "userkey": "BPMActivity(AIModuleCreate AIC_0005)~ENU", "item": { "tsl_object": { "item": { - "acy_process_id__pcs_name": "AIGenData", - "acy_step": "GGD_0075" + "acy_process_id__pcs_name": "AIModuleCreate", + "acy_step": "AIC_0005" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIGenData GGD_0075", + "userkeylabel": "AIModuleCreate AIC_0005", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Data cannot be generated", + "tsl_value": "Create or update module", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIGenData GGD_0075 French", + "userkey": "BPMActivity(AIModuleCreate AIC_0005)~FRA", "item": { "tsl_object": { "item": { - "acy_process_id__pcs_name": "AIGenData", - "acy_step": "GGD_0075" + "acy_process_id__pcs_name": "AIModuleCreate", + "acy_step": "AIC_0005" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIGenData GGD_0075", + "userkeylabel": "AIModuleCreate AIC_0005", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Génération de données impossible", + "tsl_value": "Créer ou mettre à jour module", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0010 English", + "userkey": "BPMActivity(AIModuleCreate AIC_0010)~ENU", "item": { "tsl_object": { "item": { @@ -13702,7 +13922,7 @@ }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0010 French", + "userkey": "BPMActivity(AIModuleCreate AIC_0010)~FRA", "item": { "tsl_object": { "item": { @@ -13721,159 +13941,159 @@ }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0020 English", + "userkey": "BPMActivity(AIModuleCreate AIC_0015)~ENU", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0020" + "acy_step": "AIC_0015" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0020", + "userkeylabel": "AIModuleCreate AIC_0015", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Grant your user to the generated group?", + "tsl_value": "Translate Domain", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0020 French", + "userkey": "BPMActivity(AIModuleCreate AIC_0015)~FRA", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0020" + "acy_step": "AIC_0015" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0020", + "userkeylabel": "AIModuleCreate AIC_0015", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Habiliter votre utilisateur au groupe généré?", + "tsl_value": "Traduire le domaine", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0015 English", + "userkey": "BPMActivity(AIModuleCreate AIC_0017)~ENU", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0015" + "acy_step": "AIC_0017" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0015", + "userkeylabel": "AIModuleCreate AIC_0017", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Translate Domain", + "tsl_value": "Create scope", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0015 French", + "userkey": "BPMActivity(AIModuleCreate AIC_0017)~FRA", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0015" + "acy_step": "AIC_0017" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0015", + "userkeylabel": "AIModuleCreate AIC_0017", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Traduire le domaine", + "tsl_value": "Créer un scope", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0200 English", + "userkey": "BPMActivity(AIModuleCreate AIC_0020)~ENU", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0200" + "acy_step": "AIC_0020" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0200", + "userkeylabel": "AIModuleCreate AIC_0020", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Select groups", + "tsl_value": "Grant your user to the generated group?", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0200 French", + "userkey": "BPMActivity(AIModuleCreate AIC_0020)~FRA", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0200" + "acy_step": "AIC_0020" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0200", + "userkeylabel": "AIModuleCreate AIC_0020", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Sélectionner les groupes", + "tsl_value": "Habiliter votre utilisateur au groupe généré?", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0017 English", + "userkey": "BPMActivity(AIModuleCreate AIC_0075)~ENU", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0017" + "acy_step": "AIC_0075" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0017", + "userkeylabel": "AIModuleCreate AIC_0075", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Create scope", + "tsl_value": "Module cannot be generated", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0017 French", + "userkey": "BPMActivity(AIModuleCreate AIC_0075)~FRA", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0017" + "acy_step": "AIC_0075" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0017", + "userkeylabel": "AIModuleCreate AIC_0075", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Créer un scope", + "tsl_value": "Génération du module impossible", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0050 English", + "userkey": "BPMActivity(AIModuleCreate AIC_0050)~ENU", "item": { "tsl_object": { "item": { @@ -13892,7 +14112,7 @@ }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0050 French", + "userkey": "BPMActivity(AIModuleCreate AIC_0050)~FRA", "item": { "tsl_object": { "item": { @@ -13911,83 +14131,83 @@ }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0075 English", + "userkey": "BPMActivity(AIModuleCreate AIC_0100)~ENU", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0075" + "acy_step": "AIC_0100" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0075", + "userkeylabel": "AIModuleCreate AIC_0100", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Module cannot be generated", + "tsl_value": "Select module", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0075 French", + "userkey": "BPMActivity(AIModuleCreate AIC_0100)~FRA", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0075" + "acy_step": "AIC_0100" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0075", + "userkeylabel": "AIModuleCreate AIC_0100", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Génération du module impossible", + "tsl_value": "Sélectionner un module", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0400 English", + "userkey": "BPMActivity(AIModuleCreate AIC_0200)~ENU", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0400" + "acy_step": "AIC_0200" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0400", + "userkeylabel": "AIModuleCreate AIC_0200", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Specifications", + "tsl_value": "Select groups", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0400 French", + "userkey": "BPMActivity(AIModuleCreate AIC_0200)~FRA", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0400" + "acy_step": "AIC_0200" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0400", + "userkeylabel": "AIModuleCreate AIC_0200", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Cahier des charges", + "tsl_value": "Sélectionner les groupes", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0300 English", + "userkey": "BPMActivity(AIModuleCreate AIC_0300)~ENU", "item": { "tsl_object": { "item": { @@ -14006,7 +14226,7 @@ }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0300 French", + "userkey": "BPMActivity(AIModuleCreate AIC_0300)~FRA", "item": { "tsl_object": { "item": { @@ -14025,7 +14245,7 @@ }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0350 English", + "userkey": "BPMActivity(AIModuleCreate AIC_0350)~ENU", "item": { "tsl_object": { "item": { @@ -14044,7 +14264,7 @@ }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0350 French", + "userkey": "BPMActivity(AIModuleCreate AIC_0350)~FRA", "item": { "tsl_object": { "item": { @@ -14063,45 +14283,45 @@ }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0100 English", + "userkey": "BPMActivity(AIModuleCreate AIC_0400)~ENU", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0100" + "acy_step": "AIC_0400" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0100", + "userkeylabel": "AIModuleCreate AIC_0400", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Select module", + "tsl_value": "Specifications", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0100 French", + "userkey": "BPMActivity(AIModuleCreate AIC_0400)~FRA", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AIModuleCreate", - "acy_step": "AIC_0100" + "acy_step": "AIC_0400" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AIModuleCreate AIC_0100", + "userkeylabel": "AIModuleCreate AIC_0400", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Sélectionner un module", + "tsl_value": "Cahier des charges", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0600 English", + "userkey": "BPMActivity(AIModuleCreate AIC_0600)~ENU", "item": { "tsl_object": { "item": { @@ -14120,7 +14340,7 @@ }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0600 French", + "userkey": "BPMActivity(AIModuleCreate AIC_0600)~FRA", "item": { "tsl_object": { "item": { @@ -14139,7 +14359,7 @@ }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0700 English", + "userkey": "BPMActivity(AIModuleCreate AIC_0700)~ENU", "item": { "tsl_object": { "item": { @@ -14158,7 +14378,7 @@ }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate AIC_0700 French", + "userkey": "BPMActivity(AIModuleCreate AIC_0700)~FRA", "item": { "tsl_object": { "item": { @@ -14177,7 +14397,7 @@ }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate GDD_SETTINGS_END English", + "userkey": "BPMActivity(AIModuleCreate GDD_SETTINGS_END)~ENU", "item": { "tsl_object": { "item": { @@ -14196,7 +14416,7 @@ }, { "object": "TranslateActivity", - "userkey": "AIModuleCreate GDD_SETTINGS_END French", + "userkey": "BPMActivity(AIModuleCreate GDD_SETTINGS_END)~FRA", "item": { "tsl_object": { "item": { @@ -14215,83 +14435,7 @@ }, { "object": "TranslateActivity", - "userkey": "AiSettingsProcess ASP-0050 English", - "item": { - "tsl_object": { - "item": { - "acy_process_id__pcs_name": "AiSettingsProcess", - "acy_step": "ASP-0050" - }, - "icon": "img/system/activity", - "label": "Activity", - "userkeylabel": "AiSettingsProcess ASP-0050", - "object": "BPMActivity" - }, - "tsl_lang": "ENU", - "tsl_value": "Is global param", - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "TranslateActivity", - "userkey": "AiSettingsProcess ASP-0050 French", - "item": { - "tsl_object": { - "item": { - "acy_process_id__pcs_name": "AiSettingsProcess", - "acy_step": "ASP-0050" - }, - "icon": "img/system/activity", - "label": "Activity", - "userkeylabel": "AiSettingsProcess ASP-0050", - "object": "BPMActivity" - }, - "tsl_lang": "FRA", - "tsl_value": "Is global param", - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "TranslateActivity", - "userkey": "AiSettingsProcess ASP-0075 English", - "item": { - "tsl_object": { - "item": { - "acy_process_id__pcs_name": "AiSettingsProcess", - "acy_step": "ASP-0075" - }, - "icon": "img/system/activity", - "label": "Activity", - "userkeylabel": "AiSettingsProcess ASP-0075", - "object": "BPMActivity" - }, - "tsl_lang": "ENU", - "tsl_value": "Warning", - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "TranslateActivity", - "userkey": "AiSettingsProcess ASP-0075 French", - "item": { - "tsl_object": { - "item": { - "acy_process_id__pcs_name": "AiSettingsProcess", - "acy_step": "ASP-0075" - }, - "icon": "img/system/activity", - "label": "Activity", - "userkeylabel": "AiSettingsProcess ASP-0075", - "object": "BPMActivity" - }, - "tsl_lang": "FRA", - "tsl_value": "Avertissement", - "row_module_id__mdl_name": "AIBySimplicite" - } - }, - { - "object": "TranslateActivity", - "userkey": "AiSettingsProcess ASP-0100 English", + "userkey": "BPMActivity(AiSettingsProcess ASP-0100)~ENU", "item": { "tsl_object": { "item": { @@ -14310,7 +14454,7 @@ }, { "object": "TranslateActivity", - "userkey": "AiSettingsProcess ASP-0100 French", + "userkey": "BPMActivity(AiSettingsProcess ASP-0100)~FRA", "item": { "tsl_object": { "item": { @@ -14329,45 +14473,45 @@ }, { "object": "TranslateActivity", - "userkey": "AiSettingsProcess ASP-0400 English", + "userkey": "BPMActivity(AiSettingsProcess ASP-0050)~ENU", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AiSettingsProcess", - "acy_step": "ASP-0400" + "acy_step": "ASP-0050" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AiSettingsProcess ASP-0400", + "userkeylabel": "AiSettingsProcess ASP-0050", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Other parameters", + "tsl_value": "Is global param", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AiSettingsProcess ASP-0400 French", + "userkey": "BPMActivity(AiSettingsProcess ASP-0050)~FRA", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AiSettingsProcess", - "acy_step": "ASP-0400" + "acy_step": "ASP-0050" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AiSettingsProcess ASP-0400", + "userkeylabel": "AiSettingsProcess ASP-0050", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Autres paramètres", + "tsl_value": "Is global param", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AiSettingsProcess ASP-0200 English", + "userkey": "BPMActivity(AiSettingsProcess ASP-0200)~ENU", "item": { "tsl_object": { "item": { @@ -14386,7 +14530,7 @@ }, { "object": "TranslateActivity", - "userkey": "AiSettingsProcess ASP-0200 French", + "userkey": "BPMActivity(AiSettingsProcess ASP-0200)~FRA", "item": { "tsl_object": { "item": { @@ -14405,115 +14549,115 @@ }, { "object": "TranslateActivity", - "userkey": "AiSettingsProcess ASP-0500 English", + "userkey": "BPMActivity(AiSettingsProcess ASP-0075)~ENU", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AiSettingsProcess", - "acy_step": "ASP-0500" + "acy_step": "ASP-0075" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AiSettingsProcess ASP-0500", + "userkeylabel": "AiSettingsProcess ASP-0075", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Add the chatbot to your header ?", + "tsl_value": "Warning", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AiSettingsProcess ASP-0500 French", + "userkey": "BPMActivity(AiSettingsProcess ASP-0075)~FRA", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AiSettingsProcess", - "acy_step": "ASP-0500" + "acy_step": "ASP-0075" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AiSettingsProcess ASP-0500", + "userkeylabel": "AiSettingsProcess ASP-0075", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Ajoutez le chatbot à votre en-tête ?", + "tsl_value": "Avertissement", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AiSettingsProcess ASP-BEG English", + "userkey": "BPMActivity(AiSettingsProcess ASP-0400)~ENU", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AiSettingsProcess", - "acy_step": "ASP-BEG" + "acy_step": "ASP-0400" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AiSettingsProcess ASP-BEG", + "userkeylabel": "AiSettingsProcess ASP-0400", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "Begin", + "tsl_value": "Other parameters", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AiSettingsProcess ASP-BEG French", + "userkey": "BPMActivity(AiSettingsProcess ASP-0400)~FRA", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AiSettingsProcess", - "acy_step": "ASP-BEG" + "acy_step": "ASP-0400" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AiSettingsProcess ASP-BEG", + "userkeylabel": "AiSettingsProcess ASP-0400", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "Begin", + "tsl_value": "Autres paramètres", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AiSettingsProcess ASP-END English", + "userkey": "BPMActivity(AiSettingsProcess ASP-0500)~ENU", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AiSettingsProcess", - "acy_step": "ASP-END" + "acy_step": "ASP-0500" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AiSettingsProcess ASP-END", + "userkeylabel": "AiSettingsProcess ASP-0500", "object": "BPMActivity" }, "tsl_lang": "ENU", - "tsl_value": "End", + "tsl_value": "Add the chatbot to your header ?", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateActivity", - "userkey": "AiSettingsProcess ASP-END French", + "userkey": "BPMActivity(AiSettingsProcess ASP-0500)~FRA", "item": { "tsl_object": { "item": { "acy_process_id__pcs_name": "AiSettingsProcess", - "acy_step": "ASP-END" + "acy_step": "ASP-0500" }, "icon": "img/system/activity", "label": "Activity", - "userkeylabel": "AiSettingsProcess ASP-END", + "userkeylabel": "AiSettingsProcess ASP-0500", "object": "BPMActivity" }, "tsl_lang": "FRA", - "tsl_value": "End", + "tsl_value": "Ajoutez le chatbot à votre en-tête ?", "row_module_id__mdl_name": "AIBySimplicite" } } @@ -14527,97 +14671,97 @@ "list": [ { "object": "TranslateProcess", - "userkey": "AiSettingsProcess English", + "userkey": "BPMProcess(AIModuleCreate)~ENU", "item": { "tsl_object": { - "item": {"pcs_name": "AiSettingsProcess"}, + "item": {"pcs_name": "AIModuleCreate"}, "icon": "img/system/process", "label": "Business process", - "userkeylabel": "AiSettingsProcess", + "userkeylabel": "AIModuleCreate", "object": "BPMProcess" }, "tsl_lang": "ENU", - "tsl_value": "Configuring the wizard", + "tsl_value": "Module generation", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateProcess", - "userkey": "AiSettingsProcess French", + "userkey": "BPMProcess(AIModuleCreate)~FRA", "item": { "tsl_object": { - "item": {"pcs_name": "AiSettingsProcess"}, + "item": {"pcs_name": "AIModuleCreate"}, "icon": "img/system/process", "label": "Business process", - "userkeylabel": "AiSettingsProcess", + "userkeylabel": "AIModuleCreate", "object": "BPMProcess" }, "tsl_lang": "FRA", - "tsl_value": "Configuration de l'assistant", + "tsl_value": "Génération du module", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateProcess", - "userkey": "AIGenData English", + "userkey": "BPMProcess(AiSettingsProcess)~ENU", "item": { "tsl_object": { - "item": {"pcs_name": "AIGenData"}, + "item": {"pcs_name": "AiSettingsProcess"}, "icon": "img/system/process", "label": "Business process", - "userkeylabel": "AIGenData", + "userkeylabel": "AiSettingsProcess", "object": "BPMProcess" }, "tsl_lang": "ENU", - "tsl_value": "Data generation", + "tsl_value": "Configuring the wizard", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateProcess", - "userkey": "AIGenData French", + "userkey": "BPMProcess(AiSettingsProcess)~FRA", "item": { "tsl_object": { - "item": {"pcs_name": "AIGenData"}, + "item": {"pcs_name": "AiSettingsProcess"}, "icon": "img/system/process", "label": "Business process", - "userkeylabel": "AIGenData", + "userkeylabel": "AiSettingsProcess", "object": "BPMProcess" }, "tsl_lang": "FRA", - "tsl_value": "Génération de données", + "tsl_value": "Configuration de l'assistant", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateProcess", - "userkey": "AIModuleCreate English", + "userkey": "BPMProcess(AIGenData)~ENU", "item": { "tsl_object": { - "item": {"pcs_name": "AIModuleCreate"}, + "item": {"pcs_name": "AIGenData"}, "icon": "img/system/process", "label": "Business process", - "userkeylabel": "AIModuleCreate", + "userkeylabel": "AIGenData", "object": "BPMProcess" }, "tsl_lang": "ENU", - "tsl_value": "Module generation", + "tsl_value": "Data generation", "row_module_id__mdl_name": "AIBySimplicite" } }, { "object": "TranslateProcess", - "userkey": "AIModuleCreate French", + "userkey": "BPMProcess(AIGenData)~FRA", "item": { "tsl_object": { - "item": {"pcs_name": "AIModuleCreate"}, + "item": {"pcs_name": "AIGenData"}, "icon": "img/system/process", "label": "Business process", - "userkeylabel": "AIModuleCreate", + "userkeylabel": "AIGenData", "object": "BPMProcess" }, "tsl_lang": "FRA", - "tsl_value": "Génération du module", + "tsl_value": "Génération de données", "row_module_id__mdl_name": "AIBySimplicite" } } @@ -14631,7 +14775,7 @@ "list": [ { "object": "Dataset", - "userkey": "AIBySimplicite MistralAI_Provider", + "userkey": "AIBySimplicite~MistralAI_Provider", "item": { "row_module_id__mdl_name": "AIBySimplicite", "dt_name": "MistralAI_Provider", @@ -14645,7 +14789,7 @@ }, { "object": "Dataset", - "userkey": "AIBySimplicite OpenAI_Provider", + "userkey": "AIBySimplicite~OpenAI_Provider", "item": { "row_module_id__mdl_name": "AIBySimplicite", "dt_name": "OpenAI_Provider", @@ -14667,7 +14811,7 @@ "list": [ { "object": "Permission", - "userkey": "ADMIN AIProcessResource", + "userkey": "ADMIN~ObjectExternal(AIProcessResource)~", "item": { "prm_group_id__grp_name": "ADMIN", "prm_object": { @@ -14687,7 +14831,7 @@ }, { "object": "Permission", - "userkey": "AI_ADMIN AiMonitoring", + "userkey": "AI_ADMIN~ObjectExternal(AiMonitoring)~", "item": { "prm_group_id__grp_name": "AI_ADMIN", "prm_object": { @@ -14707,7 +14851,7 @@ }, { "object": "Permission", - "userkey": "AI_ADMIN AIChatVue", + "userkey": "AI_ADMIN~ViewSimple(AIChatVue)~", "item": { "prm_group_id__grp_name": "AI_ADMIN", "prm_object": { @@ -14727,7 +14871,7 @@ }, { "object": "Permission", - "userkey": "AI_BUSINESS AIDomain", + "userkey": "AI_BUSINESS~Domain(AIDomain)~", "item": { "prm_group_id__grp_name": "AI_BUSINESS", "prm_object": { @@ -14747,7 +14891,7 @@ }, { "object": "Permission", - "userkey": "AI_BUSINESS AIChatBot", + "userkey": "AI_BUSINESS~ObjectExternal(AIChatBot)~", "item": { "prm_group_id__grp_name": "AI_BUSINESS", "prm_object": { @@ -14767,7 +14911,7 @@ }, { "object": "Permission", - "userkey": "AI_BUSINESS AIMetricsChat", + "userkey": "AI_BUSINESS~ObjectExternal(AIMetricsChat)~", "item": { "prm_group_id__grp_name": "AI_BUSINESS", "prm_object": { @@ -14787,7 +14931,7 @@ }, { "object": "Permission", - "userkey": "AI_BUSINESS AIBot", + "userkey": "AI_BUSINESS~ShortCut(AIBot)~", "item": { "prm_group_id__grp_name": "AI_BUSINESS", "prm_object": { @@ -14807,7 +14951,7 @@ }, { "object": "Permission", - "userkey": "AI_DESIGNER AIDomain", + "userkey": "AI_DESIGNER~Domain(AIDomain)~", "item": { "prm_group_id__grp_name": "AI_DESIGNER", "prm_object": { @@ -14827,7 +14971,7 @@ }, { "object": "Permission", - "userkey": "AI_DESIGNER AIExpTool", + "userkey": "AI_DESIGNER~ObjectExternal(AIExpTool)~", "item": { "prm_group_id__grp_name": "AI_DESIGNER", "prm_object": { @@ -14847,14 +14991,14 @@ }, { "object": "Permission", - "userkey": "AI_DESIGNER AIRestAPI", + "userkey": "AI_DESIGNER~ObjectExternal(AIPromptTool)~", "item": { "prm_group_id__grp_name": "AI_DESIGNER", "prm_object": { - "item": {"obe_name": "AIRestAPI"}, + "item": {"obe_name": "AIPromptTool"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIRestAPI", + "userkeylabel": "AIPromptTool", "object": "ObjectExternal" }, "prm_perm": true, @@ -14867,7 +15011,7 @@ }, { "object": "Permission", - "userkey": "AI_DESIGNER AIShortcut", + "userkey": "AI_DESIGNER~ObjectExternal(AIShortcut)~", "item": { "prm_group_id__grp_name": "AI_DESIGNER", "prm_object": { @@ -14887,14 +15031,14 @@ }, { "object": "Permission", - "userkey": "AI_DESIGNER AIPromptTool", + "userkey": "AI_DESIGNER~ObjectExternal(AIRestAPI)~", "item": { "prm_group_id__grp_name": "AI_DESIGNER", "prm_object": { - "item": {"obe_name": "AIPromptTool"}, + "item": {"obe_name": "AIRestAPI"}, "icon": "img/system/external_object", "label": "External object", - "userkeylabel": "AIPromptTool", + "userkeylabel": "AIRestAPI", "object": "ObjectExternal" }, "prm_perm": true, @@ -14915,7 +15059,7 @@ "list": [ { "object": "PermGroup", - "userkey": "PUBLIC AI_BUSINESS AIChatBot", + "userkey": "PUBLIC~AI_BUSINESS~ObjectExternal(AIChatBot)~", "item": { "pmg_group_id__grp_name": "PUBLIC", "pmg_perm_id__prm_group_id__grp_name": "AI_BUSINESS", @@ -14932,7 +15076,7 @@ }, { "object": "PermGroup", - "userkey": "AI_DESIGNER AI_BUSINESS AIBot", + "userkey": "AI_DESIGNER~AI_BUSINESS~ShortCut(AIBot)~", "item": { "pmg_group_id__grp_name": "AI_DESIGNER", "pmg_perm_id__prm_group_id__grp_name": "AI_BUSINESS", @@ -14949,7 +15093,7 @@ }, { "object": "PermGroup", - "userkey": "AI_DESIGNER ADMIN AIProcessResource", + "userkey": "AI_DESIGNER~ADMIN~ObjectExternal(AIProcessResource)~", "item": { "pmg_group_id__grp_name": "AI_DESIGNER", "pmg_perm_id__prm_group_id__grp_name": "ADMIN", @@ -14966,7 +15110,7 @@ }, { "object": "PermGroup", - "userkey": "AI_DESIGNER AI_BUSINESS AIChatBot", + "userkey": "AI_DESIGNER~AI_BUSINESS~ObjectExternal(AIChatBot)~", "item": { "pmg_group_id__grp_name": "AI_DESIGNER", "pmg_perm_id__prm_group_id__grp_name": "AI_BUSINESS", @@ -14983,7 +15127,7 @@ }, { "object": "PermGroup", - "userkey": "AI_DESIGNER AI_ADMIN AiMonitoring", + "userkey": "AI_DESIGNER~AI_ADMIN~ObjectExternal(AiMonitoring)~", "item": { "pmg_group_id__grp_name": "AI_DESIGNER", "pmg_perm_id__prm_group_id__grp_name": "AI_ADMIN", @@ -15000,7 +15144,7 @@ }, { "object": "PermGroup", - "userkey": "PUBLIC AI_DESIGNER AIRestAPI", + "userkey": "PUBLIC~AI_DESIGNER~ObjectExternal(AIRestAPI)~", "item": { "pmg_group_id__grp_name": "PUBLIC", "pmg_perm_id__prm_group_id__grp_name": "AI_DESIGNER", @@ -15017,7 +15161,7 @@ }, { "object": "PermGroup", - "userkey": "AI_DESIGNER AI_ADMIN AIChatVue", + "userkey": "AI_DESIGNER~AI_ADMIN~ViewSimple(AIChatVue)~", "item": { "pmg_group_id__grp_name": "AI_DESIGNER", "pmg_perm_id__prm_group_id__grp_name": "AI_ADMIN", diff --git a/README.md b/README.md index 26f65e9..bd32882 100644 --- a/README.md +++ b/README.md @@ -196,6 +196,7 @@ For detailed examples on how to generate modules, interact with business chatbot * `IsParam`: * `NoParam`: * `SelectModule`: Selection module +* `params`: * `Confirm`: * `GenData`: AI call for data gen diff --git a/files/Model/Model-AIGenData.png b/files/Model/Model-AIGenData.png index a4e29cd322fbdfd63dc2a537b58223477b9adf0f..e4a0ed8d435208da75dcfae94fd33f8fc87298ef 100644 GIT binary patch literal 38982 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 UlV!Z diff --git a/files/Model/Model-AIGenData.svg b/files/Model/Model-AIGenData.svg index c80831c..f0a0f74 100644 --- a/files/Model/Model-AIGenData.svg +++ b/files/Model/Model-AIGenData.svg @@ -1 +1 @@ -Retry(1)(0)BeginEndSelectModuleGenDataConfirmIsParamNoParamGoToSettings \ No newline at end of file +(1)(0)RetryBeginEndSelectModuleGenDataConfirmIsParamNoParamGoToSettingsparams \ No newline at end of file diff --git a/module-info.json b/module-info.json index 19a1a3b..4d04725 100644 --- a/module-info.json +++ b/module-info.json @@ -1,9 +1,9 @@ { - "date": "2025-04-29 09:40:54", + "date": "2025-06-18 14:23:58", "name": "AIBySimplicite", "format": "json", "files": ["AIBySimplicite.json"], "repository": {"origin": {"uri": "https://github.com/simplicitesoftware/module_ai.git"}}, - "version": "0.30", - "platform": "6.2.8" + "version": "0.31", + "platform": "6.2.10" } \ No newline at end of file diff --git a/package.json b/package.json index 8416971..6bfc7cb 100644 --- a/package.json +++ b/package.json @@ -15,5 +15,5 @@ "stylelint": "stylelint --config=.stylelint-configuration --no-color --allow-empty-input resources/**/*.css resources/**/*.less", "jshint": "jshint --config=.jshint-configuration --reporter=jslint resources" }, - "version": "0.30" + "version": "0.31" } \ No newline at end of file diff --git a/pom.xml b/pom.xml index 70e5983..d92886f 100644 --- a/pom.xml +++ b/pom.xml @@ -7,13 +7,13 @@ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 4.0.0 com.simplicite.modules - 0.30-SNAPSHOT + 0.31-SNAPSHOT AIBySimplicite AIBySimplicite Simplicite module: AIBySimplicite UTF-8 - https://cbirec.demo.simplicite.io + https://rec.cbi.simplicite.io 6.2-SNAPSHOT 17 17 @@ -21,7 +21,7 @@ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ true simplicite-modules-AIBySimplicite AIBySimplicite - 0.30 + 0.31 src,resources AIBySimplicite.xml,AIBySimplicite.json,AIBySimplicite-*.yml,configuration/**,**.min.js,**.min.css resources/**.js,src/**.java @@ -69,7 +69,7 @@ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ com.puppycrawl.tools checkstyle - 10.19.0 + 10.23.0 diff --git a/src/com/simplicite/commons/AIBySimplicite/AIData.java b/src/com/simplicite/commons/AIBySimplicite/AIData.java index d90e8b9..a4894ac 100644 --- a/src/com/simplicite/commons/AIBySimplicite/AIData.java +++ b/src/com/simplicite/commons/AIBySimplicite/AIData.java @@ -1,5 +1,6 @@ package com.simplicite.commons.AIBySimplicite; +import java.math.BigDecimal; import java.util.*; import org.json.JSONArray; @@ -104,6 +105,9 @@ public JSONObject toJSON() { typeTrad.put(ObjectField.TYPE_COLOR,"Color"); typeTrad.put( ObjectField.TYPE_GEOCOORDS,"Geographical coordinates"); } + public static JSONObject genDataForModule(String moduleName,Grant g){ + return genDataForModule(moduleName,Integer.parseInt(AITools.getAIParam("data_number","5")),g); + } /** * Generates data for a specific module. * @@ -111,11 +115,12 @@ public JSONObject toJSON() { * @param g the Grant object * @return the formatted result as a String */ - public static JSONObject genDataForModule(String moduleName,Grant g){ + public static JSONObject genDataForModule(String moduleName,int nbData,Grant g){ try { String[] ids = AITools.getObjectIdsModule(moduleName, g); if(Tool.isEmpty(ids))throw new PlatformException("Not found or not granted object to generate for module "+moduleName+" and user "+g.getLogin()); - JSONObject response = AIData.callIADataOnModule(ids,ModuleDB.getModuleId(moduleName), g); + JSONObject response = AIData.callIADataOnModule(ids,ModuleDB.getModuleId(moduleName),nbData, g); + if(response.has("error")) return response; response = AIData.jsonPreprocessing(response, g); return response; }catch (PlatformException e) { @@ -337,12 +342,16 @@ private static JSONObject getJsonModel(String[] ids, Grant g){ * @return the JSON object containing the data * @throws PlatformException if there is an error in the platform */ - private static JSONObject callIADataOnModule(String[] ids,String mldId, Grant g) throws PlatformException{ + private static JSONObject callIADataOnModule(String[] ids,String mldId,int nbData, Grant g) throws PlatformException{ JSONObject data = getJsonModel(ids, g); if(Boolean.TRUE.equals(AITools.AI_DEBUG_LOGS)) AppLog.info("module uml: "+data.toString(1), g); - String dataNumber = AITools.getAIParam("data_number","5"); - JSONObject jsonResponse = AITools.aiCaller(g, /* "module uml: "+json */"", " generates consistent data in json according to the model: ```json "+data.toString(1)+"``` with at least "+dataNumber+" entries per class",false,true); + String dataNumber = nbData > 0 ? String.valueOf(nbData) : AITools.getAIParam("data_number","5"); + JSONObject jsonResponse = AITools.aiCaller(g, /* "module uml: "+json */"", " generates consistent data in json according to the model: ```json "+data.toString(1)+"``` with at least "+dataNumber+" entries per class",true,true); devSaveGenerationDataCost(mldId,jsonResponse.optJSONObject(AITools.USAGE_KEY)); + + if(AITools.isTokenLimitReached(jsonResponse)){ + return new JSONObject().put("error","token_limit_reached"); + } String response = AITools.parseJsonResponse(jsonResponse); JSONObject json = AITools.getValidJson(response); if(Tool.isEmpty(json)){ @@ -619,8 +628,13 @@ private static String getValidNumericValue(Object val, int precision,int size, i if(value>max) value = randomFloat(max) ; return String.valueOf(value); }else{ + int value; + if(val instanceof BigDecimal){ + value = ((BigDecimal)val).intValue(); + }else{ + value = (int)val; + } int max = (int) Math.pow(10,(size-precision)) - 1; - int value = (int)val; if(value>max) value = random.nextInt(max); return String.valueOf(value); } @@ -977,7 +991,16 @@ private static float getMax(int size, int precision) { */ private static String formatResult(JSONObject json) { StringBuilder html = new StringBuilder(); - formatJson(json, html); + html.append("

"); + //formatJson(json, html); return html.toString(); } diff --git a/src/com/simplicite/commons/AIBySimplicite/AITools.java b/src/com/simplicite/commons/AIBySimplicite/AITools.java index c68be1c..986152a 100644 --- a/src/com/simplicite/commons/AIBySimplicite/AITools.java +++ b/src/com/simplicite/commons/AIBySimplicite/AITools.java @@ -1542,4 +1542,7 @@ public static String provider(){ AppLog.info(aiProvider); return aiProvider; } + public static boolean isTokenLimitReached(JSONObject json){ // mistral and gpt + return "length".equals(json.optJSONArray("choices").getJSONObject(0).optString("finish_reason")); + } } \ No newline at end of file diff --git a/src/com/simplicite/workflows/AIBySimplicite/AIGenData.java b/src/com/simplicite/workflows/AIBySimplicite/AIGenData.java index 412ca8c..cf29b4a 100644 --- a/src/com/simplicite/workflows/AIBySimplicite/AIGenData.java +++ b/src/com/simplicite/workflows/AIBySimplicite/AIGenData.java @@ -14,6 +14,7 @@ public class AIGenData extends Processus { private static final String AI_SETTING_NEED = "AI_SETTING_NEED"; private static final String ACTIVITY_SELECT_MODULE = "GGD_0100"; + private static final String ACTIVITY_PARAMS = "GGD_0125"; private static final String ACTIVITY_CONFIRM = "GGD_0150"; private static final String ACTIVITY_GEN_DATA = "GGD_0200"; private static final String ACTIVITY_IS_PARAM = "GGD_0050"; @@ -30,6 +31,16 @@ public Message preValidate(ActivityFile context) { context.setDataFile("Return","Code", AITools.isAIParam()?"1":"0"); if(Boolean.TRUE.equals(AITools.AI_DEBUG_LOGS))AppLog.info(context.getDataValue("Return","Code"), getGrant()); break; + case ACTIVITY_PARAMS: + String moduleName = getContext(getActivity(ACTIVITY_SELECT_MODULE)).getDataValue(DATA_FIELD, MODULE_NAME_FIELD); + int nbData = Integer.parseInt(context.getDataValue("Data", "nbData")); + if(!aiGenerateData(moduleName,nbData,context)){ + Message m = new Message(); + m.raiseError(Message.formatError("AI_TOKEN_LIMIT_REACHED",null, null)); + return m; + } + break; + case ACTIVITY_CONFIRM: Message check = AITools.checkJson(context.getDataValue("Data", DATA_JSON)); if(!Tool.isEmpty(check)) return check; @@ -45,10 +56,6 @@ public void postValidate(ActivityFile context) { String step = context.getActivity().getStep(); String moduleName; switch (step) { - case ACTIVITY_SELECT_MODULE: - moduleName = context.getDataValue(DATA_FIELD, MODULE_NAME_FIELD); - aiGenerateData(moduleName); - break; case ACTIVITY_CONFIRM: moduleName = getContext(getActivity(ACTIVITY_SELECT_MODULE)).getDataValue(DATA_FIELD, MODULE_NAME_FIELD); JSONObject json = new JSONObject( context.getDataValue("Data", DATA_JSON)); @@ -60,6 +67,21 @@ public void postValidate(ActivityFile context) { } super.postValidate(context); } + public String params(Processus p, ActivityFile context, ObjectContextWeb ctx, Grant g){ + if(context.getStatus() == ActivityFile.STATE_DONE) + return null; + + context.setDataFile("Data", "nbData",AITools.getAIParam("data_number","5")); + String nbDataLabel = new JSONObject(g.T("AI_DEFAULT_PARAM")).optJSONObject("data_number").optJSONObject("label").optString(g.getLang()); + return String.format(""" +
+
+ + +
+
+ """,nbDataLabel); + } public String noParam(Processus p, ActivityFile context, ObjectContextWeb ctx, Grant g){ String js = HTMLTool.JS_START_TAG+"$('.btn-validate').hide();$('.btn-AIStartParam').css('border-radius', '.25rem');"+HTMLTool.JS_END_TAG; return js+getGrant().T(AI_SETTING_NEED); @@ -115,19 +137,28 @@ public String callIA(Processus p, ActivityFile context, ObjectContextWeb ctx, Gr public String testFucntion(){ return "test1"; } - private void aiGenerateData(String moduleName){ - if(Tool.isEmpty(moduleName)) return; - JSONObject response = AIData.genDataForModule(moduleName,getGrant()); + private boolean aiGenerateData(String moduleName,int nbData,ActivityFile context){ + if(Tool.isEmpty(moduleName)) return false; + getContext(getActivity(ACTIVITY_CONFIRM)).removeDataFile("Data", ERROR); + JSONObject response = AIData.genDataForModule(moduleName,nbData,getGrant()); if(response.has(ERROR)){ + if("token_limit_reached".equals(response.getString(ERROR))){ + getContext(getActivity(ACTIVITY_CONFIRM)).setDataFile("Data", ERROR,getGrant().T("AI_TOKEN_LIMIT_REACHED")); + return false; + } getContext(getActivity(ACTIVITY_CONFIRM)).setDataFile("Data", ERROR, response.getString(ERROR)); + return true; }else{ + getContext(getActivity(ACTIVITY_CONFIRM)).setDataFile("Data", DATA_JSON, response.toString(1)); + return true; } } public void relaunchingGeneration(ActivityFile context){ AppLog.info("Relaunching generation", getGrant()); String moduleName = getContext(getActivity(ACTIVITY_SELECT_MODULE)).getDataValue(DATA_FIELD, MODULE_NAME_FIELD); - aiGenerateData(moduleName); + int nbData = Integer.parseInt(getContext(getActivity(ACTIVITY_PARAMS)).getDataValue("Data", "nbData")); + aiGenerateData(moduleName,nbData,context); } diff --git a/src/com/simplicite/workflows/AIBySimplicite/AiSettingsProcess.java b/src/com/simplicite/workflows/AIBySimplicite/AiSettingsProcess.java index 011abdf..adf26cd 100644 --- a/src/com/simplicite/workflows/AIBySimplicite/AiSettingsProcess.java +++ b/src/com/simplicite/workflows/AIBySimplicite/AiSettingsProcess.java @@ -90,6 +90,7 @@ private Message checkRequiredFields(ActivityFile context){ } return m; } + private Message formatURLError(boolean urlEmpty,boolean completionEmpty,Grant g){ Message m = new Message(); ObjectDB obj = g.getTmpObject(PROVIDER_OBJECT);