From f97dc004901b114ba6f1ae3c96f528de2f1385ac Mon Sep 17 00:00:00 2001 From: "Emily.von.Bergen" Date: Mon, 27 Jan 2025 21:59:07 +0100 Subject: [PATCH 01/31] SAS-994 uploading first draft --- .../genai/using_genai/function_calling.md | 148 ++++++++++++++++++ .../genai/using_genai/start_from_blank_app.md | 4 +- 2 files changed, 150 insertions(+), 2 deletions(-) create mode 100644 content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/function_calling.md diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/function_calling.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/function_calling.md new file mode 100644 index 00000000000..fb31ecf1629 --- /dev/null +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/function_calling.md @@ -0,0 +1,148 @@ +--- +title: "How to use Function Calling in your Mendix app" +url: /appstore/modules/genai/genai-howto-functioncalling/ +linktitle: "How to use Function Calling in your Mendix app" +weight: 10 +description: "A tutorial explaining how to implement function calling in your existing application." +--- + +## Introduction +This document guides you on how to use function calling in your smart app. For this, you can already use your existing app, or follow the steps from the [Build a Smart App from a Blank GenAI App](/appstore/modules/genai/using-genai/blank-app/) documentation, as demonstrated in this guide. + +### Pre-requisites + +Before diving into this guide, ensure you meet the following requirements: + +- **An existing app**: In case you do not have anything existing yet, feel free to check the [Build a Chatbot from Scratch Using the Blank GenAI App](/appstore/modules/genai/using-genai/blank-app/) documentation, as outlined in this tutorial. + +- **Installation** of the [GenAI For Mendix](https://marketplace.mendix.com/link/component/227931) bundle. + +- **Intermediate knowledge of the Mendix platform**: Familiarity with Mendix Studio Pro, microflows, and modules. + +- **Basic understanding of GenAI concepts**: Review the [Enrich Your Mendix App with GenAI Capabilities](/appstore/modules/genai/) page for foundational knowledge and familiarized yourself with the [concepts](/appstore/modules/genai/using-gen-ai/). + +- **Understanding Function Calling and Prompt Engineering**: Learn about [Function Calling](/appstore/modules/genai/function-calling/) and [prompt engineering](/appstore/modules/genai/using-gen-ai/#prompt-engineering) for use within the Mendix ecosystem. + + +### Learning Goals + +By following this tutorial, you will: + +- Understand how to implement function calling within your Mendix application. + +- Integrate GenAI capabilities to address specific business use cases. + +## Function Calling + +As mentioned above, to simplify your first use case, we start building from an already setup [Blank GenAI App Template](https://marketplace.mendix.com/link/component/227934) as described in the [Build a Chatbot from Scratch Using the Blank GenAI App](/appstore/modules/genai/using-genai/blank-app/) tutorial. For illustration, the two functions/tools will have the following purposes: (1) gathering the display name of the user when an email is asked in a chatbot, so that the information will automatically be filled for the end user, and (2) using an API, the bank holidays from the Netherlands are extracted. + +### Choosing the Infrastructure + +Selecting the infrastructure for integrating GenAI into your Mendix application is the first step. Depending on your use case and preferences, you can choose from the following options: + +* [Mendix Cloud GenAI Resources Packs](/appstore/modules/genai/MxGenAI/): Part of the [GenAI For Mendix](https://marketplace.mendix.com/link/component/227931), integrates LLMs by dragging and dropping common operations from its toolbox in Studio Pro. + +* [OpenAI](/appstore/modules/genai/openai/): The [OpenAI Connector](https://marketplace.mendix.com/link/component/220472) supports both OpenAI’s platform and Azure’s OpenAI service. + +{{% alert color="info" %}} +To start, you can sign up for a free trial with OpenAI and receive credits valid for three months from the account creation date. For more details, see [OpenAI API reference](https://platform.openai.com/docs/api-reference/authentication). +{{% /alert %}} + +* [Amazon Bedrock](/appstore/modules/genai/bedrock/): The [Bedrock Connector](https://marketplace.mendix.com/link/component/215042) allows you to leverage Amazon Bedrock’s fully managed service to integrate foundation models from Amazon and leading AI providers. + +* Your Own Connector: Optionally, if you prefer a custom connector, you can integrate your chosen infrastructure. However, this document focuses on the OpenAI and Bedrock connectors, as they offer comprehensive support and ease of use to get started. + +### Customizing microflows + +To make the functions work, we need to create and adjust certain microflows as displayed below. These microflows will handle the logic required for gathering the display name of the user and extracting the bank holidays from the Netherlands using an API. + +1. Locate the pre-built microflow `ChatContext_ChatWithHistory_ActionMicroflow` in **ConversationalUI > USE_ME > Conversational UI > Action microflow examples**. Right-click on the microflow and select **Include in project** to copy it into your `MyFirstBot` module. + +2. Locate the `ChatContext` action in the `ACT_FullScreenChat_Open` microflow. Inside this action, change the `Action microflow` to `ChatContext_ChatWithHistory_ActionMicroflow` from your `MyFirstBot` module. + +In order to call a function, we need to create a microflow per function to extract the neccesary information. + +#### Function: Extracting display name + +[PICTURE] + + For this example, we will call the new microflow `GetCurrentUserName_Function`. + +1. Start with the `Retrieve Objects` action, where you can use the following modifications as an example: + * Source: `From database` + * Entity: `Administration.Account` + * XPath constraint: `[id = $currentUser]` + * Range: `First` + * Object name: `Account` + +2. We include a decision where: + * Caption can be something like `Found?` + * Decision Type: `Expression` + * Expression: `$Account != empty` + + 2.1. If the **decision** is `false`, an **End event** is added with the **Microflow return value** can be set to something like `Mendix Administrator Chat User` with a **Return variable name** as `UserName`. + + 2.2. If the **decision** is `true`, an **End event** is added with the **Microflow return value** is `$Account/FullName` with a **Return variable name** as `UserName`. + +#### Function: Extracting display name + +[PICTURE] + + For this example, we will call the new microflow `GetBankHolidays_Function`. + + 1. Start with the `Call REST Service` action, where you can use the following modifications as an example: + * Location: `https://openholidaysapi.org/PublicHolidays?countryIsoCode=NL&validFrom=2025-01-01&validTo=2025-12-31&languageIsoCode=EN` + * HTTP metrod: `GET` + * use timeout on request: `Yes` + * Timeout (s): You can choose the value, here we set it to `300` + * The rest can be set to default. + +2. The next step is an **End event** with the **Microflow return value** of `$HolidaysJSON` with a **Return variable name** as `Variable`. + +### Calling the functions + +Now that this part is settled, the following steps will focus exclusively on the `ChatContext_ChatWithHistory_ActionMicroflow` from your `MyFirstBot` module. + +[PICTURE OF MICROFLOW] + +As seen in the picture, there are two relevant steps that have to be done in order for the two functions to be called. + +#### Addition of Tools action + +1. After the `true` `Request found` decision, the `Tools: Add Function to Request` is added for the first function with the following settings: + + * Resquest: `$Request` + * Tool name: `get-current-user-name` + * Tool description: `This function has no input, and returns a string containing the name of the user that is using the chat. It can be used to generate texts on behalf of the user, for example the signature of an email, e.g. "Best regards, a developer from Mendix"` + * Function microflow: here we call the `GetCurrentUserName_Function` microflow previously done. + * Use return value: No + +2. Following this action, we continue with the second function by adding the `Tools: Add Function to Request` action with the following settings: + + * Resquest: `$Request` + * Tool name: `get-bank-holidays-2025` + * Tool description: `This function has no input, and returns a JSON containing the bank holidays of The Netherlands of the year 2025.` + * Function microflow: here we call the `GetBankHolidays_Function` microflow previously done. + * Use return value: No + +### Changing the system prompt + +It is important to remeber that a function will only be called correctly if the LLM knows when and which function to call when. Therefore, we follow a similar approached as described in the [Build a Chatbot from Scratch Using the Blank GenAI App](/appstore/modules/genai/using-genai/blank-app/#changing-system-prompt). + +1. Open the copied `ACT_FullScreenChat_Open` microflow from your `MyFirstBot` module. +2. Locate the **ChatContext** action. +3. Inside this action, find the `System prompt` parameter, which has default an emprty value. +4. Update the `System prompt` value to reflect your desired behavior. For example, *`You are an assistant that supports users in a company with several requests. +If the user talks asks to write an email, first ask if it is for internal of external person. If it is internally, ask the request, if it is for external, and be more polite. In both cases, call the function get-current-user-name as the signature. +Always keep your answers short.`* +5. Save the changes. + +## Testing and Troubleshooting + +Assuming that you followed the steps from the [Build a Chatbot from Scratch Using the Blank GenAI App](/appstore/modules/genai/using-genai/blank-app/), especially the [Infrastructure Configuration](/appstore/modules/genai/using-genai/blank-app/#config) to be able to run your application, you should be able to have a running application by now, so make sure that before testing your app, complete the Mendix Cloud GenAI, OpenAI or Bedrock configuration. + +To test the Chatbot, navigate to the **Home** icon to open the chatbot interface. Start interacting with your chatbot by typing in the chat box. + +Congratulations! Your chatbot is now ready to use. + +If an error occurs, check the **Mendix Console** in Studio Pro for details to help resolve the issue. \ No newline at end of file diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/start_from_blank_app.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/start_from_blank_app.md index 389b5256c4b..54f80791092 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/start_from_blank_app.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/start_from_blank_app.md @@ -81,7 +81,7 @@ Since the **ConversationalUI_FullScreenChat** page contains a **Data View** usin To tailor your application's behavior, you can customize the [System Prompt](/appstore/modules/genai/prompt-engineering/#system-prompt) to make it more specific to your use case: -##### Changing the System Prompt +##### Changing the System Prompt {changing-system-prompt} {{< figure src="/attachments/appstore/platform-supported-content/modules/genai/genai-howto-blankapp/blank_genai_mf.jpg" >}} @@ -101,7 +101,7 @@ Click **Home** and select the `ACT_FullScreenChat_Open` microflow from your `MyF You may encounter an error about allowed roles. To resolve this, go to the page **Properties** and update the **Navigation > Visible for** setting to include the appropriate user roles. {{% /alert %}} -### Infrastructure Configuration +### Infrastructure Configuration {config} #### Mendix Cloud GenAI Configuration From 80a4e54d24baac2d8670e130b109b7f8910d1fbe Mon Sep 17 00:00:00 2001 From: "Emily.von.Bergen" Date: Wed, 29 Jan 2025 11:04:36 +0100 Subject: [PATCH 02/31] SAS-994 Function calling documentation --- .../genai/using_genai/function_calling.md | 42 +++++++++--------- .../genai/using_genai/start_from_blank_app.md | 2 +- .../CallingFunctions_Microflow.jpg | Bin 0 -> 162999 bytes .../GetBankHolidays_Function.jpg | Bin 0 -> 92812 bytes .../GetCurrentUserName_Function.jpg | Bin 0 -> 86360 bytes 5 files changed, 22 insertions(+), 22 deletions(-) create mode 100644 static/attachments/appstore/platform-supported-content/modules/genai/genai-howto-functioncalling/CallingFunctions_Microflow.jpg create mode 100644 static/attachments/appstore/platform-supported-content/modules/genai/genai-howto-functioncalling/GetBankHolidays_Function.jpg create mode 100644 static/attachments/appstore/platform-supported-content/modules/genai/genai-howto-functioncalling/GetCurrentUserName_Function.jpg diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/function_calling.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/function_calling.md index fb31ecf1629..1503d8a3401 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/function_calling.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/function_calling.md @@ -1,9 +1,9 @@ --- -title: "How to use Function Calling in your Mendix app" +title: "Integrate Function Calling in your Mendix app" url: /appstore/modules/genai/genai-howto-functioncalling/ -linktitle: "How to use Function Calling in your Mendix app" +linktitle: "How to integrate Function Calling in your Mendix app" weight: 10 -description: "A tutorial explaining how to implement function calling in your existing application." +description: "A tutorial guiding you through integrating and implementing function calling in your Mendix application for enhanced functionality." --- ## Introduction @@ -21,7 +21,7 @@ Before diving into this guide, ensure you meet the following requirements: - **Basic understanding of GenAI concepts**: Review the [Enrich Your Mendix App with GenAI Capabilities](/appstore/modules/genai/) page for foundational knowledge and familiarized yourself with the [concepts](/appstore/modules/genai/using-gen-ai/). -- **Understanding Function Calling and Prompt Engineering**: Learn about [Function Calling](/appstore/modules/genai/function-calling/) and [prompt engineering](/appstore/modules/genai/using-gen-ai/#prompt-engineering) for use within the Mendix ecosystem. +- **Understanding Function Calling and Prompt Engineering**: Learn about [Function Calling](/appstore/modules/genai/function-calling/) and [Prompt Engineering](/appstore/modules/genai/using-gen-ai/#prompt-engineering) for use within the Mendix ecosystem. ### Learning Goals @@ -34,7 +34,9 @@ By following this tutorial, you will: ## Function Calling -As mentioned above, to simplify your first use case, we start building from an already setup [Blank GenAI App Template](https://marketplace.mendix.com/link/component/227934) as described in the [Build a Chatbot from Scratch Using the Blank GenAI App](/appstore/modules/genai/using-genai/blank-app/) tutorial. For illustration, the two functions/tools will have the following purposes: (1) gathering the display name of the user when an email is asked in a chatbot, so that the information will automatically be filled for the end user, and (2) using an API, the bank holidays from the Netherlands are extracted. +{{< figure src="/attachments/appstore/platform-supported-content/modules/genai/genai-howto-functioncalling/structure_functioncalling.png" >}} + +As mentioned above, to simplify your first use case, we start building from an already setup [Blank GenAI App Template](https://marketplace.mendix.com/link/component/227934) as described in the [Build a Chatbot from Scratch Using the Blank GenAI App](/appstore/modules/genai/using-genai/blank-app/) tutorial. For illustration, the two functions/tools will have the following purposes: (1) gathering the display name of the user when an email is requested in a chatbot, so that the information will automatically be filled for the end user, and (2) extracting the bank holidays from the Netherlands using an API. ### Choosing the Infrastructure @@ -54,7 +56,7 @@ To start, you can sign up for a free trial with OpenAI and receive credits valid ### Customizing microflows -To make the functions work, we need to create and adjust certain microflows as displayed below. These microflows will handle the logic required for gathering the display name of the user and extracting the bank holidays from the Netherlands using an API. +To make the functions work, we need to create and adjust certain microflows as shown below. These microflows will handle the logic required for gathering the display name of the user and extracting the bank holidays from the Netherlands using an API. 1. Locate the pre-built microflow `ChatContext_ChatWithHistory_ActionMicroflow` in **ConversationalUI > USE_ME > Conversational UI > Action microflow examples**. Right-click on the microflow and select **Include in project** to copy it into your `MyFirstBot` module. @@ -64,9 +66,9 @@ In order to call a function, we need to create a microflow per function to extra #### Function: Extracting display name -[PICTURE] +{{< figure src="/attachments/appstore/platform-supported-content/modules/genai/genai-howto-functioncalling/GetCurrentUserName_Function.jpg" >}} - For this example, we will call the new microflow `GetCurrentUserName_Function`. +For this example, we will call the new microflow `GetCurrentUserName_Function`. 1. Start with the `Retrieve Objects` action, where you can use the following modifications as an example: * Source: `From database` @@ -76,7 +78,7 @@ In order to call a function, we need to create a microflow per function to extra * Object name: `Account` 2. We include a decision where: - * Caption can be something like `Found?` + * Caption: e.g. `Found?` * Decision Type: `Expression` * Expression: `$Account != empty` @@ -86,13 +88,13 @@ In order to call a function, we need to create a microflow per function to extra #### Function: Extracting display name -[PICTURE] +{{< figure src="/attachments/appstore/platform-supported-content/modules/genai/genai-howto-functioncalling/GetBankHolidays_Function.jpg" >}} For this example, we will call the new microflow `GetBankHolidays_Function`. 1. Start with the `Call REST Service` action, where you can use the following modifications as an example: * Location: `https://openholidaysapi.org/PublicHolidays?countryIsoCode=NL&validFrom=2025-01-01&validTo=2025-12-31&languageIsoCode=EN` - * HTTP metrod: `GET` + * HTTP method: `GET` * use timeout on request: `Yes` * Timeout (s): You can choose the value, here we set it to `300` * The rest can be set to default. @@ -103,17 +105,17 @@ In order to call a function, we need to create a microflow per function to extra Now that this part is settled, the following steps will focus exclusively on the `ChatContext_ChatWithHistory_ActionMicroflow` from your `MyFirstBot` module. -[PICTURE OF MICROFLOW] +{{< figure src="/attachments/appstore/platform-supported-content/modules/genai/genai-howto-functioncalling/CallingFunctions_Microflow.jpg" >}} As seen in the picture, there are two relevant steps that have to be done in order for the two functions to be called. #### Addition of Tools action -1. After the `true` `Request found` decision, the `Tools: Add Function to Request` is added for the first function with the following settings: +1. After the `true` `Request found` decision, add the `Tools: Add Function to Request` action for the first function with the following settings: * Resquest: `$Request` * Tool name: `get-current-user-name` - * Tool description: `This function has no input, and returns a string containing the name of the user that is using the chat. It can be used to generate texts on behalf of the user, for example the signature of an email, e.g. "Best regards, a developer from Mendix"` + * Tool description: `This function has no input, and returns a string containing the name of the user that is using the chat. It can be used to generate texts on behalf of the user, for example the signature of an email, e.g. "Best regards, [user's name]"` * Function microflow: here we call the `GetCurrentUserName_Function` microflow previously done. * Use return value: No @@ -121,25 +123,23 @@ As seen in the picture, there are two relevant steps that have to be done in ord * Resquest: `$Request` * Tool name: `get-bank-holidays-2025` - * Tool description: `This function has no input, and returns a JSON containing the bank holidays of The Netherlands of the year 2025.` + * Tool description: `This function has no input, and returns a JSON containing the bank holidays in The Netherlands for the year 2025.` * Function microflow: here we call the `GetBankHolidays_Function` microflow previously done. * Use return value: No ### Changing the system prompt -It is important to remeber that a function will only be called correctly if the LLM knows when and which function to call when. Therefore, we follow a similar approached as described in the [Build a Chatbot from Scratch Using the Blank GenAI App](/appstore/modules/genai/using-genai/blank-app/#changing-system-prompt). +It is important to remember that a function will only be called correctly if the LLM knows when and which function to call. Therefore, we follow a similar approached as described in the [Build a Chatbot from Scratch Using the Blank GenAI App](/appstore/modules/genai/using-genai/blank-app/#changing-system-prompt). 1. Open the copied `ACT_FullScreenChat_Open` microflow from your `MyFirstBot` module. 2. Locate the **ChatContext** action. -3. Inside this action, find the `System prompt` parameter, which has default an emprty value. -4. Update the `System prompt` value to reflect your desired behavior. For example, *`You are an assistant that supports users in a company with several requests. -If the user talks asks to write an email, first ask if it is for internal of external person. If it is internally, ask the request, if it is for external, and be more polite. In both cases, call the function get-current-user-name as the signature. -Always keep your answers short.`* +3. Inside this action, find the `System prompt` parameter, which has default an empty value. +4. Update the `System prompt` value to reflect your desired behavior. For example, *`You are an assistant that supports users in a company with various requests. When a user asks you to write an email, ensure all necessary information is provided. If any information is missing, ask the user for more details. Use the function get-current-user-name to retrieve the user's display name for the email signature. If the user asks for bank holidays in the Netherlands for the year 2025, use the function get-bank-holidays-2025 to retrieve this information. For any other requests, respond appropriately based on the context and provide helpful information. Always keep your answers short.`* 5. Save the changes. ## Testing and Troubleshooting -Assuming that you followed the steps from the [Build a Chatbot from Scratch Using the Blank GenAI App](/appstore/modules/genai/using-genai/blank-app/), especially the [Infrastructure Configuration](/appstore/modules/genai/using-genai/blank-app/#config) to be able to run your application, you should be able to have a running application by now, so make sure that before testing your app, complete the Mendix Cloud GenAI, OpenAI or Bedrock configuration. +Before proceeding with testing, ensure that you have completed the Mendix Cloud GenAI, OpenAI, or Bedrock configuration as outlined in the [Build a Chatbot from Scratch Using the Blank GenAI App](/appstore/modules/genai/using-genai/blank-app/) tutorial, particularly the [Infrastructure Configuration](/appstore/modules/genai/using-genai/blank-app/#config) section. To test the Chatbot, navigate to the **Home** icon to open the chatbot interface. Start interacting with your chatbot by typing in the chat box. diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/start_from_blank_app.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/start_from_blank_app.md index 54f80791092..cf9825e5220 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/start_from_blank_app.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/start_from_blank_app.md @@ -101,7 +101,7 @@ Click **Home** and select the `ACT_FullScreenChat_Open` microflow from your `MyF You may encounter an error about allowed roles. To resolve this, go to the page **Properties** and update the **Navigation > Visible for** setting to include the appropriate user roles. {{% /alert %}} -### Infrastructure Configuration {config} +### Infrastructure Configuration {#config} #### Mendix Cloud GenAI Configuration diff --git a/static/attachments/appstore/platform-supported-content/modules/genai/genai-howto-functioncalling/CallingFunctions_Microflow.jpg b/static/attachments/appstore/platform-supported-content/modules/genai/genai-howto-functioncalling/CallingFunctions_Microflow.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f762c4621889e99882fd8a0e68a59cc62ea9256c GIT binary patch literal 162999 zcmeFa2UJtv_a_FSZf=ZVrN|727=_0*1l}-#uZ-FRCZvp}WLKLJosgW9_3W#)& z8j?tF2{k|nlkdEFGxPrQ-g<9lt^b<0et&Q7Su0t|z3c9CK6{_D_x_xni{BSZfNMG$ z+8TgMmo5RYq!-{~4xk1gyL|bdlXQ@iP6{dt3UYD^8cND5RCF|SbhI?IwDeb*uF+p* zyh=-ZjqMsEGYcy#D;)#-bvBmkOf0M{|J>vf8R;5w3Tg@pY8HB0dY1p`1qFY;Qw-5x=eb;E0k2!G_<52G+YB*zC=cLnVjsO zrzZV6l=MA-oRNa*mXzuhX2a){x4l^Iy-E2@#rLS@JFC$smjC_>?{I1wHumcroC1PE z!XkI1Wn|?Z$SbHlR@czf($+CHF*P%{u(Wb;baHlab#wRe_45x13<{2T8yOWH6C0PB z_C7r$^Fvm4e!-W*qT-U$vf8@(hDP|ersmGB?w;PhAN>Pk;}erp)4ykCQE1Gc<(1X7 z^$pzK{=wnVG5+NAAGt08$o>zp{;OpFMlME@T$jno$;c`Hk?Yds08%4kB&WC~b%jaQ zkn*_~^X+?Ys8}AQe6IOU&3E4j%lg85l!lF88YO`HN3{Pe+5b1e!vB{f`>%riH@Rj3 zbYz!EgGa^)00PdH^W%g8f7{FJa2$EYyA+p!eCzAYb|7nUf>ndkv1em|UvsNU^YhXE+^7l#=9@xu3 zSD-Vgt^Iy0$x`70(2N|JF39wf@r$*vnUabIb_pXh&U24K6Qnp^D(93(g6DjX4@Y)N z^5f30ohQa#)e>0th4#~8;*ec|o$ZojOX#8gc{V~CU43%>8E{9En8v(* z4{;oP0XW)S`BfVyT&*-O%G=GutM@{D{cW@19^CmzrbgWdefI!ovT&ztJ=?hSj*(IP z!~hnWz{8=DUY43BGQ(Z#cLDH2e6HH~CV4F|R3-*q#I&wCu#oe6oWP5rj4~{A|MF$P zUsEg>y5PA68t=c~{DCHA&_~2hQcLfUxYc^5QY96ZFnbS@U)~?t3RWMDoWIJ0{ z^r$=)uAcd7;aQ3*MV-tynN}UU^qG}zm+2H%hQ$cy$8Af|2R++Rn!bN^$s{lLhuPWWyzRBQ|V)lQh-7m_fewK@|SxtO7 z&cKE5Aj5vNTRcZ?*C+_oZu|~Z>twS1DFe1(_gBP3JtZb|ozUzG=OfGpYAaL>qfLZG z+vY<0kD*i1gD+}KrTpYq_iUL+quQ31KvHzT-}bi;{?#!c3cCQjrF?V&fbkL%g)RWB zwiK*Au^lL{jME|EUvoa{iuNJ4T*lRAiRbS>dd~b_y#SytjUZM@+RLYX0q8Nj08m|x zya1>GPdN37cbaKLotLYtxnwZi!?uw2k_^8vg4I{Pl+ZV&E?Z{zWlh zCx^S=qauj&?A`{VGT+K*U^k&I7XZ*^Gr>@-Zgw_{&Z`UX%0!n>l<@QFq|rmcw$%0z zTyc!J3N>+T5Pbn)MEq{Og&yL(ajPNr(wS6>7l6ofIYovm1nO^Cx!4LnkbVsD!DKbYI01!I`6edh$-Zg);dx{B#^dnW0DsDomi&jdT2M|Ad4rr9Abpci(U#O zID}MNcA>Hyv|mg_>?WB)o9aAtnLknhQUiOO0_8A$Z(1SE@FT&-X=XQr(6YU$5Yc$h z2XrrFSkPih!zRG=CRQQ)qy+`*E+39Y)=745a&buKD(KmF2V|RAO*OISxD?)5uw}eu z+n;es_LEqFP?{}!*I9WM@TItn1R;nw*|Pv!`A3dDBjc{M^<0V<85K)UZnuk{YS^ieY>pGn` zrMgP`7;zZN)p{R<-POjzVjDobH2AJAwwiUTqU3U$!upz4VdkF?|9B?87rkPWaCaru z(0v^=NO@dozg!K|O)}T3`Z#9qGYUC8OV+|J=CXGJ$$qup!X>U$7OgKYD-6f1Cg`y! zJ$L#*!4Luaknr)%(2GFLqxX1EOl9z}#+Z^;b*bIwkO!V(JK_|xN$t9NoMH&<)OtSlBpG0*g#m zqDBp|cX3YTRO0Ilr=`~qs1D{n>%z`VkWO;S$shL z(ffHh^&$6^Y~h(!ARm#{tQu3vXK8Evq~@MAac2sZ>+$;JMaIoMN5_vY-U(!BZ-#tM z*)l<1XU>7OL@mahZOE_cfW7v#-EtWeYQ@)X&!y9ZHT88NPHVl2Rbec zl{w}PuIZbq$;5ta-h&_OAT#aG=~0!YJej(?+ChmhK6;=M?V>Rpn ze;$T=vz%!3@)_(M9FUj3zZxU+1;4@Zs#LPZ>Sldv)OOfE?n&!l zY&VUf(ja$`8S6t?L%H4a$a2iiKUcPzy0KM*O5GG*a(d)4&kr%qv(nMz24=UcK`~%`;Y1J%uHOmahqZ>ulMxb?m_eUZU12v1V zLzw~t3*?-8M#_Taym|mwctDRVT9fB<^p)b0kTs(@gZwxVx_@;?>#uzO@q!6==+*Qa zCM$~S+8d+x#+*dN+q$1){FK#1mXa&=)d4>`{7Q+j~h*_bGqF zN6%t^-|vky0h>LeCJTQk2p7)Z3i(jElzbHtJKdf5$qkGa&=>dfap9fqbl`eC7l0v8 za49syX?EFD;nA+nINnHK`)hhsb1d0Kx%7iK4~#av@aCH85*;RWV`9GBGSZv6q9L{_ z(tD|6*VAvC5Z4~wrEC=C>H^Y3ZY{O+?+}zxw#<)OK7uns?>~)N)V|^qME}&}6~a20f#|j796^$j5scU(z)o9(QP^03YdKR=UcRPsR^*&vmAs z);CW0(ZgQ0Mp0;2`AbafbJMktcJx2srfE~Z^`V*a4M85Iy}LT91T0+JcV}3!(=MLT zB(s47r6XB9f%m+vYpQk?czZkb!D_1hVbaDGj+`c?yhAI`%Yp8gE^1U0M6pm8 zHDM6{MfttPs0sJ$TXSClLA|2hajGk(V+Sqb3{T>o8XIY z7lydPv0)`cl2OvOQZk@6pci%MtG)DCC$e3QH@e_8ZH}RUXV^hzd7r@ysi%6grxJs@ zjawPz=H>F6Q%84KbhhhL_dSqUqV16~vl{LK5T&FScoYnbIY_kHW~ozk2xS=)zM*aU z!pp1`h)%rUV`$f3IDcL$R<&I7@#JNWU;=7nS{QwnMTc}0x@Ie=2QaT1m2LYqS1sQJ42D*G7!{=FhGH)2oYYXgIc2lPtoWy_f%br%QAb&x&^ zDsc5Z>4Wr&t?jDW*#V-<7cZ^DsoN*tu zAMWb0HTF2CaJ@PG51d)Mf*M-aTJGcp<_=Nu`@wrJomc+B(rO7_4m+$h)hbYoZ|R<5 z3%iZeKwNfbH$Qz#E0yTTl`0$&v7BE((TOPxmZ|-)6jYc1Yi=_7 z(y~g(WU*V9I(s;hDz^N;0zWP!KE)!w>_J^D7#} z0Lg&S($?!^6YgfG6#?P1=HQyxQB(iR&{$o7R@HTFNYTIi;zyH9jtOMFIF#kJm~+mui=ZM zr&QLfxE4)5FM-#z6H~?z`)R-7EBFCXds-D3hMw%$JlLc;oFdllUcZvh+pfeJ15DaJa_-EV3T6A`G*ZK|zl!(7}PAl`)?dCke;Fh)ELsm45iYUCP z0R0}~c@00Vmx|P{AODnb{ASmpcPUKzoFy|Y*MEpzy2;txq;V(L>OIEg$LyHlWTm}C`+noPZTU?3 zhw-1nCWSOr>)JwfqbjGat&4dsrG|E3KV0pwDy%nS@m7t39x~e0gD=u~U+=sQN0$OA z9|Z0UEN#D}`#8;r1EG1lX{p<}l#8Pfbufd8%GnT$hEGM7S&qOL?@k<+JB;kF|LDDX z55$m$E}t-&HEbWMPdg5(pSBfmoHqZu>CEEVX*4-|%D-Cx2g}U0Z>;k^G&J#5EZ#7L~@UWKXftDnwyAtv!QGkx7CSu zip)vX(Jsmkkv?^+E^G|`V3uFrmD2KZ+`6bi|MVc3Clr+&Z_XnzwJj#D#DK0;5gN3y z+myXLz~wiqZ~n5y@zPt$DxWu|?N`>0vq|>sQizjs{CptHpee!T@o1KV3zs7Y*`0@| zW^VIBL+goN<0GF!4VajdN9ESs=7s~e(n*0rT1)&^rY`SYw`SgWY0oz*>) ziZaa(g8XPo3vyO{6M0pQTfX|sh<+{R2`@=sI6{8!(Ms8%_KeRibH#r8>) zBFO0JJ;UY}y93krY3qK?lVNPg4G+m|=DMePu8nCe`pxZg$_6k^i^n z94Bu&7F#D_d@ZXY(UwwtqFMa0-K;&{7} zY>Rlf{@83kf&F$>EC}jW(-4$0r5#Vn)tb*D<_Kl8V6=v@dB{jI;XP5S@nTBK<-f8$ z8o;HC>$|ijqb9lnn{x!F<>V>VsI-!XLmFeBB+E;VC?Otoz(l8-`mj$u)lEiA)t}M&X zG-SR2bQwaVF94sTJPE9eP+S=hRnpE09qE!I((D59lflX?2lV<6Nco|ByxRppjSh(y zZM^_sOrZbfx`SZh5t+NK^f=uvAd|`*iTA#fKYamsF|)eckWJrm488zZ#DCoK$m*5f zwlza-nv@hi&kSI&l4GzcR2RJz@anMO)nS>5;WLRHo_Y_S2Aw!DiiNJJ#IC7QL-p4! z--1WK1y9}){>uJ;Uc+{I2eqm3&yDgsZ0D6-=at>lSuAK#y>Hfgv5x8}<7r?edi;CBk5tf^M57Q|K)J_>ci z&aSLo00vgdM3lSxq5oIyF9HlDcPE5#rGt?vDgI_t{$5fM(j zAE<`rDV50mfHajv60a! zgp;gX*n10FQt0vKzsvr|J^cva-d%{%1)!!DdM?;lZC%Zezfan2MA;*G#zoqpGzN12 zw$&Z%$71-f^Z!Sb7}|P6^@k*$&foUGs}F+YBB6g!D*PmZtehs%TxL_|&m!vuAnh$a z?E>&@f%n8_vacj-{k@?&*}n^N|7UlFXCTj?pPHD8BTl;xzI4>6vzWa8_sBe&r$RU` z04WjZ%=1K2N36><1TO>$eTSV~R}q2!o&gfmtWEoz`NqqC5pNQFNZGTl^A|VhtlSp` zandzGo1gIB{nZlPmSjI)QCW=hdv7&uXCLTbcW0~~H0Vk8*$FlooE}x8D^(?n9I{xS zz3-uu-(cl4jNJZ~ccAX0vygrPU_sb#`fBfeIco`{Cr0~Wk?2Zzx0?(X6tCH;j!Jyg z@j1J%+bXExUBM2`n%X^u)P#E#UP)d({)fGU7x)+$jS2@oqQ}!ilJ_YbN#6v{x3mn` zczZ-KqY=6}KrnT|!8*do+HsS8-LyB%E&xv&LXD0)xAVK$@^H63Q>lu0+bK+BZ+!go z=AFoT`OK}EwT#N`bEtjRfeh=Coisl8pN%AV3`!D*8j_mKDVec! zU-Yv11oya?*8->thHAS22_M_sY~)=T-sOs;!3*<3-Wn+?m|4*Z6V8L1F=oM>pVzp7FiRATcZYqsQF zt3lO5mG+a=C1C)khs2T9=J7hTdFpKPjjk>N4+ftsK(Y>RuuckO{s7g3UL5m3#C>M;{Co& z8VZvUzfgDHcz<3d-x=|Vxu-{Fjq46~&BRygxn33D(fLOASzky7<4p*ggh-*2=>}bJ zVZ&(PoL@Ou&UkdomprNS!RotPffD(~QIEPVErVx@KFy!QY=OL+BQ}F6!$pWUhjs2# zB4wII4a?0N_a2WIW~DzK;(S+ux}W;#D>;UPZ>mlj#tL=E7ubwKYYsuctr}|LNK3%vHH{lPfKeie#A+B!#8%?~{NpO&;&vM3AOdII&q`8T}8`)#%ORm1X zmvI7z5BJ`W+m#?nA@Q0$NX{LZpxNU`*r=T6Auf(3F{&YM{3&XY{SpI+z>of=qsFGZ z&cs#E&DG_QI-gf|_KAq$o&Axc4bfHjc$m!K5;F#hw_v+Q+LPo!oZw-#Wn&u;KM5iJ zbQT&G;tqOqdeozamP}|D!zCceU9fsX?MZpE;TzW9sw=0^4<0sH%JGm%CG6Z3z4-zl zbfxrr5oXeL8o9Sd-02n(OtY3oE+Akgp{(kG&vDH*ii8#~P9v^DBI zwN>HLjdy#V!ic_ojrCphJT=EKue~h34cB6YwOJIL@ZC)~b=rX!4vLN7fx07XdlQ;m za;M7OKdSG@o1T1Zrg({^l##VkBrWhXT~_BS{cKGUtbWTAr@VIf*z;(dT4x>uad;mA zuk`c?n_C6%sr=$o^am@#gK`7t9NIyjae^(Bkp#sukeoJuMssKd-22N-cE?28y9Qbu z9S{0hF~N%!GP|>6OI1aDdyzX4W%DupzZP)TvOv1&0>ZNkK&l?b{_OJN1z;_@v@+PY zdQv2eDfOJDz`cQKZ5v-mbe@icsDm*KbZ(s6*}AMn#cr%yA`dRBYhP1{0=&CQ^^5v+ znvt}V;j9ZuTCTca7-}}4GkL6SEj4ZN1IfQqb-l?xL}!H;D|y@reOL*6<53G?!P1Ie zG5+*>sq_bMZQcGsy3_gl3xMkjlh=#4r?q};DD`jNO99|Kk@rhpNMKZYY0fX!ZpbGC**X`n>~ z(ok^qH0wvUTJnY~$)l`e4o)Pt57sE|8Qg?GEy`RS7%{vOO z+OYBLoivwXd=wI`v?x5u6X@82eHljE)L7@5`(B%cU7YIG587*c^7QbOUm_aZJ5tH6 z=iAWSbEP=%<)`|s2+Ct<)`4d?B3>c$EkVBkZ{5Yi?#UilUnDn7Y}S znf<9ND~ptu|MQ~l7PXVnU_;EZ&qwn?qA=Da!H;2fuWt*;C~;5+jH>e39&nRQ4bA>- z+eu$CAN`6yY7u$2_fn5Nei+ARFaoixnC-%qb#)%U(?C4KPNjb;D)wr5@l{UkWvWx` z11e@3)&7$4nVz-<MLeQdti-UcV!{YR!;j$A^=Rz*1U7SsV=G zb*mE;+Uli5`9E3z_*rJdrrLJzu4*5L%pxAsYt@^K>q13GZ|y4O@>xckg3h2KT)*yi zajEZLv-HmpTIQ2qmGPk0?%Bz)_iho;lg{2qJDaorT!TGE+k`!^XIGj6751RE-B-1O zc$O3fzLrUSNG<<*<6OR1VcPb2iPc7<>~W*{-9^iJjoL0R4-_Wlx|5~FD^>1r(d9u~ zN#n_OM&gLny48F(%P79UGTXACG08_v*CP^j`{Bc@59Z}>l#c=(F8~aiv%v4wv^E=y zB02VTt)mtEHFX&SR99fUsSFvFoKf$dl??tNw6DB>QFzs3fLFzJ;R0aSZeAKv3;&oo zzkLpA-QJooPlR~jG85|UV=e%6t;#5_L691ndUvV$%;{T(fW>xKMTOM26UbLn$N7gw z4`m*WTi|v(5phJu5rQ^)64w{qYBoNrDSi5qEkKst@R5_v^@rw(o!`3X60U|ii{`A7 z=4^kI(BKIn**CvE0I!Z_h($6Hv@18{RKy#{AfhNF^9I{JtK54W&J(C4BXV`3y#S*> zV2RxUA@s)1MRHp&6r-!G*)7Yj8-p8>8UZ%X;Lo zqnbY}^as|z(S8BAbqK1151XFyx*OVA<`crkZs7w+{2qMvw9#0#%p66NY(}v9@@~4| z`?oHC= z8rtuGmC{Zfn|A+`#qLrep0EtWz_fC299GZ81Rsy}>9u2Mo`$&bCbr6<>CMEMc7A~c zY30R=K1jt`SV`!37!=yn^mzxdY&RfdF96rVq#+NnzoOBDQ2Ib6{YlG(fQ%F0~S@asd#vx&WLSL9xD+61LNX8zeGL^{}4)=e24wEU^+t ziy>8QiD|GU>n&ZcpNjwdMZS%=80j@uLuxZ%MCo@b8(Bf5aJ z5ckvN+`LjuGVP`)>d%?N2XF&dtd$g4c0Tvb+cHa449J1w`unPMxSOJ1T?0bq_%yLa z*}uhn-yHGha86%stxWVMfqe-PldVzdR)#M?8%%+ZS{7YLTpLHM=t?_#Zt}QNA-jLh zz5YWt{cDdnF})~VHvv(5j#KcY*5c1Rlk9qhmqim7wJ`pS=S8bOUJTtdgo(Tt-1);P zUWusQ99wEICnBn?N#kjMFK`fph^amRMjmH!A_#Z38M>#gY#QTOn!V>M3rDCM$L~dO z--`9-c^GInKQ-KqxDg0P^>y;nFQ{Q2`2E;Dl!-9JZE-&F5lD>Rb!ytXEqFiSw&z*v zpCm66GzJj@+4bBwm-(%uV+IEiDxn+G(|W^ToOuio#fn`iD8B$WZ*U@hqukoN3RPDZ z^pjC>N{K&1=q5M0s^J!M^C$P_PDU&8o@_Qg{y_=4`tyFcGN{WB$bygPB-!%eWQb`o zL=TSJnmS@<&wdK`baF+wh_KJ!zWL%^6vwir4Wm9j1yjwfiq?;q1xCq;f^?Ia`+VVh zi&hmikj8SMY!iU@+d2xfhkbyLM#}-9aU9}=@?LEiA`CrsSF8UaR45hBri39A%6| z`&`9hm#EF~@|Tbgdbg9)0fw(Xy`t3VnfM^N9r^k4L-D1Yjw_^+e?{M|9z2*l@+Kam z*e(Fl5}MN<)T~7?dem!@4qN?VxfOxeIzrH)$x_Xpv7No*NL6J-lnzaW& z>tr~gguIMuQlMCx_ta*hv{2N(HFJS{8qLZpzCA0sn+sbCrtH~`vB#E$ac&aD&M1$H zk4$)=zX`iSLnq;wu&KG}k!fqXJYQja?=pRIN%igXYT%zar4W(@Cc6M=2x#JHd+kIf zi8t4H=?NUA)`4NfRh>{5qiLZ=>r!#?^eJhJ7Y+@%^C_7>0LX6dq;q^x0~Wz`O;JDHq2F=9e;cCiPSSD(^c!|ortH1abo-Suq!S(4uN7Ab7&{_P5QMROIe@iXf~cb9$a}~f4545(I>;B zgV{QL|4Jqs;{-XES7+Ol;9$cb*S|3T`*;e%!Z($0`|P zcw?Y!GRb6kMce33g@9-EcRtz+H(p&H%!^O$r2jFVGcU$Z1St`^Y z5tjRQvC`lE%qMvTVYga8YGFq^dYDV8nlx;Oqs12(Xuj|h5yLdN7f=ESGWX#MjDU+A)rIZwVzkvSud z4?`K#VK06E+mw4SMK{=uqP*3u$%cr)0L_2>4CJx+Ju6}(q|GPe&+b+IOeQZVX>WSRAP zH-Z3qn0kZyQd6RmX5o3R1RsUk^*@@v0=iWuUzH9v?P4w41*a=pMNw_$R;|M`(sSCL zf_=6rpZ(7-RnudKGJEY~@+j+YZSdr+R>h#wIl+SGsF(v+p_(K?TU?j)@Y#y9QA@6+ zf9k9HIWtd3I04#!z8GFN8ZbwC2w?XqQ`||l4gMI7V1r2DfoOedTCk)k&aCNbZUD&V zdImt}X>I8b@fyeEfC1AO8xIb_#_hvl9)b*hoK*VaYG8aXHRc9G�X`2Wd6&%bNDX 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
  • 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
      W8zF&Qu@ihbpN-lk1pI+5B?F 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 OziZ%sR}Gl`n*I-}Cw?~o literal 0 HcmV?d00001 diff --git a/static/attachments/appstore/platform-supported-content/modules/genai/genai-howto-functioncalling/GetCurrentUserName_Function.jpg b/static/attachments/appstore/platform-supported-content/modules/genai/genai-howto-functioncalling/GetCurrentUserName_Function.jpg new file mode 100644 index 0000000000000000000000000000000000000000..adca14a44722f903afc8b1cd1b05a6a593e33d69 GIT binary patch literal 86360 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 literal 0 HcmV?d00001 From d0bc6a059822096a67d052504a8d4629ea2157a6 Mon Sep 17 00:00:00 2001 From: Tina Engel Date: Mon, 3 Feb 2025 12:05:42 +0100 Subject: [PATCH 03/31] SAS-994 review of function calling how to --- .../modules/genai/openai/_index.md | 4 - .../genai/using_genai/function_calling.md | 93 ++++++++++-------- .../using_genai/start_from_a_starter_app.md | 2 +- .../genai/using_genai/start_from_blank_app.md | 10 +- .../structure_functioncalling.png | Bin 0 -> 88586 bytes 5 files changed, 54 insertions(+), 55 deletions(-) create mode 100644 static/attachments/appstore/platform-supported-content/modules/genai/genai-howto-functioncalling/structure_functioncalling.png diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/openai/_index.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/openai/_index.md index dcf51d82121..16d31cb8a92 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/openai/_index.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/openai/_index.md @@ -114,10 +114,6 @@ The following inputs are required for the OpenAI configuration: | Endpoint | This is the API endpoint (for example, `https://api.openai.com/v1`) | | Token | This is the access token to authorize your API call.
      To get an API, follow these steps:
      1. Create an account and sign in at [OpenAI](https://platform.openai.com/).
      2. Go to the [API key page](https://platform.openai.com/account/api-keys) to create a new secret key.
      3. Copy the API key and save this somewhere safe.
      | -{{% alert color="info" %}} -If you have signed up for an OpenAI account and are using free trial credits, note that the credits are only valid for three months after the account is created (not after the API key is created). To continue using the OpenAI API with an account that is more than three months old, you must top up your account balance with credit and create a new API key. For more details, see the [OpenAI API reference](https://platform.openai.com/docs/api-reference/authentication). -{{% /alert %}} - #### Azure OpenAI Configuration {#azure-openai-configuration} The following inputs are required for the Azure OpenAI configuration: diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/function_calling.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/function_calling.md index 1503d8a3401..a85fc2b1910 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/function_calling.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/function_calling.md @@ -6,25 +6,25 @@ weight: 10 description: "A tutorial guiding you through integrating and implementing function calling in your Mendix application for enhanced functionality." --- -## Introduction +## Introduction {#introduction} + This document guides you on how to use function calling in your smart app. For this, you can already use your existing app, or follow the steps from the [Build a Smart App from a Blank GenAI App](/appstore/modules/genai/using-genai/blank-app/) documentation, as demonstrated in this guide. -### Pre-requisites +### Pre-requisites {#prerequisites} Before diving into this guide, ensure you meet the following requirements: -- **An existing app**: In case you do not have anything existing yet, feel free to check the [Build a Chatbot from Scratch Using the Blank GenAI App](/appstore/modules/genai/using-genai/blank-app/) documentation, as outlined in this tutorial. +- **An existing app**: To simplify your first use case, we start building from an already setup [Blank GenAI Starter App](https://marketplace.mendix.com/link/component/227934) as described in the [Build a Chatbot from Scratch Using the Blank GenAI App](/appstore/modules/genai/using-genai/blank-app/) tutorial. -- **Installation** of the [GenAI For Mendix](https://marketplace.mendix.com/link/component/227931) bundle. +- **Installation** of the [GenAI For Mendix](https://marketplace.mendix.com/link/component/227931) bundle from the Mendix marketplace. If you start with the Blank GenAI App, this step can be skipped. - **Intermediate knowledge of the Mendix platform**: Familiarity with Mendix Studio Pro, microflows, and modules. -- **Basic understanding of GenAI concepts**: Review the [Enrich Your Mendix App with GenAI Capabilities](/appstore/modules/genai/) page for foundational knowledge and familiarized yourself with the [concepts](/appstore/modules/genai/using-gen-ai/). +- **Basic understanding of GenAI concepts**: Review the [Enrich Your Mendix App with GenAI Capabilities](/appstore/modules/genai/) page for foundational knowledge and familiarize yourself with the [concepts](/appstore/modules/genai/using-gen-ai/). - **Understanding Function Calling and Prompt Engineering**: Learn about [Function Calling](/appstore/modules/genai/function-calling/) and [Prompt Engineering](/appstore/modules/genai/using-gen-ai/#prompt-engineering) for use within the Mendix ecosystem. - -### Learning Goals +### Learning Goals {#learning-goals} By following this tutorial, you will: @@ -32,49 +32,50 @@ By following this tutorial, you will: - Integrate GenAI capabilities to address specific business use cases. -## Function Calling +## Function calling use case {#use-case} {{< figure src="/attachments/appstore/platform-supported-content/modules/genai/genai-howto-functioncalling/structure_functioncalling.png" >}} -As mentioned above, to simplify your first use case, we start building from an already setup [Blank GenAI App Template](https://marketplace.mendix.com/link/component/227934) as described in the [Build a Chatbot from Scratch Using the Blank GenAI App](/appstore/modules/genai/using-genai/blank-app/) tutorial. For illustration, the two functions/tools will have the following purposes: (1) gathering the display name of the user when an email is requested in a chatbot, so that the information will automatically be filled for the end user, and (2) extracting the bank holidays from the Netherlands using an API. +For this example, we'll implement two functions with the following purposes: + +1. Gathering the display name of the user when an email is requested in a chatbot, so that the information will automatically be filled for the end user, and +2. Extracting the bank holidays from the Netherlands using an API. -### Choosing the Infrastructure +### Choosing the Infrastructure {#infrastructure} Selecting the infrastructure for integrating GenAI into your Mendix application is the first step. Depending on your use case and preferences, you can choose from the following options: -* [Mendix Cloud GenAI Resources Packs](/appstore/modules/genai/MxGenAI/): Part of the [GenAI For Mendix](https://marketplace.mendix.com/link/component/227931), integrates LLMs by dragging and dropping common operations from its toolbox in Studio Pro. +* [Mendix Cloud GenAI Resource Packs](/appstore/modules/genai/MxGenAI/): The Mendix Cloud GenAI Connector is part of the [GenAI For Mendix](https://marketplace.mendix.com/link/component/227931) bundle on the marketplace, which lets you utilize Mendix Cloud GenAI Resource Packs directly within your Mendix application. * [OpenAI](/appstore/modules/genai/openai/): The [OpenAI Connector](https://marketplace.mendix.com/link/component/220472) supports both OpenAI’s platform and Azure’s OpenAI service. -{{% alert color="info" %}} -To start, you can sign up for a free trial with OpenAI and receive credits valid for three months from the account creation date. For more details, see [OpenAI API reference](https://platform.openai.com/docs/api-reference/authentication). -{{% /alert %}} +* [Amazon Bedrock](/appstore/modules/genai/bedrock/): The [Amazon Bedrock Connector](https://marketplace.mendix.com/link/component/215042) allows you to leverage Amazon Bedrock’s fully managed service to integrate foundation models from Amazon and leading AI providers. -* [Amazon Bedrock](/appstore/modules/genai/bedrock/): The [Bedrock Connector](https://marketplace.mendix.com/link/component/215042) allows you to leverage Amazon Bedrock’s fully managed service to integrate foundation models from Amazon and leading AI providers. +* Your Own Connector: Optionally, if you prefer a custom connector, you can integrate your chosen infrastructure. However, this document focuses on the Mendix Cloud GenAI, OpenAI and Amazon Bedrock connectors, as they offer comprehensive support and ease of use to get started. -* Your Own Connector: Optionally, if you prefer a custom connector, you can integrate your chosen infrastructure. However, this document focuses on the OpenAI and Bedrock connectors, as they offer comprehensive support and ease of use to get started. +Note: not all models support function calling. Make sure you set up your preferred GenAI provider in you Mendix app and have a model available that supports function calling. Mendix provides an [overview of models and their capabilities](https://docs.mendix.com/appstore/modules/genai/#models). -### Customizing microflows +### Customizing microflows {#microflows} -To make the functions work, we need to create and adjust certain microflows as shown below. These microflows will handle the logic required for gathering the display name of the user and extracting the bank holidays from the Netherlands using an API. +To make the functions work, we need to create and adjust certain microflows as shown below. These microflows will handle the logic required for gathering the display name of the user and extracting the bank holidays from the Netherlands in 2025 using an API. -1. Locate the pre-built microflow `ChatContext_ChatWithHistory_ActionMicroflow` in **ConversationalUI > USE_ME > Conversational UI > Action microflow examples**. Right-click on the microflow and select **Include in project** to copy it into your `MyFirstBot` module. +1. Locate the pre-built microflow `ChatContext_ChatWithHistory_ActionMicroflow` in **ConversationalUI > USE_ME > Conversational UI > Action microflow examples** and copy it into your `MyFirstBot` module. -2. Locate the `ChatContext` action in the `ACT_FullScreenChat_Open` microflow. Inside this action, change the `Action microflow` to `ChatContext_ChatWithHistory_ActionMicroflow` from your `MyFirstBot` module. +2. Locate the `New Chat` action in the `ACT_FullScreenChat_Open` microflow. Inside this action, change the `Action microflow` input parameter to your new `MyFirstBot.ChatContext_ChatWithHistory_ActionMicroflow` from your `MyFirstBot` module. In order to call a function, we need to create a microflow per function to extract the neccesary information. -#### Function: Extracting display name +#### Function: Extracting the user name {#function-username} {{< figure src="/attachments/appstore/platform-supported-content/modules/genai/genai-howto-functioncalling/GetCurrentUserName_Function.jpg" >}} -For this example, we will call the new microflow `GetCurrentUserName_Function`. +Create new microflow with name `GetCurrentUserName_Function`. -1. Start with the `Retrieve Objects` action, where you can use the following modifications as an example: +1. Start with the `Retrieve` action, where you can use the following modifications as an example: * Source: `From database` * Entity: `Administration.Account` - * XPath constraint: `[id = $currentUser]` * Range: `First` + * XPath constraint: `[id = $currentUser]` * Object name: `Account` 2. We include a decision where: @@ -82,26 +83,31 @@ For this example, we will call the new microflow `GetCurrentUserName_Function`. * Decision Type: `Expression` * Expression: `$Account != empty` - 2.1. If the **decision** is `false`, an **End event** is added with the **Microflow return value** can be set to something like `Mendix Administrator Chat User` with a **Return variable name** as `UserName`. + 2.1. If the **decision** is `false`, an **End event** of type `String` is added where the **return value** can be set to something like `Mendix Administrator Chat User`. - 2.2. If the **decision** is `true`, an **End event** is added with the **Microflow return value** is `$Account/FullName` with a **Return variable name** as `UserName`. + 2.2. If the **decision** is `true`, an **End event** of type `String` is added where the **return value** is `$Account/FullName`. -#### Function: Extracting display name +#### Function: Getting bank holidays in the Netherlands 2025 {#function-bankholidays} {{< figure src="/attachments/appstore/platform-supported-content/modules/genai/genai-howto-functioncalling/GetBankHolidays_Function.jpg" >}} For this example, we will call the new microflow `GetBankHolidays_Function`. - 1. Start with the `Call REST Service` action, where you can use the following modifications as an example: + 1. Start with the `Call REST service` action, where you can use the following modifications as an example: + General tab: * Location: `https://openholidaysapi.org/PublicHolidays?countryIsoCode=NL&validFrom=2025-01-01&validTo=2025-12-31&languageIsoCode=EN` * HTTP method: `GET` - * use timeout on request: `Yes` + * Use timeout on request: `Yes` * Timeout (s): You can choose the value, here we set it to `300` * The rest can be set to default. + Response tab: + * Response handling: `Store in a string` + * Store in variable: `Yes` + * Variable name: `HolidayJSON` -2. The next step is an **End event** with the **Microflow return value** of `$HolidaysJSON` with a **Return variable name** as `Variable`. +2. Right click on the `Call REST` action and select `Set $HolidayJSON as return value`. -### Calling the functions +### Calling the functions {#calling-the-functions} Now that this part is settled, the following steps will focus exclusively on the `ChatContext_ChatWithHistory_ActionMicroflow` from your `MyFirstBot` module. @@ -109,40 +115,41 @@ Now that this part is settled, the following steps will focus exclusively on the As seen in the picture, there are two relevant steps that have to be done in order for the two functions to be called. -#### Addition of Tools action +#### Adding functions to the request {#add-to-request} -1. After the `true` `Request found` decision, add the `Tools: Add Function to Request` action for the first function with the following settings: +1. After the outgoing `Request found` equals `true` decision, add the `Tools: Add Function to Request` toolbox action for the first function with the following settings: * Resquest: `$Request` * Tool name: `get-current-user-name` * Tool description: `This function has no input, and returns a string containing the name of the user that is using the chat. It can be used to generate texts on behalf of the user, for example the signature of an email, e.g. "Best regards, [user's name]"` - * Function microflow: here we call the `GetCurrentUserName_Function` microflow previously done. + * Function microflow: here we select the `GetCurrentUserName_Function` microflow which was created in the previous step. * Use return value: No 2. Following this action, we continue with the second function by adding the `Tools: Add Function to Request` action with the following settings: * Resquest: `$Request` * Tool name: `get-bank-holidays-2025` - * Tool description: `This function has no input, and returns a JSON containing the bank holidays in The Netherlands for the year 2025.` - * Function microflow: here we call the `GetBankHolidays_Function` microflow previously done. + * Tool description: `This function has no input, and returns a JSON containing the bank holidays in the Netherlands for the year 2025.` + * Function microflow: here we select the `GetBankHolidays_Function` microflow which was created in the previous step. * Use return value: No -### Changing the system prompt +### Optional: Changing the system prompt {#edit-systemprompt} -It is important to remember that a function will only be called correctly if the LLM knows when and which function to call. Therefore, we follow a similar approached as described in the [Build a Chatbot from Scratch Using the Blank GenAI App](/appstore/modules/genai/using-genai/blank-app/#changing-system-prompt). +Optionally, you can change the system prompt to give the model additional instructions, e.g. the tone of voice. Therefore, we follow a similar approached as described in the [Build a Chatbot from Scratch Using the Blank GenAI App](/appstore/modules/genai/using-genai/blank-app/#changing-system-prompt). 1. Open the copied `ACT_FullScreenChat_Open` microflow from your `MyFirstBot` module. -2. Locate the **ChatContext** action. -3. Inside this action, find the `System prompt` parameter, which has default an empty value. -4. Update the `System prompt` value to reflect your desired behavior. For example, *`You are an assistant that supports users in a company with various requests. When a user asks you to write an email, ensure all necessary information is provided. If any information is missing, ask the user for more details. Use the function get-current-user-name to retrieve the user's display name for the email signature. If the user asks for bank holidays in the Netherlands for the year 2025, use the function get-bank-holidays-2025 to retrieve this information. For any other requests, respond appropriately based on the context and provide helpful information. Always keep your answers short.`* +2. Locate the **New Chat** action. +3. Inside this action, find the `System prompt` parameter, which has by default an empty value. +4. Update the `System prompt` value to reflect your desired behavior. For example, *`Answer like a Gen Z person. Always keep your answers short.`* 5. Save the changes. -## Testing and Troubleshooting +## Testing and Troubleshooting {#testing-troubleshooting} Before proceeding with testing, ensure that you have completed the Mendix Cloud GenAI, OpenAI, or Bedrock configuration as outlined in the [Build a Chatbot from Scratch Using the Blank GenAI App](/appstore/modules/genai/using-genai/blank-app/) tutorial, particularly the [Infrastructure Configuration](/appstore/modules/genai/using-genai/blank-app/#config) section. To test the Chatbot, navigate to the **Home** icon to open the chatbot interface. Start interacting with your chatbot by typing in the chat box. +For example, you could enter `Write a message to my colleague Max asking about a meeting to disucss the content for our next GenAI how-to.` or `How many bank holidays do I have in December?` Congratulations! Your chatbot is now ready to use. -If an error occurs, check the **Mendix Console** in Studio Pro for details to help resolve the issue. \ No newline at end of file +If an error occurs, check the **Console** in Studio Pro for details to help resolve the issue. \ No newline at end of file diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/start_from_a_starter_app.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/start_from_a_starter_app.md index 8b8ba3fe185..f16d117e8dd 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/start_from_a_starter_app.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/start_from_a_starter_app.md @@ -48,7 +48,7 @@ Selecting the infrastructure for integrating GenAI into your Mendix application To start, you can sign up for a free trial with OpenAI and receive credits valid for three months from the account creation date. For more details, see the [OpenAI API reference](https://platform.openai.com/docs/api-reference/authentication). {{% /alert %}} -* [Amazon Bedrock](/appstore/modules/genai/bedrock/): The [Bedrock Connector](https://marketplace.mendix.com/link/component/215042) allows you to leverage Amazon Bedrock’s fully managed service to integrate foundation models from Amazon and leading AI providers. +* [Amazon Bedrock](/appstore/modules/genai/bedrock/): The [Amazon Bedrock Connector](https://marketplace.mendix.com/link/component/215042) allows you to leverage Amazon Bedrock’s fully managed service to integrate foundation models from Amazon and leading AI providers. * Your Own Connector: Optionally, if you prefer a custom connector, you can integrate your chosen infrastructure. However, this document focuses on the OpenAI and Bedrock connectors, as they offer comprehensive support and ease of use to get started. diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/start_from_blank_app.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/start_from_blank_app.md index cf9825e5220..1f76a583caa 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/start_from_blank_app.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/start_from_blank_app.md @@ -38,7 +38,7 @@ To start building your smart app with a blank GenAI App template, download the [ ### Important Modules -The [Blank GenAI App Template](https://marketplace.mendix.com/link/component/227934) includes an essential pre-installed bundle called the [GenAI For Mendix](https://marketplace.mendix.com/link/component/227931), which are beneficial to familiarize yourself with, as it includes: +The [Blank GenAI App Starter App](https://marketplace.mendix.com/link/component/227934) includes an essential pre-installed bundle called the [GenAI For Mendix](https://marketplace.mendix.com/link/component/227931), which are beneficial to familiarize yourself with, as it includes: * The [GenAI Commons](/appstore/modules/genai/commons/) module: provides pre-built operations and data structures for seamless integration with platform-supported GenAI connectors, such as the Mendix Cloud GenAI, OpenAI, or Amazon Bedrock. @@ -54,11 +54,7 @@ Selecting the infrastructure for integrating GenAI into your Mendix application * [OpenAI](/appstore/modules/genai/openai/): The [OpenAI Connector](https://marketplace.mendix.com/link/component/220472) supports both OpenAI’s platform and Azure’s OpenAI service. -{{% alert color="info" %}} -To start, you can sign up for a free trial with OpenAI and receive credits valid for three months from the account creation date. For more details, see [OpenAI API reference](https://platform.openai.com/docs/api-reference/authentication). -{{% /alert %}} - -* [Amazon Bedrock](/appstore/modules/genai/bedrock/): The [Bedrock Connector](https://marketplace.mendix.com/link/component/215042) allows you to leverage Amazon Bedrock’s fully managed service to integrate foundation models from Amazon and leading AI providers. +* [Amazon Bedrock](/appstore/modules/genai/bedrock/): The [Amazon Bedrock Connector](https://marketplace.mendix.com/link/component/215042) allows you to leverage Amazon Bedrock’s fully managed service to integrate foundation models from Amazon and leading AI providers. * Your Own Connector: Optionally, if you prefer a custom connector, you can integrate your chosen infrastructure. However, this document focuses on the OpenAI and Bedrock connectors, as they offer comprehensive support and ease of use to get started. @@ -151,7 +147,7 @@ Follow the steps below to configure OpenAI for your application. For more inform * In the **Test configuration**, select the deployed model and press **Test**. * If an error occurs, check the **Mendix Console** for more details on resolving the issue. -#### Bedrock Configuration +#### Amazon Bedrock Configuration Follow the steps below to configure Amazon Bedrock for your application: diff --git a/static/attachments/appstore/platform-supported-content/modules/genai/genai-howto-functioncalling/structure_functioncalling.png b/static/attachments/appstore/platform-supported-content/modules/genai/genai-howto-functioncalling/structure_functioncalling.png new file mode 100644 index 0000000000000000000000000000000000000000..c7328863058a8119129f5e8f97a3a2c9691e8ba4 GIT binary patch literal 88586 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
      aeUiZ2_rx>z3<6Ba>5 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 literal 0 HcmV?d00001 From def45be2f770aeba9e701fea6af55ac7f3465cf7 Mon Sep 17 00:00:00 2001 From: "Emily.von.Bergen" Date: Wed, 5 Feb 2025 09:46:19 +0100 Subject: [PATCH 04/31] SAS-1112 Updating the structure of our docs --- .../Mx GenAI Connector.md | 0 .../genai/Mendix Cloud GenAI/_index.md | 23 +++++++++++++++++++ .../modules/genai/concepts/_index.md | 2 +- .../modules/genai/reference-guide/_index.md | 15 ++++++++++++ .../external-platforms/_index.md | 14 +++++++++++ .../external-platforms}/bedrock.md | 4 ++-- .../external-platforms}/openai/_index.md | 5 ++-- .../pg-vector-knowledge-base/_index.md | 3 ++- .../vector-database-setup.md | 0 .../external-platforms}/snowflake-cortex.md | 0 .../genai-for-mendix.md/_index.md | 22 ++++++++++++++++++ .../genai-for-mendix.md}/conversational-ui.md | 0 .../genai-for-mendix.md}/genai-commons.md | 0 .../modules/genai/using_genai/_index.md | 2 +- .../genai/using_genai/function_calling.md | 6 ++--- .../using_genai/start_from_a_starter_app.md | 4 ---- 16 files changed, 86 insertions(+), 14 deletions(-) rename content/en/docs/appstore/use-content/platform-supported-content/modules/genai/{ => Mendix Cloud GenAI}/Mx GenAI Connector.md (100%) create mode 100644 content/en/docs/appstore/use-content/platform-supported-content/modules/genai/Mendix Cloud GenAI/_index.md create mode 100644 content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/_index.md create mode 100644 content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/_index.md rename content/en/docs/appstore/use-content/platform-supported-content/modules/genai/{ => reference-guide/external-platforms}/bedrock.md (92%) rename content/en/docs/appstore/use-content/platform-supported-content/modules/genai/{ => reference-guide/external-platforms}/openai/_index.md (99%) rename content/en/docs/appstore/use-content/platform-supported-content/modules/genai/{ => reference-guide/external-platforms}/pg-vector-knowledge-base/_index.md (99%) rename content/en/docs/appstore/use-content/platform-supported-content/modules/genai/{ => reference-guide/external-platforms}/pg-vector-knowledge-base/vector-database-setup.md (100%) rename content/en/docs/appstore/use-content/platform-supported-content/modules/genai/{ => reference-guide/external-platforms}/snowflake-cortex.md (100%) create mode 100644 content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/genai-for-mendix.md/_index.md rename content/en/docs/appstore/use-content/platform-supported-content/modules/genai/{ => reference-guide/genai-for-mendix.md}/conversational-ui.md (100%) rename content/en/docs/appstore/use-content/platform-supported-content/modules/genai/{ => reference-guide/genai-for-mendix.md}/genai-commons.md (100%) diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/Mx GenAI Connector.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/Mendix Cloud GenAI/Mx GenAI Connector.md similarity index 100% rename from content/en/docs/appstore/use-content/platform-supported-content/modules/genai/Mx GenAI Connector.md rename to content/en/docs/appstore/use-content/platform-supported-content/modules/genai/Mendix Cloud GenAI/Mx GenAI Connector.md diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/Mendix Cloud GenAI/_index.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/Mendix Cloud GenAI/_index.md new file mode 100644 index 00000000000..43caf03f87f --- /dev/null +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/Mendix Cloud GenAI/_index.md @@ -0,0 +1,23 @@ +--- +title: "Mendix Cloud GenAI" +url: /appstore/modules/genai/mx-cloud-genai/ +linktitle: "Mendix Cloud GenAI" +weight: 30 +description: "Provides guidance on how to navigate through the Mendix Cloud GenAI Resource Packs." +--- + +## Introduction + +In order to help developers get started integrating GenAI capabilities into custom applications, Mendix Cloud provides GenAI Resource Packs. These provide access to Large Language Models and knowledge bases and integration between each other, so that the most common GenAI patterns can be implemented seamlessly in a low code way. It makes leveraging GenAI technologies accessible for Mendix customers and partners by abstracting a way complex provisioning processes and turning configuration steps into a few simple clicks as part of the platform experience. + +## Resources Overview + +From the GenAI Resources portal, you will have an overview of all the resources that you have access to. From this overview you are also able to request a new GenAI Resource. + +There are three different types of resources: + +* **Compute - Text Generation**: Text generation resources are used to create human-like text based on given inputs. This capability is crucial for applications that require natural language generation. + +* **Knowledge Base**: A knowledge base can be used to upload your data which then can be used by a text generation resource. + +* **Compute - Embeddings Generation**: Embeddings generation resources are designed to convert text into vector representations. An embeddings resource is required for uploading data to your Knowledge Base. diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/concepts/_index.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/concepts/_index.md index 5f62dd5c247..23f02cd0d3f 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/concepts/_index.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/concepts/_index.md @@ -2,7 +2,7 @@ title: "Get Started with Generative AI" url: /appstore/modules/genai/get-started/ linktitle: "Get Started with GenAI" -weight: 10 +weight: 20 description: "Describes the concepts behind generative AI and what you might implement with it." aliases: - /appstore/modules/genai/using-gen-ai/ diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/_index.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/_index.md new file mode 100644 index 00000000000..e59c60723e7 --- /dev/null +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/_index.md @@ -0,0 +1,15 @@ +--- +title: "Reference Guide" +url: /appstore/modules/genai/reference-guide/ +linktitle: "Reference Guide" +weight: 40 +description: "Provides references of Mendix's GenAI Modules and Tools." +no_list: false +--- + +## Introduction {#introduction} + +This guide is designed to provide you with comprehensive information on the various tools and modules available within the Mendix platform. These tools will help you explore how you can enhance your applications by integrating Generative AI, and how each of our tools can assist you in achieving this. Additionally, it provides reference guides on the technical aspects, ensuring you have all the information you need to effectively implement and optimize these enhancements. + +## Reference Guide + diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/_index.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/_index.md new file mode 100644 index 00000000000..46d864f7551 --- /dev/null +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/_index.md @@ -0,0 +1,14 @@ +--- +title: "Connectors to External Platforms" +url: /appstore/modules/genai/reference-guide/external-connectors/ +linktitle: "Connectors to External Platforms" +weight: 20 +description: "Provides information about connectors to external platforms." +no_list: false +--- + +## Introduction + +The Mendix platform provides seamless integration with various external platforms through specialized connectors. These connectors enable you to extend the functionality of your applications by leveraging external services and data sources. This section introduces the connectors available for [Snowflake Cortex](/appstore/modules/genai/snowflake-cortex/), [OpenAI](/appstore/modules/genai/openai/), [Amazon Bedrock](/appstore/modules/genai/bedrock/), and [PGVector Knowledge Base](/appstore/modules/genai/pgvector/), providing a high-level overview of their capabilities. + +## Connectors \ No newline at end of file diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/bedrock.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/bedrock.md similarity index 92% rename from content/en/docs/appstore/use-content/platform-supported-content/modules/genai/bedrock.md rename to content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/bedrock.md index 28523564fe6..4fc9ba81a9d 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/bedrock.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/bedrock.md @@ -1,7 +1,7 @@ --- title: "Amazon Bedrock" -url: /appstore/modules/genai/bedrock/ -weight: 40 +url: /appstore/modules/genai/reference-guide/external-connectors/bedrock/ +weight: 10 description: "Describes the Amazon Bedrock GenAI service." --- diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/openai/_index.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/openai/_index.md similarity index 99% rename from content/en/docs/appstore/use-content/platform-supported-content/modules/genai/openai/_index.md rename to content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/openai/_index.md index 16d31cb8a92..84b8af256f4 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/openai/_index.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/openai/_index.md @@ -1,11 +1,12 @@ --- title: "OpenAI" -url: /appstore/modules/genai/openai/ +url: /appstore/modules/genai/reference-guide/external-connectors/openai/ linktitle: "OpenAI" description: "Describes the configuration and usage of the OpenAI Connector, which allows you to integrate generative AI into your Mendix app." -weight: 60 +weight: 20 aliases: - /appstore/connectors/openai-connector/ + - /appstore/modules/genai/openai/ --- ## Introduction {#introduction} diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/pg-vector-knowledge-base/_index.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/pg-vector-knowledge-base/_index.md similarity index 99% rename from content/en/docs/appstore/use-content/platform-supported-content/modules/genai/pg-vector-knowledge-base/_index.md rename to content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/pg-vector-knowledge-base/_index.md index 87ba602bc88..8e95c01e544 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/pg-vector-knowledge-base/_index.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/pg-vector-knowledge-base/_index.md @@ -1,11 +1,12 @@ --- title: "PgVector Knowledge Base" -url: /appstore/modules/genai/pgvector/ +url: /appstore/modules/genai/reference-guide/external-connectors/pgvector/ linktitle: "PgVector Knowledge Base" description: "Describes the configuration and usage of the PgVector Knowledge Base module from the Mendix Marketplace. This module allows developers to integrate PostgreSQL databases with pgvector installed as knowledge bases into their Mendix app." weight: 70 aliases: - /appstore/modules/pgvector-knowledge-base/ + - /appstore/modules/genai/pgvector/ --- ## Introduction {#introduction} diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/pg-vector-knowledge-base/vector-database-setup.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/pg-vector-knowledge-base/vector-database-setup.md similarity index 100% rename from content/en/docs/appstore/use-content/platform-supported-content/modules/genai/pg-vector-knowledge-base/vector-database-setup.md rename to content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/pg-vector-knowledge-base/vector-database-setup.md diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/snowflake-cortex.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/snowflake-cortex.md similarity index 100% rename from content/en/docs/appstore/use-content/platform-supported-content/modules/genai/snowflake-cortex.md rename to content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/snowflake-cortex.md diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/genai-for-mendix.md/_index.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/genai-for-mendix.md/_index.md new file mode 100644 index 00000000000..a8e8b9ce3f9 --- /dev/null +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/genai-for-mendix.md/_index.md @@ -0,0 +1,22 @@ +--- +title: "GenAI For Mendix" +url: /appstore/modules/genai/genai-for-mx/ +linktitle: "GenAI For Mendix" +weight: 10 +description: "Provides information about the GenAI For Mendix Module." +no_list: false +--- + +## Introduction {#introduction} + +The [GenAI For Mendix](https://marketplace.mendix.com/link/component/227931) bundle is designed to provide you with comprehensive information on how to enhance your Mendix applications by integrating GenAI. It contains [GenAI Commons](/appstore/modules/genai/commons/), [Conversational UI](/appstore/modules/genai/conversational-ui/), and the [Mendix Cloud GenAI Resource Packs](/appstore/modules/genai/MxGenAI/) offering a comprehensive overview of the technical aspects. + +By leveraging the tools and features provided in this bundle, you can: + +* Integrate with any LLM and knowledge base through the included [GenAI Commons](/appstore/modules/genai/commons/) module. +* Create a [Conversational UI](/appstore/modules/genai/conversational-ui/) using the included pages and snippets to facilitate user-friendly interactions. +* Perform prompt engineering at runtime to optimize your AI-generated results. +* Monitor your token consumption with the Token Consumption Monitor, ensuring efficient use of resources. +* Integrate directly with Mendix Cloud GenAI Models and Knowledge Bases through the [Mendix Cloud GenAI Resource Packs](/appstore/modules/genai/MxGenAI/), enhancing your application’s intelligence and responsiveness. + +## Modules \ No newline at end of file diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/conversational-ui.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/genai-for-mendix.md/conversational-ui.md similarity index 100% rename from content/en/docs/appstore/use-content/platform-supported-content/modules/genai/conversational-ui.md rename to content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/genai-for-mendix.md/conversational-ui.md diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/genai-commons.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/genai-for-mendix.md/genai-commons.md similarity index 100% rename from content/en/docs/appstore/use-content/platform-supported-content/modules/genai/genai-commons.md rename to content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/genai-for-mendix.md/genai-commons.md diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/_index.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/_index.md index d00be2fdcd9..23bb32ce962 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/_index.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/_index.md @@ -28,7 +28,7 @@ Generative Artificial Intelligence (GenAI) transforms business applications, emp ### Additional Resources * Basic documentation on [Get Started with Generative AI](/appstore/modules/genai/get-started/) is an essential resource for anyone beginning their GenAI journey. -* The [GenAI For Mendix](https://marketplace.mendix.com/link/component/227931) is a bundle containing [GenAI Commons](/appstore/modules/genai/commons/), [Conversational UI](/appstore/modules/genai/conversational-ui/), and the [Mendix Cloud GenAI Resources Packs](/appstore/modules/genai/MxGenAI/) offering a comprehensive overview of the technical aspects. +* The [GenAI For Mendix](https://marketplace.mendix.com/link/component/227931) is a bundle containing [GenAI Commons](/appstore/modules/genai/commons/), [Conversational UI](/appstore/modules/genai/conversational-ui/), and the [Mendix Cloud GenAI Resource Packs](/appstore/modules/genai/MxGenAI/) offering a comprehensive overview of the technical aspects. * The [OpenAI](/appstore/modules/genai/openai/) provides essential information about the OpenAI connector. * The [Amazon Bedrock](/appstore/modules/aws/amazon-bedrock/) provides key information about the AWS Bedrock connector. * The [PGVector Knowledge Base](/appstore/modules/genai/pgvector/) offers the option for a private knowledge base outside of the LLM infrastructure. diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/function_calling.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/function_calling.md index a85fc2b1910..1477618b39b 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/function_calling.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/function_calling.md @@ -1,8 +1,8 @@ --- title: "Integrate Function Calling in your Mendix app" url: /appstore/modules/genai/genai-howto-functioncalling/ -linktitle: "How to integrate Function Calling in your Mendix app" -weight: 10 +linktitle: "Integrate Function Calling in your Mendix app" +weight: 30 description: "A tutorial guiding you through integrating and implementing function calling in your Mendix application for enhanced functionality." --- @@ -39,7 +39,7 @@ By following this tutorial, you will: For this example, we'll implement two functions with the following purposes: 1. Gathering the display name of the user when an email is requested in a chatbot, so that the information will automatically be filled for the end user, and -2. Extracting the bank holidays from the Netherlands using an API. +2. Extracting the bank holidays from the Netherlands using an API. For this example, a public API was taken from https://www.openholidaysapi.org/en/. ### Choosing the Infrastructure {#infrastructure} diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/start_from_a_starter_app.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/start_from_a_starter_app.md index f16d117e8dd..bc272154964 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/start_from_a_starter_app.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/start_from_a_starter_app.md @@ -44,10 +44,6 @@ Selecting the infrastructure for integrating GenAI into your Mendix application * [OpenAI](/appstore/modules/genai/openai/): The [OpenAI Connector](https://marketplace.mendix.com/link/component/220472) supports OpenAI’s platform and Azure’s OpenAI service. -{{% alert color="info" %}} -To start, you can sign up for a free trial with OpenAI and receive credits valid for three months from the account creation date. For more details, see the [OpenAI API reference](https://platform.openai.com/docs/api-reference/authentication). -{{% /alert %}} - * [Amazon Bedrock](/appstore/modules/genai/bedrock/): The [Amazon Bedrock Connector](https://marketplace.mendix.com/link/component/215042) allows you to leverage Amazon Bedrock’s fully managed service to integrate foundation models from Amazon and leading AI providers. * Your Own Connector: Optionally, if you prefer a custom connector, you can integrate your chosen infrastructure. However, this document focuses on the OpenAI and Bedrock connectors, as they offer comprehensive support and ease of use to get started. From 3fb5863cb79e7d81158c51b3d4e9eb042e742ebc Mon Sep 17 00:00:00 2001 From: EmilyvonBergen <75262226+EmilyvonBergen@users.noreply.github.com> Date: Wed, 5 Feb 2025 10:05:21 +0100 Subject: [PATCH 05/31] Update _index.md --- .../modules/genai/Mendix Cloud GenAI/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/Mendix Cloud GenAI/_index.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/Mendix Cloud GenAI/_index.md index 43caf03f87f..0ac0dfb9058 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/Mendix Cloud GenAI/_index.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/Mendix Cloud GenAI/_index.md @@ -8,7 +8,7 @@ description: "Provides guidance on how to navigate through the Mendix Cloud GenA ## Introduction -In order to help developers get started integrating GenAI capabilities into custom applications, Mendix Cloud provides GenAI Resource Packs. These provide access to Large Language Models and knowledge bases and integration between each other, so that the most common GenAI patterns can be implemented seamlessly in a low code way. It makes leveraging GenAI technologies accessible for Mendix customers and partners by abstracting a way complex provisioning processes and turning configuration steps into a few simple clicks as part of the platform experience. +In order to help developers get started integrating GenAI capabilities into custom applications, Mendix Cloud provides GenAI Resource Packs. These provide access to Large Language Models and knowledge bases and integration between each other, so that the most common GenAI patterns can be implemented seamlessly in a low code way. It makes leveraging GenAI technologies accessible for Mendix customers and partners by abstracting a way complex provisioning processes and turning configuration steps into a few simple clicks as part of the platform experience. Feel free to contact genai-resource-packs@mendix.com to learn more. ## Resources Overview From 978eedb82ebed7990fe4cf806504b2357cbfc0fe Mon Sep 17 00:00:00 2001 From: "Emily.von.Bergen" Date: Wed, 5 Feb 2025 17:34:47 +0100 Subject: [PATCH 06/31] SAS-1112 Adding David doc and making last changes --- .../Mx GenAI Connector.md | 6 +- .../_index.md | 3 + .../mendix-cloud-genai/mendix-cloud-grp.md | 86 ++++++++++++++++++ .../external-platforms/bedrock.md | 3 +- .../{openai/_index.md => openai.md} | 0 .../vector-database-setup.md | 4 +- .../genai-for-mendix.md/conversational-ui.md | 4 +- .../genai-for-mendix.md/genai-commons.md | 3 +- .../genai/using_genai/start_from_blank_app.md | 5 +- ...ai_mf.jpg => [excluded]blank_genai_mf.jpg} | Bin .../blank_genai_systemprompt.png | Bin 0 -> 390131 bytes 11 files changed, 106 insertions(+), 8 deletions(-) rename content/en/docs/appstore/use-content/platform-supported-content/modules/genai/{Mendix Cloud GenAI => mendix-cloud-genai}/Mx GenAI Connector.md (99%) rename content/en/docs/appstore/use-content/platform-supported-content/modules/genai/{Mendix Cloud GenAI => mendix-cloud-genai}/_index.md (97%) create mode 100644 content/en/docs/appstore/use-content/platform-supported-content/modules/genai/mendix-cloud-genai/mendix-cloud-grp.md rename content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/{openai/_index.md => openai.md} (100%) rename static/attachments/appstore/platform-supported-content/modules/genai/genai-howto-blankapp/{blank_genai_mf.jpg => [excluded]blank_genai_mf.jpg} (100%) create mode 100644 static/attachments/appstore/platform-supported-content/modules/genai/genai-howto-blankapp/blank_genai_systemprompt.png diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/Mendix Cloud GenAI/Mx GenAI Connector.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/mendix-cloud-genai/Mx GenAI Connector.md similarity index 99% rename from content/en/docs/appstore/use-content/platform-supported-content/modules/genai/Mendix Cloud GenAI/Mx GenAI Connector.md rename to content/en/docs/appstore/use-content/platform-supported-content/modules/genai/mendix-cloud-genai/Mx GenAI Connector.md index c945c2e5895..8496edd69a9 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/Mendix Cloud GenAI/Mx GenAI Connector.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/mendix-cloud-genai/Mx GenAI Connector.md @@ -1,9 +1,11 @@ --- title: "Mendix Cloud GenAI Connector" -url: /appstore/modules/genai/MxGenAI/ +url: /appstore/modules/genai/mx-cloud-genai/MxGenAI/ linktitle: "Mendix Cloud GenAI Connector" description: "Describes the configuration and usage of the Mendix Cloud GenAI Connector, which allows you to utilize Mendix Cloud GenAI Resource Packs directly within your Mendix application." -weight: 60 +weight: 20 +aliases: + - /appstore/modules/genai/MxGenAI/ --- ## Introduction diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/Mendix Cloud GenAI/_index.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/mendix-cloud-genai/_index.md similarity index 97% rename from content/en/docs/appstore/use-content/platform-supported-content/modules/genai/Mendix Cloud GenAI/_index.md rename to content/en/docs/appstore/use-content/platform-supported-content/modules/genai/mendix-cloud-genai/_index.md index 43caf03f87f..909fe40274b 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/Mendix Cloud GenAI/_index.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/mendix-cloud-genai/_index.md @@ -4,6 +4,7 @@ url: /appstore/modules/genai/mx-cloud-genai/ linktitle: "Mendix Cloud GenAI" weight: 30 description: "Provides guidance on how to navigate through the Mendix Cloud GenAI Resource Packs." +no_list: false --- ## Introduction @@ -21,3 +22,5 @@ There are three different types of resources: * **Knowledge Base**: A knowledge base can be used to upload your data which then can be used by a text generation resource. * **Compute - Embeddings Generation**: Embeddings generation resources are designed to convert text into vector representations. An embeddings resource is required for uploading data to your Knowledge Base. + +## Relevant Sources diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/mendix-cloud-genai/mendix-cloud-grp.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/mendix-cloud-genai/mendix-cloud-grp.md new file mode 100644 index 00000000000..5a49bcd740b --- /dev/null +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/mendix-cloud-genai/mendix-cloud-grp.md @@ -0,0 +1,86 @@ +--- +title: "Mendix Cloud GenAI Resource Packs" +url: /appstore/modules/genai/mx-cloud-genai/resource-packs +linktitle: "Mendix Cloud GenAI Resource Packs" +description: "Explains what the Mendix Cloud GenAI Resource Packs is including the capabilities, limitations, and FAQ." +weight: 10 +--- + +## Introduction + +**Mendix Cloud GenAI Resource Packs** provide turn-key access to Generative AI technology, delivered through Mendix Cloud: + +* **Model Resource Packs** provide customers with large language model capacity. Each resource pack comes with an allocation of input/output tokens for Anthropic's Claude and Cohere's Embed. We will introduce support for additional models in the future. +* **Knowledge Base Resource Packs** give customers an OpenSearch-based vector database to support Retrieval-Augmented Generation (RAG), Semantic Search and other Generative AI use cases. + +Developers can use the Mendix Portal to manage their Mendix Cloud GenAI resources and easily integrate the models & knowledge base capabilities into their Mendix apps with the Mendix Cloud GenAI Connector. Optimized for high performance and low latency to ensure efficient processing of AI tasks, Mendix Cloud GenAI Resource Packs are the easiest & fastest way to deliver end-to-end Generative AI solutions, on a single platform. + + +### Limited Availability + +Mendix Cloud GenAI Resource Packs are currently available under Limited Availability. Mendix is working with early adopters (customers, partners, ISVs) to enable to deliver project successes. Mendix currently evaluates use cases and selectively provides access to GenAI Resource Packs. Reach out to genai-resource-packs@mendix.com to learn more about the conditions for access to GenAI Resource Packs under Limited Availability until the General Availability release. + +## Models + +Mendix Cloud Model Resource Packs provide customers with a monthly quota of input and output tokens for Anthropic's Claude and Cohere's Embed models. This allows customers to implement typical Generative AI use cases like + +### Supported models + +Mendix Cloud provides access to the following models: + +* Anthropic Claude v3.5 Sonnet v1 +* Cohere Embed v3 (English & Multilingual options) + +The models are made available through the Mendix Cloud, leveraging AWS's highly secure Amazon Bedrock multi-tenant architecture, which employs advanced logical isolation techniques that effectively segregate customer data, requests, and responses, ensuring a level of data protection that aligns with global security compliance requirements. Customer prompts or requests and the corresponding answers or responses are not stored, nor are they used for model training. Your data remains your data. + +Customers looking to leverage other models in addition to the above can also take advantage of Mendix' [(Azure) OpenAI Connector](/appstore/modules/genai/reference-guide/external-connectors/openai/) and Amazon [Bedrock Connector](/appstore/modules/genai/reference-guide/external-connectors/bedrock/) to integrate numerous other models in their apps. + +## Knowledge Bases + +Mendix Cloud Knowledge Base Resource Packs entitle customers to an elastic, logically isolated vector database, to use for standard Generative AI architectural patterns like Retrieval-Augmented Generation (RAG), for semantic similarity search or other Generative AI use cases. The Knowledge Bases on Mendix Cloud are based on AWS's highly secure Amazon Bedrock Knowledge Bases capability combined with AWS' OpenSearch Serverless database - the de facto standard infrastructure for Generative AI Knowledge Bases on AWS, guaranteeing fast & accurate information retrieval. + +Knowledge bases enable you to bring your own data for RAG, semantic similarity search & other generative AI use cases: + +* Make your app's data available through integration +* Connect to third-party information sources +* Manage knowledge base content & add metadata labels + +Knowledge Bases are based on elastically scaling, serverless OpenSearch vector databases, to ensure high performance under load. The database is set up as a highly available cluster to ensure business continuity. Customer data is stored in logical isolation from other customers and is not used for model training, to guarantee data security & privacy in compliances with industry standards. + +## Mendix Portal + +The Mendix Portal allows easy access to manage the resources, through the GenAI Resources section in the portal. + +* Get insight into consumption of input/output tokens against entitlements for Models +* Manage content for Knowledge Bases +* Manage team access to all resources +* Create & manage connection keys to connect your apps with all resources +* Track activity logs for team access & connection key management + +## Mendix Cloud GenAI Connector + +The [Mendix Cloud GenAI connector](/appstore/modules/genai/mx-cloud-genai/MxGenAI/) lets you utilize Mendix Cloud GenAI resource packs directly within your Mendix application. It allows you to integrate generative AI by dragging and dropping common operations from its toolbox. + +## Regional availability + +Mendix Cloud GenAI Resource Packs are available in the following regions of Mendix Cloud: + +* Europe (Frankfurt) - eu-central-1 + +## FAQ + +### What happens with data processed by Mendix Cloud GenAI services? + +For the Mendix Cloud GenAI Model Resources with Anthropic's Claude and Cohere's Embed, we do not store any of the requests (prompts) & responses (answers, embeddings) sent to & from the service. Neither do our partners Amazon, Anthropic & Cohere. Your data is **not** used for training. + +Data stored in the GenAI Knowledge Base Resources is stored in a logically isolated database only accessible by you, the customer, through the Keys you can create yourself in the Portal. + +### How is data sent to the Mendix Cloud GenAI service stored & used? +The requests (prompts) sent to & responses (answers, embeddings) sent from the Models are not stored anywhere and are **not** used for training purposes. Only metadata about requests like token input/output counts are collected for logging, metrics & monitoring, metering & billing, product improvement and maintenance purposes. + +Data sent to the Knowledge Base (vectors, chunks) is stored in a logically isolated, fully secure vector database in an industry-standard way. The data is **not** used by Mendix and exclusively available to you, the customer. Your data is **not** used for training purposes. Only metadata about use of the Knowledge Base is stored & used for logging, metrics & monitoring, metering & billing, product improvement and maintenance purposes. + +### See also + +* [Enrich your Mendix app with GenAI capabilities](/appstore/modules/genai/) +* [Build your first Mendix app with GenAI](/appstore/modules/genai/using-genai/starter-template) diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/bedrock.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/bedrock.md index 4fc9ba81a9d..d5bc5af557c 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/bedrock.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/bedrock.md @@ -3,7 +3,8 @@ title: "Amazon Bedrock" url: /appstore/modules/genai/reference-guide/external-connectors/bedrock/ weight: 10 description: "Describes the Amazon Bedrock GenAI service." - +aliases: + - /appstore/modules/genai/bedrock/ --- ## Introduction diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/openai/_index.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/openai.md similarity index 100% rename from content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/openai/_index.md rename to content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/openai.md diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/pg-vector-knowledge-base/vector-database-setup.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/pg-vector-knowledge-base/vector-database-setup.md index 833d44332ea..29148135a09 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/pg-vector-knowledge-base/vector-database-setup.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/pg-vector-knowledge-base/vector-database-setup.md @@ -1,9 +1,11 @@ --- title: "Setting up a Vector Database" -url: /appstore/modules/genai/pgvector-setup/ +url: /appstore/modules/genai/reference-guide/external-connectors/pgvector-setup/ linktitle: "Vector Database Setup" weight: 5 description: "Describes how to set up a vector database to store and manage vector embeddings for a knowledge base" +aliases: + - /appstore/modules/genai/pgvector-setup/ --- ## Introduction {#introduction} diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/genai-for-mendix.md/conversational-ui.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/genai-for-mendix.md/conversational-ui.md index 53d9c2933ce..21c90aedc54 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/genai-for-mendix.md/conversational-ui.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/genai-for-mendix.md/conversational-ui.md @@ -1,9 +1,11 @@ --- title: "Conversational UI" -url: /appstore/modules/genai/conversational-ui/ +url: /appstore/modules/genai/genai-for-mx/conversational-ui/ linktitle: "Conversational UI" weight: 20 description: "Describes the Conversational UI marketplace module that assists developers in implementing conversational use cases such as an AI Bot." +aliases: + - /appstore/modules/genai/conversational-ui/ --- ## Introduction {#introduction} diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/genai-for-mendix.md/genai-commons.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/genai-for-mendix.md/genai-commons.md index 7b4149c313d..68a0126d381 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/genai-for-mendix.md/genai-commons.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/genai-for-mendix.md/genai-commons.md @@ -1,11 +1,12 @@ --- title: "GenAI Commons" -url: /appstore/modules/genai/commons/ +url: /appstore/modules/genai/genai-for-mx/commons/ linktitle: "GenAI Commons" description: "Describes the purpose, configuration and usage of the GenAI Commons module from the Mendix Marketplace that allows developers to integrate GenAI common principles and patterns into their Mendix app." weight: 50 aliases: - /appstore/modules/genai-commons/ + - /appstore/modules/genai/commons/ --- ## Introduction {#introduction} diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/start_from_blank_app.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/start_from_blank_app.md index 1f76a583caa..b98c44ab903 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/start_from_blank_app.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/start_from_blank_app.md @@ -79,14 +79,15 @@ To tailor your application's behavior, you can customize the [System Prompt](/ap ##### Changing the System Prompt {changing-system-prompt} -{{< figure src="/attachments/appstore/platform-supported-content/modules/genai/genai-howto-blankapp/blank_genai_mf.jpg" >}} +{{< figure src="/attachments/appstore/platform-supported-content/modules/genai/genai-howto-blankapp/blank_genai_systemprompt.png" >}} 1. Open the copied `ACT_FullScreenChat_Open` microflow from your `MyFirstBot` module. 2. Locate the **ChatContext** action. -3. Inside this action, find the `System prompt` parameter, which has default an emprty value. +3. Inside this action, find the `System prompt` parameter, which has default an empty value. 4. Update the `System prompt` value to reflect your desired behavior. For example: * For a customer service chatbot: *'You are a helpful customer service assistant providing answers to common product questions.'* * For a travel advisor assistant: *'You are a travel advisor assistant providing travel tips and destination information.'* + * Or keep it simple with *'You are an assistant.'* 5. Save the changes. #### Navigation Configuration diff --git a/static/attachments/appstore/platform-supported-content/modules/genai/genai-howto-blankapp/blank_genai_mf.jpg b/static/attachments/appstore/platform-supported-content/modules/genai/genai-howto-blankapp/[excluded]blank_genai_mf.jpg similarity index 100% rename from static/attachments/appstore/platform-supported-content/modules/genai/genai-howto-blankapp/blank_genai_mf.jpg rename to static/attachments/appstore/platform-supported-content/modules/genai/genai-howto-blankapp/[excluded]blank_genai_mf.jpg diff --git a/static/attachments/appstore/platform-supported-content/modules/genai/genai-howto-blankapp/blank_genai_systemprompt.png b/static/attachments/appstore/platform-supported-content/modules/genai/genai-howto-blankapp/blank_genai_systemprompt.png new file mode 100644 index 0000000000000000000000000000000000000000..917a7cccfde1e27dce56047bdb58ffa45cd7cffb GIT binary patch literal 390131 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

      7W2n1eP8#>Mp9dv0Vv`Vn&(!pt*XZV}lf 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

      aG86Rddt15yaMIrRh;$Y1R9Ys< zH%sX>>8O^c>OQ-_EqymGj|H-0o{t3#2mSlNxKyN$8|%^OaTpwcQ0@xyDw5=hc9E8G zo?P}?jSZ`#z&k5;-|HX%2J}SnHAl+-_tRa7E(6q(%O%68ofm~V09PLA19!eR#KT_y znX_OVE@JED_tHGLl&<^B4i?X{tG;$5woE@#d`V=jS%bs5u?^9g$CDd*{4Q$f(Jm2Z zfEwFsf4HrKF+r~P037YcSHmj9F3}xjLPwI{_ch2m+?r7Q%q=vm2f!`ZCs0zP`p91t zXkYD$aDNV9ru4pX$*l7?uIpU|%o`w+KQBH>S@NeupRZqTqaYc2B2FgdKp|!3OX+us z(g(TIsnJF~ot>#Ec)MNqFh%pd$I-Wk{zKFLVF=dQAM|5TDvkU)Mb~;BL zpZhGDgwRUW$*{L+ff8Qb)ib!lv%KLt+RSM-=V=0{xDwLF+;3pB&V6u_4q5tPEX|gN z)y`7u`4P|G+h)pSeo%d?3el5Cb0YeD(S8c}^W%L$(R!8$o|z3-VMSoxIu!GCE*6wq zGp34e>S#YXNxY^z^D06wr1g0c!hG~GNAXA_y$bPgcau4ZL+J%)U`C|i*^6Df<6`xP zhQv*apCt;OdOq$GMTp>TQNoy&KbPoA&bVfd;mL2=fo+N|A=iDc0Taj2L=kzBS56?t zfQJ*2;H?m3HSpeR5ZJIPUJ2opked--I3%47anad2Y(3uSsC!X|N$X@9^Q(xEg%6RbQ%ACFf^9O@0CsS|dk_?yCs^qmz7-P5igF${ab6fU&GLkHg(qaW zZmzEX)rXpAxMX^aKWiMNaArHeK4lBU2h3hSg{27ICt)$+X_q4Q$ZIw}zOi&SD1+R3 zqQ6cNTph2z8oQO6WMT_m_u}Dj8qTu> zv&JhbTqFr;fdXej{zNWvZqlr)vG~i&a$2>1UR@l&_HA&lcFuD)HcgSrz2EjiydS5N zytG4}$*_N~8H=aqnwhgxsu;f$e#g9Pqi09q36E9mq@h$}3g1Ou{nm<8P1X>d_Y{{X z%e3P9>_!=5dH5tuB`&WjS4rL|)=Dsb|8hxO%GlQh{l3LP0RlA1#GlJrBa&uN00ht& zhgbry$49KQh!6oVh|2vhR{mjbKzP0XZ(>Mj=;ow_OvLO5#b`cCoflGaUZHm6IHaj}THk*Sn~xE5yvWJBk~>oJIHOmX=lNOcMW zNP20^Sbm`}jwwxOGa^n-F(fN8HogG}B|{!nX^F(9qi?vUB9GBz(InW!5>>v@K9w7}b(ogM7AY3n>L*LmY# zdVCkOa1xAA0P@3v`~5d5^W6yJ;!c!C&)NfnJ>p-HEXtzJ(FRM##Uu^uVTQ!$g0<0o_6Z}eRjS4Ptlz7q}=+}aiX#|_d*=& zd=NsJ1AwM?RJN19c;{&A%uj%r_39@>wCJ-&M{u7nGVeFA(DEx%3_(1~H#fmN?o)8b zyz33+ID)dJ&<%=ml8_NzkV}7cIZq>(6zbf(2W}oJ-T>=1x+hngjc4?qmCv( zbFNZvv^YwPPIBSHB*rdfRYxJQCB*@;Z1HVOfBL=Mn*B9!Mvyo6^w24!O?$Uw*c=c` z+Ua8S(y27>%zU?@sGZhJtF9xwGdr8Y7V@4N>{(^p*%W*;vv~T!yy%-2+Of~t#)|=b ze~(@k8?Dh=h(Tyw7_BkPBjsefIqL?^|GnQZOR%4T80+;W-B2J1QAh_Emhb~}&Y<4vkpr^o_J;lO8x91VYg80QG*IhDktE~y- zJALyut`k{Gx@TuBqBN0(8JS1zKiOLF%@h|H@-}fR@CmQz^GO#U8g7fM zzeu5k);`u8n05a*Br_-|NZZIG6-axg4q@{j(IXGTmnYV~PSjjur@`j!s%$!AIk&Eo zuaQG>jx(`+?hX6cOj?VCacfp_9NU{_s*hYrnb)C_B5Fs4$KUAJ>^$-F6?c(xa5(e0 zO*vQAvB%2&YeDLDrP&1?2liZLFKxzunjVi#s8TnD7 za{O7H0k>DYRWN?YP2t^eaeB$(BzHk3%f|9YrSmC~)_$b-=)u@8jiY}h9Di%8DDt*Q zzXpdo-Hv9*W)xqyzd0%HbbIl#j0UC!IpR6l)W0t@y3FI%Dyti_O0pPKnWNOLn~DzW z_C2v(yXEl7%AOCc@dL^eSGqE%JR@>!KG4cW$Jt8I^^vk=XUU1?3d~vp_cbQ-D4x=!T zZAG~I1zU3M>$sqe&T%vr+JSo>WoylL%b&|_|K9S{#>aydweq&}iet#zM@`EVE{92G z7k_9rf_4hIuh`(k4~X<5)uCq8*^5Y^Y{6B7QKqhAbxIa*@@=cRmZd;g7|HYz5AUR!uMIy zg>Q?s(QzW&H7?+SR(PcsJOiB%3$(J=bRkF9U;K2(*W0^Ga*RsXyBbyq{Xp@|AXaY> zzcrd`HktCcWY>9b5KgYp1g{J;>L!NqYL|Bt9P+i5nXm&~AP7=+RXz0L?Pz){WUx8lE}V_ht(U=wGpC zvyH5={c*nGKY$`?>;PQ&Oz|yBD++dBun^j+E3ofsVrDB=MbVnlREven18!lB*;^@R zh*Ht8c-kXQI`L?1y1g*;zZJQq%3uSM&5Oii@rz6RB>KnZLW_0-r$HC$tuVCwfz?DGZVuE%g(F z2v3HX`RQ8psBup*RM_t&U=|-KWSDW;HARkUvPjG(s@L^-f(hJ7Cq+(Sk+IZ@5`L8% zZ_r>aDciL_k3M%AYW30lM{L)sT<8BD{?ZX9ce|NqA#3#HM{&Qil17VpV%n-@?AOl^ z72OEE5ETm*Wk*O$vML-}uGk#AdOM6mBgiQvCkUr$$?uM^bsbYMQp-uc$L<|aSk4u_^wLcS zdMGMbjqYFP7j1(*U-$g8bqXu$gqV}h5pZ7tk2~qi>=To6;mg)yN!`hryJt^(qX`| zN=w6ftvAJOXQ#YX$SWjE)EOpj7@MyBrNG|2d%6vfxYup6MLzvC!7zMYb z1%yw_S#HPJdhbyI2CSBOc?g1%&~Tq!t%H|z!k3uTNo13=1?XN-8koOjcReu`4x49E zJD?tC4^2L!#X2R|vJQUjQ~$I1on(QN- z7eGEPQI#$$1OvuLtv}iUrs!THsAofrWU+m{@O|EkG|p425>Ucq(^OYbR=KAFO%O31 zj2dPLi-e?@=_E6<>crnnm{VaC*R_zJ1UKp5!SBuuB@ za^I^>SHktRdML4WHgt4QxTB&=Q2P{ikd`?T$_@cYEG=fRbH8WIGGWH}Z#os&7q6q} zb@jJx<51?o%$9i4A=SYm*+CU%cB7np`P44p&ONB?`A+iwwi5!_J^q-h9COd@ zGCY>(Fs~}yX5Bw|2#fPG>*5f5<0}rYD#Xp_MRzjHxiH7tg_O$2;@79#yf>AW@VCWz zE2`&+xGot>#`ENVF_H|pzV=I*GrzXuMpuvm(3%!oR8#G8gP5Re>eB(=pT#JoCzw7> zSgV5bjb$s3zATDvBa3vk%eCWqz(*H=<1gn;O2V8-ZYj5lbPDT@%DdFpOZbI@ zd2**I9Os$jKIXpCyCuFslybsf{!akzoUK%`*XGZ;o+knAxpkj2xC9HjF5pZna2`AG zWTcpxf&ZLZp?6jb?S+2L(=p=QmJpx=go){vLjcUPQ@wqb_VEKgGU`= zUK^pkW;&~MzRKJxb}QArh=H?i9=R0U|ND=8Mb;d8_CW~EM=+Mm!xaH(yf$ZNtA}kO z@$T#us?LTYnyH=hc2t7r^Hc)edqPr0{7@t2e$deadk?)DJLrI9K_`?Wwc)05{nf_C zz&QrJsFkf-P)-o~A7jS9a<>!*@XEQ`Hc*#L8khEhT0kd>k{A?U0bzyfdrBV}KKAZj zx#l-1hmJyC{ah~kppkhYglKtwNRu3r-)pqW$EMEO%*A`qZAQdxJRsV&HpOp-F!#Qp z0;u)Sq>Y)2C2ccrEpNj(_C4d4KQ8=225iCH{Qs2;3P?0@QHg`upZwCmAFt*qO{&erhs^%*e33yd?=UGS3ylA24PQWQH^gLHJEI_55z=ep+J-jbHcAUwSj_m6qSw0R8u-$kW=#>4Hm#SsXR5%>j@nEA*(b%KyVpFXpeGMnmbUD7yXi0=u~P%ts>Q9GBV1^ zAAt&5jjGzh&_lxAeHS@BJ)M}y{NGmdI~+_7V5rVJ=F+#&#kN&nvBCN2&r^Qu(7nC~ zP>|-CobT)uP5Cz*(SLr|1Rw6j*TGsdK`7K7v}ey|bt^+kd{s$By4r==SA1ftnwv=U2)YCK~}tKvcbuUIg|{dVg+jx>|+X>zBHvE0jlfQ%2x zZmn7Zenoksv_l)o4~HL{^0R+YJmq8l>d0qULBAJ&tRM}Q1nLUP%Qt5?oNM&QBduSD zSF><63YV@x+#UwH1)+OJp6j-;@rjXLx%S7z^Sgf$Jt&ooU=4V+r-;oq!;doicpg{o z{};UG_4(bU-h!F6r!3OF_qmI~SXc3U?#Sszi}LN)Y#x0aQ$GQ(`Mw(4ej_GN;T}dw zMI|jeJWoL|M(G^=th*#b@O2bDZQ#}9md~HBUHIF!ux?-yJMixJPPFVUSDotT2w+F7 zuB}mkwtM#i&izR?z-t64(BkKzp?e>F+){Du;+#?{)@v{*Gd)q|E|A?Rf4RTB>98uZ23?SkCSL2dX9;u)B1xuXlLH&y089 zC(4rG+^hdpfKqe*V8C&mdtU`5I=oayyT%S=-*I5e`bV?;!*^|6my`O#d4@UP ztu+`GCC#fFYnC4(_Pi*I|C=AN@P9pS?YDQ2WCJLd4f0iX{lyJDuw%xbCCTgnMm%oe zpR2Ns&+FgZzUoHe+bg8)MQH2#13i6=zWXkC9GYqbieU#omCF;HE*(e7Hn6Rd_0Uh| zZEvj&E^}h!P zSpv_}5(&ot-K{$7UlK;KQm^@Tp>DecE?irHKZ}dN8O7w}P^xkh8OnRxh6X8{O5w1i z?eBIm5}LpIR40Q^s~PS1KleyjNaEB4(&h?9n6~!F!iZr6#z%QDHv9>MC;*R_c8AJ8 z0JQ0UT}DtPp?vQDVHIL^+>&E)zcbSOpBxAA91r?_zTu!BR;;q;|Jt6d>&96e9WyZ4 ze$YwDy{U}?u)MK4MIwyfCVxMj^x$a_(Y7O(QN4e$M_zq*^Z&O1C2jPTtcn@ng$VP{ zgX0ev^T$L70AyA_w9#qtx9Nla*h5=S3~nV@|CdVD67{mK64?@cd4J;QxPytdTjtNN>SUchRM<)pYjQc3nhd; z_eqFjMK;<1uGQQ%{=ki2SO9FXfxV}vxP*QhCFXjo*`_6*stzuGYhu^0VStyIXalZ5 z!xm`HFdMY65Ha(uEI7NcVfJ^c`hfF2;J8moxWG$>othIf?V>?6Nm0^F` z*ZKMFU3pF}Fx@sOC-vQ=;_HH@7QGOJ-*OcT;5z%)M?{6YxmV-**Uul?*XKRoC|u|O zU|?rz6R3*{yYmR|u5a2h@R7fksa8U(b+_UgOYxhM+pS11nR*Ms(Y`zT8igpuZ;|f~$?t&l{^iV^rWQ0BokU(pXIbn1IwU&xCYVpJ*l9TVYG4Cj zMLl21V#~_?6IWUb~PcM>`0KjJ|RHIln8Fdifb*bHsr>ve^{1Iqydf zZF*r}GKC2XgOMq1DwjK>SaI1W3;Pdx%p91Sm^F+Kd<==l#qq0KwXl45S<%0v6$n&R*npmw{;No|CrTJ{>bo zihizzIfe=SAhONJUPuSNE+#PJkGVVFc6(Q2VWp!a1VVLFi;9-CD^@$(QWasnk7*kS z2nr4`!A#F88VQBZ7IzEKOU`=l&ckG(nB7S;WkL&p)7`&|iUN;>>Lf||Rgxch#UjZE zHz^wVO{q7+EtExuJfF0={%JoyfRLksL;{pq&*zBE=@~NLp?$VJ1+|d{%KaXr3I4LO zf=<1PFslL|G-)32?-6Qhu@9Cio7dQ5+7>_0sH0gPOQJv5Z`Ks9$nFi@Yne5&WshJn#bUT6!NG!V;0w{KN;Wvli}F0@=Na_69v zT4<5vgplf+Ol^a6v?QO=(4&@ko1b$sg1PpybVZuQd!5t!9(&l@+IoBUQ84GFXaJlG z#w^U)8jcPk8snS9rr1dHnm08+93uMenk0TcnlV|*V@8{6Paq}aR{a*$bUc-vUBr}% zZ&IM$%;GK_TUbsr7nhEh$tQ&EZH>;?ErqW-Chhj_^s=x#eW)cgfSVULH9h?;-$E5I z!`~n7=MueB#B53cMYRRx1RPDe%tnSy(u^vAzhqDU>^2Rp^?7ATjFfCwWY2RR{)|;Q zvc;e{$luc0S!mUsHt=yeO*w94vqCc0KG`Nnr)c@>Jre?}*qyNG+X4G?r*BqXS9z2Z zZ7qY_7<(1-$ArrshL;9n6UmWm0Q7n!+IRmd7+v5IH0mq?@rYtShxrNoC@n51SW^P9mugLWA<~P(&%mjcEl$Kv+-J4GrcvLaOf$rMye+lpo2QMcYN!p0 z@xUGykDDDI+7Z!Yc1K+zT8mRsn?;qKu|$KC|nS8Oc8r1Mx|LsJ69Tm##N zVzP(DD}H|3uZ=b+b{@ps$*N-C*h~h6;XXXT>&e{lehl&kX z501Ir#|_>)4cEc!c%aL%_^r>X`b=o#Ra5>QDntHYr0V7d1AsCzY*H;Hv<(|ltIh*7=|5GS0fk7-k$V`h^)V}1nVLm8#g zas1suMiDuN5|BKglDv`t0XR%ulR84N@~Mi^z9T|OVHbN0>_DoR9-=wpmaF-FleOhg zS)5#=Kcpx&(g;Er5Rw>G6mYJWU^Z|mf{5GC_u(`MsmCx9sE(94VC{#)0=RBV>DSs= z;Uw?5+Wq{cKTW~W_Y~S_=NR$I&$C4vm@J-_FeNlKsjQfnf;8onOk;uBVgy&&l<{(4 zVeCYvuO#_>@Ow*srof>kZx!krqH``(YZCQxKnurHcZey-irTK`O|3Q4i5vBA51j~z z`huUjJaOTKz}Zld{AWdRFT}s$FE9p%h(G8&xcgbng@ezL7@aE;x)Qf%O{mO`E0~`9 zzm)CbN3)Yh?l+Yc*(0-_*Gn1~j%kc0dKpQNdNm=MoSTbv=zKOvUFMwgLF|e9Y`ea^ zU_`3Ja^<`fRI$s)PX_asKlQ0qmDyMTpP{zH%p6_$36UCvaJD z5NT-k$UWF4_x{K7c>$e=}x74z!Zuq0twvmX6-Rr03 zRswheFZf~MAM@^nH$J)rz1M-$hHHF7_~2-YwFI5&(o;HUsh(+d8j+PGhRtizx?aBAKA`*w{PLfKz%#2w3BD!#SvV_1+8y>^kRWSUOrQ? zNnTUPfG+&*5`@gk(2*QVcGblA_KbdLD;R&ufckso| z>5+n$F6~Q%Pta!+LKRX=AqE+V0j{d5`pCS8+;;^|4IG%7GIeXfI)^*CyI(>ocqEEm zy7W}84oj8p>c1SEeD&&8N>y%zVY&ASt`YEij@3QcYm|>@P~aZ9xdQWA*`y4O z^hkA9Jfv;0GKkjKPrv~VvM=-i$>T@*dWq@R5C;){m@@zQ4rA_ELbz=g+HjWct}j^C z;Tze)`%p$@JzWyQ-ys!`CJH$p z$8t~4aCf;;r;>mqnc6|w zxzo(`u};zFq`ek-ZvTLpYpiYI2tNpuxl<`b%Hr!(KXt-x?F_yA<)+%<+N!66WAeESh z#^)c1ploKMiY1i=~hiGa^^Psobr@?xkbCn5z32x)T+6&Sllj1=VG%TI@{ee2BU=Yy|EF z*0Q_B6)3su1x@-my&S_5+Wz-MZW z)HIaMY({l64a3#ha;k-Dpc$@>Jn66%(O1V+tMq}q+;yB^@|{@%8-I`U>6-_2I0haY zJ>#M4w11m}b)Y=Cnz|wWQd}bx2rkoqdEs;*FC)_=9cB5&(K@(@fjkyUmdisvD5?4q zj!3>3{1k?igd+xvXdm&t+}TYtk+eRQl zyvbBIowT`r9~Ho7aPl z*Qp?qI4%Pj*(u@;!;7~5$E=QgdTaZo+SSNehI^r@GV>YA#{A*KpZt8)k%&gdLflJ4 z{tyJ29|S@AVeQj zx;OuB=u#d!_1cr-9Rt^GT->s1STj-;^z!)7&&Igj&ir*)@3wvo+DT~^A|3A3NY1=3 z8QI7nT@!g-H%rTRz%7BS{vEx@p*Z~)w|3MD`4U;x_fQ?M8LwCo-Q1H3D{6FSdqwrA zz|nj@ZUj>wbPe|@>fl~%UISI}TTsUdn@iMT16B*UGO!i-OrO?^KbR95f`;oY%-_Qb z>UJ4cY}CX?R2J>xAl@jZ`s#J`l+oE8^rzv+zxu|VALaxBhXwW`420=oK9DMX7(@G=xpZ&kz@vmWXdw%9D6b`VQEXK*Ie+HCuS0$>r%ONq6Yh z$0j8sdyn7185UY2BQ5uwCSr<;&eGe3%>ajRr#a!ck^7nV1cx#b!*nXjMi6!DgNg1^ z6`f4vyw|W-mZKSgJ<q@gY+X)GnwtRku z9OiVCSJ+W0vtA|RQeq0>#^!Lv`tgFN|28pK6~Ax1(JWh0G{PP9cGXuktHaK9@tYfJ zU{YWnv9Z^fIpGsKam0-9@?c1`QKI67EONPb?bzf~#T#6EzXbFx(1KWzJW-lO)%46TeN1*S;|2*AM^Qq5J(wTB{ji=Eo?GFq=ZTCdn# z+T1dwz(tCZeC%OqDc5}Bt${b2XpB-_w40;P#wtmHQ>?&aI&F=-*^+!!f%BGXqYcCf zqN=wGI##r@T zFgJ{r?=&4bOR>dF=a!fJHka}e8GZH%(JmvK@%QrafbVtz0d?}y`D=fIf1LfT0r;E8 zUc9=ZlQtim_RT{uXw5*wdHf2A5*B_wqWVgEu!Dj9ox`_MeCgr4OtPnD?FbGkhF`iK zCbi#DFOR24Jqht1xm;*?yjX*s1P^rXx%8=EPS%J_i^3C z5r$ zM!O7WsutRS^GXgIkqp+W`pI|j&+AUV-S(b@G1Ji+IPVJX`4}pV-+|6vvlM(BPw- zYew#Ngm)jHym$wPq^j<5cCLCA{1^dSR#vtgHI?JHVWYbaVeO#k*`~h3+|dnxnHh>P z>++FEB+gW&+0JkTjMf4&hu9Yk(k{kQiU%ZXxC*0^_=znbp zp%kg}hpoukO}~Yk3K^EVFjIy+o=;VPPzO3d}u`F@n!h2i1U}|Iy_L8Ug z%U3}U^U(5-?rz(S33{DR@JV(-bHf#4bRHil2L1cpEiN;J61T4RIl+s_yKc`G&0Fn{ zPeGb3biKrJ@C)>WNN=pN;h327aID$+^T5LO>1R20N=onIiKxRnc&K-~#?(lD%$(|z zx_h#1a_UU4_o)5wW<({_B1CpE-|pqgQf-(ezdl**^e=ayL}gx!4WvCK?nm~9vml3^ zj`JCOaGxE3w2;rZTvEM&TN~{SsRv{dWc^gAv!u^mXXNdP5wajpHj@vSSQr~8&8)#_ zC^gsQL>RIMgUK}Nq~OFbzm1$tO_S5|o{4T_EoW|7K+{z{qeIjn68f>FLSg5wXpq30uQVSD8`k;3$wd-LzEzJnJ#C+QTTwCi+Lg*h$z~-nNy&JHRJCS!s&k7z zEb%ZrZOAp7^z-LW$miIeH<`=l$T2Hd7->(hke4bpmj^@Z`*|&z z6MfcazfuzP&^gMafKV8O1HawKbknLnu@%opBK9j*auDGlk~fzM))R(_(m~xQ{mDuE zpg!+zx5didwGeY7Dx;6*U&@~LuQThYL}k+J>iP_XE@j>hkNH=6*bpfD!i+HEGvl?{ zAJ0ZlZOPcb_H7BOMWz*&tVGB$*Qff)y!01EMJr&ch2I>zAJx>T%;xB(Z7uetZCqSj z`?!m~K4ZsMU{wU^z&Ulpb(Eyi28Z&0*N4MJsif=c>)#q+bSODXWLQjx4&U`kBUWbTM#NpfX1_~2Mm*aEZ zd3C6&QBrs)DO_BT6VerlLzokQLHm`(&w!Hz1%vhPdu6)w%E855SXi#J z=W&C(!$Yhw5Erc$7aNPQ#m`yzEn2)G#acLgm!nVZ;P;)~fBV>G=L6CCPh1t1v$I|? z+ZOIZ9X3DVsYBS8mx%p~9`!%ig{s8z@QVC7#JCMsesU3dX81X#dJwPl@_V_)>tORn zg3hU79Sf{XafLMdr=|pQlzgrU5!-q)VO)B4%I#^_?r-l(j73hCtS2CdDlQf-q%ZP) ztBS)G!pnHRS5+TM9SHT&wq#@%zrD}f$F{hk{-WvOBZL^m!z?IX_KkQwu~A#x+Ftd& zLWhL>eu#~}`!wGxE2rzYB1aZjQ*4XYO>&4MPfev74_>$>u zVySFqBXIL43ruiOBIlmJn$nwE$~80X1CPywjG(!x?J+fI-^Gf z_Zn0~=uRjbM6^?Q#d zO+%$H@MREqo85=9Vn!ZNY=qy>M=VT|?kx&dWbe(5rR$drVDtYUXKw*k^|p15D(kcGu*5kR?^WFD;@AtpY zdG52Hb9Bf0tu@!2V~#N<3TlL`>tx*2C&=ym;?JMX6;dwGj}WQ~ls3wE4;B_!CguwTwe=EKfO^ zZWUWbuC-Q}maKuX3Dr~K-2r2tEnXi^E-pVBW7)~;WMm`njn8d6;~q^5pBSq~W#lrR z)cpdaMEWrQLd$k!Fw7QCD5-re$0gVr3xz>8jVcPc(oEZ;zc<}G_Al4b6guTQS^?Kx zWbIp_<8PvC$ZMJ5rW|pAb>~ z9&LV~T39)o=ynj%?uw8&Z!KQFH+#!)r&1@IAb!;Citdj=TP*y%+EwuETc5$#OMb1F zCtg3k_LQgSLXNqX`_>p=q3ziN$?ZafyBc4-V%&H2`(CYA*Ol`ox&K}vZGzXiIoBE} z+x7JHz7R^htUE(10`;V36Jg|>0Fw)G?&@rbq{FdThq4{}3C zUfTM;@bh7cDa{fHS0ek8!}c8vPP6yxNap^&n$cC_s&b+@|NCYi_;V@-88**^J6|Z8 zO=3gWz96A|D`E7TWz+Z%PW}i4VaL#r$B)&m148X>YhrY-T@r1BJd-*5q;8f;Dmvck zxCT!XJx+2)-K=MpW~v=0*%Dsu75|EO1qMw$|ZvAUfYRf$&8dDTiYg@g2Sd$cWM*QKIC=2+#Mq~}@&6le)0{E)(OL|z60 z=AGmELLO2(UY{JE@>Y&)ODI6yd-vc#^Nb$%QO?yJ_DpuEzsg1Gf_>Dt-Xj<#q9K za+G!uf=+bS*Byba$A%zIuJwXuUGzXJeS+v;f5BOdqGm#q)u*Kw@Azzv<+1+TTv4=$$-AFpL(BAamHvdi7_#d(K7n&s$w$sDG=oBL{A z_e_!I&oBK*{=M~Id!xR*BN9S468Sb#CLQ#dwk+{K6wyKgMXH$sSRUn80>++^?5$1T z*VV-a#fE`ZJX7HBzYhesd*5;6OTH%r?GjlKCnYK_e)?v=G!vW@5yT1?7A%#+Y z?h#b|09gvfwCR1YpPXt6i3xUr&M7#B|5c%AhD0Y9b*F}Q#0i^Eizj>-r){u-Oh+aQ z)frapd4B3d zC}^u+1vc^4gci$K`1Ic9L2A>+Q{S`i!IElwq1#hP7{)8`@XQ^ZG&VNQ%*^!mMj{Un zca~w*c!PO3Il+^;0|elsHD07D+REw)-{*5~9l3uIdr|4JmrpZQAxsYkqAk16FrQJ2 zeM-X7yQJ52R7HF7F?s!~i#_dFljD#5IX{ItKZ#czO;M8m-Vm>Qk+~rJ&<~%!yll9F zQ{qs@bks-Db{Ab+X*d6GJ_vv&;p@hhjumyLM*ZmUTr(Iy1HjZ?dFe z&2G{A;lu^ry}@#&#PH?sJ^K1NChT!8{7iB*T_6TFDIs6|^`D{{Ab5~Nui+l~&)!wu z#W+--2RWxWqni0%8HHk$hn!t3+?yv#vG!jHI5rvGtg)SE8#5AGXG$K&`;-zz-}=5S zCi(NoJ-6xpT!+&9;lT5lW)&gh3(iaTSD36DQ8DokE)DpB(%A{pf+{0yUW>NLC zYd`9_+pKq0lz9^?t@Os*-nLrByfYUcFF)@0V#M^x_*U-Wwu+tV-D!5B_r0HRrys%Y zqLJC~LqA%+a(s1I|2>}-LmCX%wC++ECI-MBRVUEzs`u`7d=Ky-ySPuSB#d70y4mM% zOh?M#Jzn6}UawIO=dvn`FCXgW?Q>dQCYyVzhs=vcBVRbDL9Kt0ZH#c=eeLYy!5^P= z&OU6K(CCJ2_LgcfDX*=ZqT;<;Z#^qP^ zfwM|C(Wlx_y&VCkg)V?s=97KAPmT|)c|0cT{X>XZ^(&kf!L$+R%fKEvNVNd4p&GiI zH5O^&qzRlpUz+Ew>kC>`0)7}|A#39$&~_wVkEHXyz4<#iqVV;n#GQYa?Vp7yn{^F- z5-LuqTw)6Rw*Lx0Dzzxyk%uflfF zZoTIHMV7+JmZkSA-7Tf17MlPcso9XD`=0#-mAD>Ee=5%WXEZW}}*IzG`F2Xlto<+5XYM4Y)^5_`4 zaB`tTy)#Ri%lvO&;S?ql#()1U5RtqP;#Y0!@uy(K)e`EE3 zzv!cYgjZz^mG^x{n;8sFMN6y;tpc@w|K6}>z$j!Jzz00qT}54zOhfJM?V+jizjq%u zH}}txT5CrqKWE8U2qg=^dk%+>`M{f!u+>k|GqRoU#mSiWvZuH1ubCxm)n|dx+&2Th_cP+VYkn~ zGl4gfRWuv>`@x}J6mb2zp#M(l|9atTiJM7`aCLCtn8KYK77r2fJ6L{K+kC4%Uz?cZ zM)>&g8Gr4orlSY0UF&Fq|IcszI(IqPH8AV37GI1w>MOcl+7dVsZpX}h*jiDtZ89hS z$4-}xfFC9QS3mCWvkdhI2CQYY!%g9NO8lWRB1;GgHY0?`(fThgDM2*7$@ynA)r$WW z#s76Oe=VN~Hw24|1e*-F=NfG3QKvb;koAVp|L|)hPn6ab$vwH<=qec>20zY zH7+YTw<2(EPv7o@Q&52@j*E*U6;DV?ssWxDU_+2sLUy^o|6%0NpE2bWrdmYZvFRu(@YZ;`nV8H#(S7go>QY}$e=uap?{96*TOWHT&<&Xg zBxEPuzxqcoK&^mC)cIGe+OOI%h#J9%6zG#%2gfkWX<#7sC)f{dV;CNyy}aE2PEk=& zlr|wQ&etC9FlMRyskvU<=FwQLWfn9|x2Xdev6`hcGt-rkq1|V~q>cC+0kUNBIXql` zH!rZt_&^BtL|y*zM0X@1^8Lr{TL;;9%YB18P?4p`rR9=l4K{y}LX^qH7(4tK&3!rk zTZpG!YU(;OP5bj{Hm?R0I2m4_Xm%|7e+|xzW0bUV=(!X%O0tkG-+3|ODjR$5!v-*1 z7F*gA{y5mtwEyG5j&#=BK!s?Q6(Jj!>%#Q{b)gx#I>gUE%KRDIQmOvSJ;6AJx+nZQ zL|dxYk!(2j({N+?8yAHCd73kSEs9n!dPPMAxN3NQ`>0|)Qf70NghWZk2FT+NN|gz1 zl>1hn;0R?t8-T`BlnOXZgk;~!#YXWvVhw;r+nV=C#S(()?3n*HPDAc>iMh%9x6Kx@ zbQ!S|NnacY9CkiAxBqZ<8bdFDCG%m0{gIciG2L>-)HS$7^ai|!Rs_8L+#ZoCBFb3E zo9sBnCREH7Mx z?Hr|&G#~oxnb`cdwaWFW-G!*V1-X$NSW;RX^>%>Ht3b^GiA$VdJmA!JFF{+eEOKWScsrW9`0!!k-EF&4-*;L{EC&GNLYr68?$gJF)$fdQl z=d?wTr?pme2QJMn!TR?iks5k#HIGZ@w+=!{dF!+AgV39;MMcjT5m}24K)*%VD3)T0 z;R+#_%W2!JtlZli9AEqTcA&APbunu#_qs-~`U2GfVzl%ePjF#=km>2`?@*Ytxp_uT z8f$Fs(W&Gn+NFYm+gDVO*J7VuyX7zgf$qTb`VaY~qm%u8zLQ}`OG_CmK|#Tban@#L z81;jBsZd-Wf%AElYVo_d_NYmio3o7NV#vO?=(BaCoEeuDKU#s^w2MsSL`9i_@>vY!pH9w%&_WdLI@#)fZU~cq3Uqj2i-I=lZ@?ASw zfoLYkT_CeCt0EM7Fy*HLKDip-No>}TB}%Myir8PzF)o7#W|hNx;QRt-dBEBkk{1}K z19rn#5NY2&e-4~?Lv>*yRSZSz)Hy8G;@r$g`Hq@eIKSAAvYqcs>}!w->IwE&R2?m4 z_53~^v;S=cdC}v#_^}}Yxv^90xf7=6`PcK2{pX!^oN6p=t4KKuDBwC*daI25u8@{T zG1FRR$R6q3wk=2duQdASX^W-#Ro&TQisgE<)KNVwF7U1Bb0Vf75?o#wuF#TU$=WiM zoQ9qT-7<2u>o|Xkrt+xr4flnT;$pgV(3Gnd;TxHbjE;t`J^&N)S1L=;FkQ3RNi`Ac z^tP>}M)g(c7z<7*78fq5RyINkeo~M{w2S)2Jultkup5T%B6#JRP-)0n2Ezen|M)AW zqil2Ur*2e?SBN3X%!JyX{h3_SqhM4hbjr}FG=zx_@C396zIl-|W|RzPXk`?#)Fc2^ za!90>l#EPG#%2sKQ3r#8wamKs*f6{#Gg{*T8l@0#C)uFD!AjS6D%sW5f>a&#y7hi+ z&_kdsF#dF@Y{XreBh_5EOb=fap{W!}sP*WkHex4B56b2X-#&cQ-G+Vn;5b8{wxOU@ z30cy3d&`_jk4-=IZU&TrM#of1m)Sn8$c%|Wrgf%x)f4oEUM5zfj!om=+%j&Ncp?%Lud(Kbncn%x3$&PSgXFx3aMj_aF!o)6p4*Q-Bcjq%dop zo16Q7v?nX{2;*e)UDfO(v)0#E*4D?U-tXsXUtiP^gQ6nU8iUcUuCCG1YXduTs{s3{ z$y@}AXBbU`8LQY{|F>@i?QEGU26Gt-i7GN+j_;^#HNID!iWn$CvPWTWoObl~*lfAU zE)EBK$m-q4!SI$Dt9R8zQi~8?r!bP{OW*&{BPbDZcK<`x^y=IQjl-msVa| zAc#AN?e2(t5qQaNRLXC!(K){bK`2Kf5C10bCuJvkmeY;h+6avEdcuwD%UdWCn5eYhusHxX9k{J-+zv#p!*QGr!)-<<^1uYyyxW{)e2$6| zRhS6g%VoJxVWF3>u|1OZW+D{d_AK5^_QcO4BAm}F8r0-00Xbig6X`&LjyO_NlUBv{D3umT0p5+Oos4UvRXS`9ueprD%!Dsr@VJ znpz|!B-nbiISY=$m0p=g91LM)Paf5@51ZjV7@{NZ3%EIPKURwRo0rv=A%lGMBf3DK z1w|Ns9U2NoNC}XGKiwImXS8$@KA+pB34fwDxZ!TZ+3X*H8piC+#1ZYP#I7Om!5$ zZpnNCix!zC*vToJ>2|n%pXnNqfu++Z>*HDio<3F0x{Qu5J%^#>$FyF7`Pz^=Lc08N z22-vtkfngh6zd`Jey@K-#)|oYWgbknQ~|fcL?JJ2tQ{|Mhmb%Wt)KvRhL&PvW|DPk zlOCW9QBB*PLND}G@?F+i}M@iJLKONB#}WE-qjpt ztF-1y%k^gB&k0&t?{06u67(R#oQgbu^?}62O|BoI!orPY^=5PD8?xkHV4<(^-JkSM#YA3a@(gKZ&c`)gB*|dA7Inn zI(4e(r2wxoQNWYHah21YrzYmM&TF3e{-&&qc%5JB(&jhru(k2pd-OD&?$Xw0#gKU` z2(k!a8EI;Kvy1Hb4{T3c(v*YfOkoMNp9FY2TG&?XuHRn|BDhJ^5_Y6*)mnk4Jyx|{ ze`Lqf+kRaFvFBYH^&@z}WBKc7s@Lj(rXz|u*g2R7`-RBH%xv!OHr{{G^Pn1e@I#=V z1*)((1QnVVesf4vPi*)-zNSY-A!nl1-hX9##9r~1woVX8)^W?Ac_@0 z$SiCQa2qKpzzqVQY1`gsF~q$M6Zv^&{BoDGX$MSbFLY@sa%qyBZs;X$_-4>Dtc&id zdUyJcXM15mZ-N{xv#FF-XrJTYw|SNaMufM&^-5YT4hmviAuk~`f><>mWzu?U;QE_L z{1$?2Pz9FtxsUi3{>=r*%@0^b5}xhX-3fR_Tfxn*=`Ldx+Tl|e%R*yxFET66KiyBv zk|pg)YFVjaM+5J*BZman=S~@tCnk3h{kb;aaR=yVn5K zgSh7zC8ZUF+>+EE{I0IKv0evMbB(m3!IDtp|+aPwqaD2u;vAKA@b#bqTRQ zcLB?p)b`fFWW&>qJ5HR6Z^ByGPKsJ`F);Q)GnM;E=@rkE@3MP{^~SSUUX$@E6&W*( z``4aVzI;l2qWv;iD&S@=*S$6FGZtBk5g)LGA9R*9uQ2RE)B)2QHCKXylam)+ir^=S$-iSTw8`BLHn^@V`uBm-T5!5pqzi^ zwu_k9xK0ezChfj)?0-O4Ob>qH*h|qOeggqJ7LImA+Cdiu3!B*Fh#WL$^rYzO)t^z* z)UZ}s!mz_erVFywzDF0{<4LNWwhAK1Nk{5SXJK11O7dyzWSQ7#avA4lR^*A&7k&+X z(O-eZ<-#EOxnd13Q6s9Wym0gR^#^A$xNw6gb$9mm+9c)D56)|~EokVpH+E5*oEEI_ znPD+mLw2>weAV&GyA*DsZN->lV6dgPEuxiyI54N}?j5e_JZ~|?O9h}e3Ih|8 zUQl5IyuVR0OW-0}S><@Hs=sRNIGsDgj4u7Ne82z2KDKDv8S$Nvr$KAuA!UR6cs>48 zrLtJ<8$&dzzQq^tOVWKm`uO3KbygF{iLCpw*~#;%1i!*$+7fN_!(^6OORUYcdLMO~ zs))Z8;xKe=JXcHld2EJIP~%$fiy&=%`GN{XZED|e8Y8CIG}xwT5}T1C?FW=6xY4g@ zPGy7(Md@EU!?Lkv<|O+?62?g;yt!&o=uzk0&ZFJ)mP?giO~TJjy59Z;N<$U)XeaPN zr;fxHuiY3^89GLnitL-nCI5pUvd=j0N--*5`QwiAt0I~AAO_ZcuE?)@CQOR^LO24= ztKnKo;QK(pcP0YS$cPO)&iKv{({6fpPepS7UF(MCP4QzgukuXYG#%v_4R86QaD0Sb z^RHSr&_)Z-MUw}Qm9hWx$B|<5fV@7@kcg-#XLTzZ`Y`skaB&-6Q7gg$?WsmZO${-j z51Pef<9l$e_p3nD>b~uS=(5~ZGc6Ony)L~hp090+h#A7~*a_BRQl+K5r(?EXtNU>3 zgppHtO1!~Fw)beqAM^DuQ%nJ(|Up7^B+1riNox>fH&R&C??(W-pw`pgTmgXtb7OUt=E`VLl4SM0=Z? zQ^K;0di>aAITk^ZXTo$Q#+g~n8$UFfoZPpwa}DuO`dOF=NMhs)q$+U&-0JpDY`gkr zSwi;Dk{kc#?~>au&%0Hotn$2Vp5%?EDEZ7a6Ohknpp!B(^3ot(Ol4Ku3r9+vTdsgO z=3Pl+P_kiL{D=O_*E&QWJ=o87Te_jWhm!yMN~5&-nNcb-r8i^+XT#~|wL;3Ztv>7V zQ4^dqi*GAI;+N|96!G;E4Leb(Ood0H89{Z5ZEeh-7;Pf~HFBTGT>jU9v)ct!;PVkk z)`i}0+!SY;u_JJyp1udlNO;VT*eDVZ^Ei!5B|uJ+7jm4FlaxHySfIv0Q`v={b!DK` zCPBp#a$~3%;u+QkzI{*lg*IJR(;x%i#p=mUW5PgT3m$tTc{jsj?J%Be+Dwr&&z(Ii`)p}Oz%Fza) zQ``q#FJ+Dwh}7Bp4wbhpXTs5`bg#v*2{)40hZmviW?(U1-uMcch`=4OR}F{{cd<)? z53KKU4-F4*^tm`Xz0PJIws0>j#`EQ?(|Z~wXWugNIm9^Al&WMbESxm&l(yyJ8$>l< z;TkWizhCGF@EXu=iW6o=l;xT~kUQb9Z+F1sk(IRdt?`weGYKS#A=y=&K0Qga_u2@0 ztA~jPMGnKM9g}W z2S*U5fp$at8%QGTW%3ZGt!4#R+8XKbf*x4XP)FC98j&$DhSXD-<$sa=o+sj$AuXeM z`6G=dU)S+S?uZdaSGlhTopQy)MS%+(7rp~GTs13FWeGI&aY*+QkzD8NBN#~@l&xZpe9C4TMoe*Dvt3Yh?P zon!1RU%o=yflp7uI4=`db$x?Ei7p+jd(uw_ZY- zfs|`zV_b@th`)b`rcmuNY#NQWhnq4~<#$zk>=M1E)kQ_l1iLY-fUp+=FJ@Hagg^G@ z&gK`Qy)6hPoyB81-O{z$8G8&mY>**b^tgp>WFw6rCYM!6S3ycPrk~(20D1WCmk?&0 zXa%jzIOuZ73p0uTFYf<=C38;%@wg+mYgY5q$t7L~JC>M+E8%aST`gi_+VL*(@BJ$C z-X$v%f3+vv+0<}!bd35!E_i9HNQ==%w0H_7%hA5K(#SWuKNcLBgJ1VlN{=0Xe4UAY z*(id5#|&YLkZsxbOjBvKe2jEAF`-6q;Wotl_$gUZQAAhLalCRZJRu>&*%z5ioLKWa8s*Wwf{GLx?}99@=DoJa+b9w5*2t5=V6f+)O64Rc zBWr9sXV{Yag*m5oL?G|}>8qX4$IBy{yy>YH@all zfB`W|IIEnMQyQl?gw$qt5;}sz_%rHxNn&H4_Yp-}3VD^z<|`GIDT$QRXsM zDAC^H;vx`JfFCfzH1rqbpE?RYBtWO*|IGA}<>Eje1qZl($>JZIA+5$X_1ik4a zZ)mb@E4M7%zLk0929@@^D6`hsA!x0@Dp2cNeIFh_L4GA^U3wSJiOqGrpYhG5F0(g1 z#+IRmLO^`|Zg$!DMjE#WARZeW!7CSt4Vx1~M8>R%Y2!K)cy$Da`}$1HNF*CxCwfGa6u}2xtb)KFLOv$whcD3EVjcM9h+Eq!-)*MuYMXXnoKbwy!5^6Jn{A?CQB$SS(OGXQyS z`9ls3D20^nbZf()w!kYvVn$#l1kh(QsZMDJTF{H z4e7bpji2`HU0|Na0$!L4kpyzb%Ljfj$v)WQaaiZ|-(VAb9Da+Kn}_Fd)u1VKLkQ8g zmH884By&SGNY0fiHx|2~OEI?XYcV$$IW{u#N+Dx%<{P=y%DL#N!=$Fu5tL?_?U)?z zB_Z3WbC3+xdAh$P+J38pxjs=#$wGP}ybs!&?36m|3lw+S%~iFynM`@VaP53NNB&x9 z?pXz3*ZWV|%HV%+N;~lcG~_}Dt%Z`@eLG@I%uWqI*UZ%lQ^>gIHcO}*ynb_m!fgcp z==2NRWnYWvz;DOUU)ui^={&la3BcQyKrzc*WK%L-(tHd0@{tf0_dHqI!36?Q=$m~O z^_&f#{O(F*X@--S>mfYg_C0vbqZ~^f2(p#Px%G1S$$JnO&*?PT{X~EYVmv{p0!6la zcQF!UUkb@WzNN<-~^cuu4Y zZ3GObhh%upn|rw#)%4m0sA;QHm^J5XVq&63DR7#Qhchh^RGA_I%h1otrWF3jw&DpK z?D4@tdIx8KgP^%u!h7CBCnZtjLSt!fY$1z+W@+iiAdX1}taF#haGh_3NrCYWqSBz7 ztC!3RM%_W5975JdWVnlxkHvvjp`DG5p#8)nittu7re!0$e5YWQ?5wP;oSe25C1s^A zuWt1W4Pm*1XUyp6X!Lc~>qbbWdT7Q4(Jg@ZA0@521pNS1Io)nakvujw*7~R}F;{=M z)<>A1Do)OOfAXpJGH?>|v`esRu5|}}r9%hdv$CU;1xpNpg+^;#GR&^e$&qbsk{U0* zuSy&7{(MZ|Jq<)A{V3xX1|u$gLFupuM%UxQN#oq-r#9hS9z^Ry;wmIDG4jEz>Q(yyICL z4AtxxIArCM6ytSU)nOE0isjiPiV2P8Z{Cr3gr{CpMpEx%A`=L*tJPx(ADx zb%Ar0t`LmZT5cvcULZoLV8UKA3Eu+iJONz6&Z3d8%y{g+g|_9LQ{kwzF!s5L`zH@d zSmOsbMHep{0;Bdi^>hT*uQ>1m&$6Q`<{ypN zuTT|&YW^#*{d}A5P}nP1x~Ml`6?(oab2-aCZ-HirC9|zpCG(S8RzPxoV$kLqUo8nk zGrs^XfJ%CVozLi1Z(_^qqdw@Ozy9Xq!5%#57;tatoBgc}{Kc`Oc3xipC!_nyn@C22_P=fSf@R|P(-vaMPa@J}h4m~=$^itbV?c`8{Jgd8p3T^#feG-km5YpA!Z6o_86r!RG!WFOL zbdJ~`jKLlFqbw-Spl_3y!D*9GP!oewL9SMJe}7qQ{E1ROJSNf6@74mqgS&>$=d|!r zg&|C;YIn#=U@!I3?ScSx@C}*LGkERCLUQDgV%9ub@&5KlX_A3iTj1x$yRrVWSETsY z=ly#J30?z>5~z;Z56zyXp=*!;Q$(AIzdi7jX4Eh?sXlm}sL&3FyN&~I-p_2Pv8 z$q3*VJsVhhV5?Vg~iR;S`oGVY2AD8 zc3IIG;Eo~No&T|A1TMq&cPRTmNrJ%EMDZ410dEl)$E`r&1_q4Nm47l|v_yVyxqr|- z)t=N%MLL6=F}icU!DU&$)?3iNEZ=(IyX6-&*JY@UcGP{~~_Z0u7Be0{CE3ukb=?Qik^N9cljj@Ju1!VAIj9`A+kqL14z|Rz2JRlSE*~ zU8f&{8V2%{5a>ziSGq9U4OnzH2ZLto;Y<1UL6ciN>K9QYa9@5(Fey!sJe+ufv-GA0 z$C!IivSh(|d=I431VMf(mOxXVC3^3^W0|g2?kb4As8;|DHg%bc*w{?$Xy@*Mb{ zq%TbK|6rtjvj=g%AQ<>hD;`(E~R~(qy6|u`aKWYNwK>Hl~`g(u~4v-s* z%tGhgfLiEY@QV1aZ%3Sh9qpX;b5Clpdd7S(`J@Va`_n)7_6OM8i45^5nl8}FqluXj zdtlXY5TPi9U{2XEe2Fc5xR3^E{RQJ!CkO+CtBJ{*oSbE__j|vz%eEcXH>3SS0L7cL zgx+J#x@64G#wT)DC#NcKT+rYELp9uEZ1hSJlW_1uC3(P%wTpt;FXu=u-T@GZywRTSLsdJE(2%wMY%hQQ1i_9H+ zB9Duak*n=5f6vr(igr%KF^=LbL-m~5byZ|&TziMl#wRsbg-i_(`sHY~JqERliNjbW zK=Z$}_z;igb`qREf&b(50Zn#It(yzPC!jV#+W}3-Z0f~EEnC_PFNNfYQ*w2j_cvzC z3L@1K&~DS<_8YyFuIDOPLNXT|_`W7mHz9dd$Z&Eqb!?f3*YxoRFW z4&EP4{8`SgC;>-w#Ajb;kr1f6E@%#8#*O-?k|5i9a~Z$^cPLRh1x` z9;kQb=H^1lygC$&ZID>rx3bz2P(&58z%8@!N>C+22WN!a{QUTE=o#1)Ie!$eIS>fq z^oa=0jtBO{dX1xqoK{wh*^_Siz+wY;hW4q~qEdJtdWVNmoyF5%ySoj?QcHw@vjSCh zp}Gv@``H;8pY9rt8l8ycJ!1b^hIkz=W`x)6eFvId)+zi~0&Xh!6cm{q3ioYo$7+3Q z--ul`^nb)vnwuXZF#Bo-iix>7v-Hb#Nk9zvO7SQd^B9Rl7JPY3Wz?stU>q&fI_vOO z6=kQ}{*zH?YhfW`3l$YG?ur=ZPA=mJyR2wIKXJqZI0}p#;HQWj90YUCKrY`j5nO5c z@D>w0JJ!Ob!tm=vTVZjsj^#B8;Xje`SpL76Smt5?Biw}a|b&)sVStiJTKTxOIm z@K%%{Q6`hBd^}f21G(7JkvFU@N1U2Wp4R)jn?6UYW!>#RJt_?45mTH*I*v2$N&P^s z1OL4@VW*uBw^39pnEb@ro%GY;=S-iH4Ak&0&dzcE7*l9kErYpoErusR?`BAMSsS@O zmR=%p4f-7I`(W3qfKsDdNKj$#v@LA_+hHoZcXg!Pac+cVjp2%f$2q>sZNIqy-UeGu zI@AQ1vELaR(DmZlW~t-QO-hwzxOsUi`+Bq!aITq{y4S=-wdcpOojF@?DSwZy->Itb z`W23@_B)sPRxR=v6TT}ooUcb&ir$iEJFKaNEtRh3<5MdJrl42yd~tN&6if5~Q*tKD zZ?}Ro{0jN%SDJ(yCES%HJ-O>gB=q6U7qvuN&fFHKpvqkZP(Lmku&QhO3;7$dp!Sws~ zs6V6z*I6L9$q0s24W$dT9RTVb%hl-fI@;RpL=+w8$UP_A^c@`?`4h*A?-R^aK!;XU zyP;y{Yd z#gPgbVDc+%@p3NwJ>!qpT`*WcAp-y{%4>0hYa`_ZjODQXXoG<-A4}J+L%niz0*Iy< zmOK#O_TPk->t144vFUCfdpLa&*rCjsf}JROX1cFTmg~3|F+EIB&U4}qZQ6sKO4KMu z`FwoGtXyk+eQ9Y^0LP&F1{9eq_j0RbuP)GimE#o6+v)030)iNP%WwFnmJUE+a^uQj zW=6)%DAZP@N>l)fU&;kw`1Y)^PVg;8&`onTjUpVqNqYEmW(3JNFwi-w(B0%70n ziCdfKEbQz)(G_H$7K2OPpIF)k5*QTfDuc(tA|WBs&agUK*}sk3`v!c4WX#4M0}%dn zHtGV~!# zO=<2pgeMtFG6(s9Ocq#z5zGNSXu=nAl!%9@wsk~51@(1b=&ZpPK`r4`9QR|O9oF{+ z-fxVzPZbm{IGAGAh$==>EraHW8zK_%#k9qHKbC!L6y9){16ax#M_*x;mp;wL+@J%Y zFi6j;8VJdb_J)O{z_uD3)m~;$xR*cO(!=@XhA4)1%hPv!>g7fE$m$>3)ot^8O1OhN z?$>g#a>-JY3Ba5a?A$`TiOv}}@5X`b($DEHMw)pR%YM3lse+`4hSssF=aiz7jC9(_ zDGA(wGxdv3+Tl%cjMVQ5?Qdc&dbwGCz5&NdHrnQjh+jszgl#&RfM zgn!v11Dz_qa~@Sew3s|6yM=E)VkDi(Q`7ioA`S_Lq5<6PAXWSiW@}(&fCABs9Rq&6 zx?Vd@i=BW{aIpPUaCE`dVru~GzzZMZOKQgO2ygQ)~` zDEd&Q$)8srplRtB7mGN$@$yHYxVJ;SeLX$KHjj#C$TMjH`{Q;#J4lgP(wu68;t1j} z0Y@;`xeSTm_RB0VY`}0#9*4dHxQySUoCRM4Wzixu@KbKC$R4DBH0_pDJ`jwdt)fIB zk>`Az&#QA<86b7c(;IQ{sHA09et^AgZX?_vl_5J0>XFwq6Yr9{C7H{dN4-UTMb`3@ zq&VxJ_Q_s1PFEzvwWm(1L1qhVL;N35A~2*Ud92+E>ejXcBjc+lp)!%3^C|HOeW$3l zLeFK20qbx}V8eWTkNxp3ASdD`99PmKgEXzG%{#BR+0j&^gP(DAYTOg(d4N^{TmA)_ ziZT}s0WWSe$IF3x-}~;-r=w`S2Wlf^pS|CXrIkpScBN3M0dVf>M3Md)sV(YXD6xjJ zy6gXOcrTMVpaq=j${>JTQoR3ok+f!Al$wW>k-NB#%Dm^m_>vWb^e-CcC{rhp%!Y*!6UsZqViTb`@+61em$U_oO!t(b7T8G zS!Hf{eTC+UC&wp`2`($aScOFX*|l`=+|@0Ig>}0^H}}d|UDQm|QOYup(S@h1j~$9} zi3N8DdZjB&yoEorX37Xn%?aPaYZOzj)I4`SbbS^9Yk?qI60xoMK$3O=$WGh(wqV&M`LOEit()mR~h| zg@MI_z$&wREP$ zAwIWLvtg&-ltVhdpZIzY#?xDu@ANpMr0`Gx?=1Hxd^v?v?Ae@c6N?d0QO-JIa5aoyr+hMF`2aHHD$T?G zB|N!198{3}6toP)bK<}|)-0TwFKd2>L@_vJ=-pGp&*<@+Io6xW4qjY$ z@gpRlTaM<|)Vk7o*`)MZUMbnI7u(0qj-c}w!ya7o`NEz<`ED&v^<|Z$%3vDO#<`sY zIH?s$y4hlUPHXhN%^-SzV=N{G@e}ZyX5)VX8oKbW6$s@)7n6S;0H@jNy|JT^+WinH z7<1=z>M@Z-9f>htg~;+5FZ5`wmR!;ko7&xVNmpxh&!3?`J!6JthBSN@&cXDpBjB?f zZBJicAEd{TZYN4GRk;dQJK zahJP6G#{RXL!q&i7e8@xXexMt1P_0`#^UiXbHAmf<)%Pq;`@$Ur*BnWr;%hyP!%hA z`_4^>W5!K$bJD7`7hT_BH$*og&B;dgC7N_BtR7He@R@RaH3&_kv_0UqC{A@HxW zQbDcUi{lHuBPON0Auz~=pr+n}rNh{Uy+9smlvBwudT zvIeCt;h*2KZyN+%%7+Ix9CiiXWo2QK`>4yr)t$jRyNedjYRpb3{^HOdn?yd~*#b1M9o8vR ze35`TT(*Yr_GeBFBnh_W(q8t`0V&7|?H*0BluZ}$Vx54CT*{v8H(%F|l-_8zjxWCI z8|xSLp|+MB=M#L64i*2>6^+yTmRuJvv&%Sk#dCj2})07)34>M3Dce*+|Pkxh2k6a-* z8&~JAfKVzeHI8S#>zI4deuLmO@f&8tOg#(RXP%bDkMqk;$$TF*U9;P@1%=oIs&$o) z8mTfn%fe|u&+kBA@B;kUgctXFREzFxFS*tDkA(K{tNs;u4fGCr*RV$9ho>(*mERt z*A);N858D>1D9tT;;K)$lZB2xrVj?!Wy zk5uj_Fp3?od^1U%x4iq$ognTl8UU&~>xsaJD3Q<2=UC_EA`~(<6r>whLS-j5x!MP=D{eRl>D)3 zsgf9$x*zpz)-|6Gpe8D(I z#_!cQ$4+)PQe|j|GK2~Yk1!|ua^~yF$OVF_&Fi@rAo|NY{lr-=@5=ZYYGS(zmC;J($!9u}U0$54%0tW^SghzveG*ywX_!|!Z{{HFP)1DQH^qQO zfXWIG8lomX;mb;ap+#55+s_>O&4d&uFqnm$=l;jzi)%v0y_{X;nL2I7#*D_?G#C{H z7o{*ieXIIZMvIhHl#T3bUNPNSnO_-8QN}nd@^8MRlhN{mlH@E2lekk4{aRL3+WX+yo?c zl%?pLvCr_d^9zzJ(bx2Zv`7|%j%b@>G5wbg7GjpJY>W;r4U(7Lq+O=Z`^P52^Xb=a zyAG=}J-eo@oJfZ5+)W6CS)6A_z;MqZ{&n7N44I2Z2!gTVS>7uh;wz=mCmjp7Uuuka z#_dEqVlU50FDrEJo;DatQI@ujcOvTuzgvuuzs)V*q~^*f{!TVN&~z7Fq z{qo4E;Z1AeA+qp*q_149!9?Mi`>*#R09MGO9 z>YlLB0W#+;feOEGy6VoxU&kJV;5QmOYtpjpJm5B-nkYP8o1UwC^ zRa$o|vk@^S7??bX+4d5PQ(!}M84Q4R8sN9t14u8OdD;EpqYT=xraQ*|T((TJFC!v=)UoPm)27=Q^Ij`0>M z=(3qn^E=Hl7(iN#W@RXll7VCNlFL}x=jF>7w`t5M1C7BAiLaYATzY0l z=JvR?{p)L2=9iWPPAnnCL_|fsJ~o}K{2b#4D7afUY{JP)bXk13T-Ab8eB7r+-aQ%K zC6Hw^i;JgsDCQz+ zNgNg!@e(*lb_d|&QO+n`ZnD{IQMktK=B@o{v-<`8&99W(PVY_JnEBRjf}2V?N*L?@ zToQ~G0-_DFB ziB!a?rvJ)Mg_$duGs}ZXt3&><+HEnOK-tD%NY{8GsO$>m)dZcfQ)bki0lR0g4+P&X zU8e}tHiazH45R)=QT6l9E*QfyK+%g!v}mgAL3dI%%&&2RffPShDZ5`7$xvI&8cZk|3(evl z^HN}<#`xrT8?D@C(=f=9vSZ-Nz)dB^eUt&c*C*|XyRVqnq@Ep%E<_-hQo1vnza-{F z(8(q@z6B+bR~L%V-Wq21mLXz{y$slvn=MM@cmeQ#5b6xkZ9t{B-2`^RoX(9>2@o2( zlw#-L@OYT*sdT{HMBa!$J|T8utXh&1jE%8LoDB+u79$5Zk^MER4tz;1#K**OFiuN% z<8=$TM@^>XcA1xg(g+*3j#$iEn~=A+BR~)^_4tyOzJBdCFNJPl28)Lbv#3YUdlOhWy(`Ay>@$hJhD?f@mzy@ik<%M{t0R?btWC%@-(pQm@i7k7*=S4 z0s@lYpZ0S0)%q$b%yr`%6?kQ3W#DwzAyR9Vd5I&z>-`-^Hz>#a0MvN*MiHupdq|Pv ztOUQIdvj>(G^lihU9`t>E@Z?DXaWJ>5JLhl;I+3^dNBq>^OR7nfwnu?YTPXXlWHTQ zMg&V79sOyVBnN9;_(F*o!P1!!4^&yJ#zUq3xjZ|0oTgE$tGt+2dl+<2RX_)*bwO`N zHZ}aoN0_HeV>vR`wBePb;3Q~_Bq9lJ0W(hv(sh===WjMnu|yDj5WLFJlue0SaBDTS z4-mie@?f7qdA=aa1fv?-Ys^nxm-r3#==Q4$lh~Ser}a}2-F>Tehng_fCEQ#*?*)k5 z;WJ&qc{B-LcdV2nm2GA%Ea=q;q($#&hmIO;5^O9i-j!H2=w^ar7V5P=aswWUna-(4 z8SqprE!%YK6cHd?a*P=#%Mo-;w9>%lrPj-MX>`9MDp+&9ll%tr@S6p#C%l;-NZaVo zOy4cIOqrdXZI;Z6`0(LFzJpN0b-tvsS30buJ3BkPLm=v*W%z(B(0HaLl3+f$IocAI zMSO$W%t}&QHb*B{3{LYZbomk!VSC0DmT&5Fbm>L8vpl~$$xbDI%_cls;_X$uQI~F~ zT6*lPZrT#tl|0nBpaa>C8jTlMt7o#$qF6Q1S%aQmt*6faeVJ0xVK{k)E)$OvN>&oM z{Ey=u`iI8H(9dA+OVf9bdu=xp>+u$?wuAr8CJxhVd>mH`brhXIO9hQoy*^X%1?>pDVs?t`NL_5JenU`*)f1AUmQ67ObI|9rg+ zD;$BU{MxE2iolO+Yik`H9SaK$4?omu7K339%%I>{0=~}G!r{=6y8Pk1kU9{mQ;rQb z(vlf);n5hxeZUj%@tSpUr!T>|z+;>$n1tUrupiE~(-uE?7>I8E$TtDH>v=LgLqkJ7 zz2=yrl9G~FuU?gvkp_O8o}O-MlFCs}PEQA^MG9KlEuBk6OlA1KE$m0Kavw~0^d%2+ z!HFd-0o?%_ItypkKNy-`0rK~|TZ{l)?u{-rV;C5I@`qbM>u-=}EBQrS2BCJufIg0lB5lN=gG}P{0vnA>%k3 z3VCNKI3AOw6l&*~;OkXXnHjgn6X>}U9H@NTE__+K@}&1)v{=8A+||CAUYoty0)|(R z>q5p0Cq`3K)AY0nMPO%VCkF=yfUtBI%h8Fl1GuHz+r!+EK5%S1LEX2@~=4!pbgHH^ZAKyQ&Q1$4Bq&MYy*H zg0Lepl5nXmJ4>?-c3l`ws)tmyzP_FgCsqyMhQmn;;kqD^9H#~o@9VcOFl)3fe5Jge z&^fzM=cLsMKDvS@*9`(3qu8|+K-caCrK~FqvXz+q+Bb$8_RA?BJ09B^o183+1*t-j zV|P9h%S}lfUimZSufZ}MHITeHl`I1UC^dfebT`pur#G=^# zC4@ddY<}-%ALJ1cH3@!_jC`AyH3#>x$ip$ur8fe901o?i>EaGin{9{1?oElhaM>@x|?L*TAfy)r31?7u@+gZZMk{2gbRf%`}1Y0;VpdmAZ?}ac(`S zm!HS(fNi%WVfHui{huq|v=kJM0p4&M7iw$bU!%QoARLe9q|<&~s5+OsR-^f@D!5nm zf(XS^(1Ekv-VWSHX42%3ZJz#GOzz_-@Es!HPGtQS0vAc<5 z@EF3sj{-X{POTt}ROhZ|Qmos9s#ckto;v#^B1u#$MauX0Ed`xXez)S5y~cQSgbLEr zw(pWi@Z&jjmssBu$<$Fy(RLh%YH%c}esP&cZj}!Lfuk2_5sik*7u~G;h*+r>GSq zW#!j47&oGhoZcCf@chx?s{1;f3h#3;+87E0k#*+qH#dfuR0Q@Nd#`oW5KgnfcbyKZ z;#q8aC$JKU#qhY)BFPPzifzlVL^)$8APs?f4jrfs^ALk5r}4LwS+O=*Y>Ued6h&@F zu-KN@f5lkcb>c>vi!&nIg`(j)rsF{Ne9>=33Q(Vhhd*nsv;d|> zOqGdoPkKHBA1$Vxk$vUM7m(A8;&aAWfsTPWHc*EUVT?_@R8&;9R#uW4^R6N#z~Fgk zWF!#+YH}dXc{)y;MVOur_bj8TTASRWu1y$Iv>YpfBv=|!AAlg@(_Ix69ee-Y_XAMp zK`KjhD**8xOf6vASqAg{Cf)(v8!9SznXV#NFJGR&WET#IAu}T*x{@cW%x^Fp0*x(6 zqB?#h(4rKWlFUz%($eDd;A2!C;jMH7HID0SsQE<>F26xttw^=S>s~GASz9|H_tosu zu76`N_tK9}F1sJKuK4r#^-b&h_dkTVFB&&#`U132pWCAQ!bhtZa@uDGVejw^?wxa? z2!xrae0Kk8VdPK?KEV9VQ-SRUmUX&*GH)>-+Sn|jrJnT6#v%nruD_E#&T13Tbqb*_ z^0XrJ^w;D?+&~|B#=4kQP-{GAvI{}Pc~C*Fzb&DcPm7TgCqPPaS>{YuWQ(NkqFPRD z=PVEvZ_*_xfwf=to#-rVZ0wKS4f`8~Yj%b2 zMG7^v2yiQE2V+lY-EHkBOP;S5?)+-rorQf`W$h_RAU(z>fd9{N=`Mn*78?S_`C)s| z7%KkMS$uzSZiuy>`o&sJyrdB5>dskfy41+mM&sHb7Jw0!6to7)Ctap|LGlQ7S=qPn zB?LRY;`s(NwTuS7myce{-vk%I2ODwyQa2wkWbkV0R?#3~K-8KGl@xGup@1?y8Kj@Z z;2_$Fjt-_EnmqfnT*P!VSLQ*g-9nY-4q%cB2|dk*(K@gIdw*rp!w&jg)i=>G9Jv9O zVG6DB2?+^M@sg91pFOL9=sQeG$L_XzojqrZ`?c`OKO$9>kGQX0Tg?F&cCBsifqv-^ zptq6X1waf0me>#Z)-=#4<2-A@aS74_!{Wm(l2d0Bm)?hxS=MH84eR|Ob&JZUC}<|x zVoZXa^re*6U214Lm6GiOl(W}n31PCr2W57tj%@-50!|6*h$S#}QDFOWO)Wpm)dQL{ zwjP;lt|HW!zF)j`ZGz5z?n!?efB#YnnV^(9rt5Q6R*8AobM5A((6xIxLUIRSP*FUs zfKz+Pmiad0okRULb4oXjn3p!&2FSP`kC1=ENGAx&e&9*){mad^f;p8Py>cvv1v1qy z>wuh7GHA(1DK%49>vKoTec#;dptzAP_5heLbT|<-SJ_wn=!%l#X-t-&Gt#8T5MA|P zw_>FC%NJJG^2$nl7gselvv?32c4r5X5P5ljUrL%1kI3@??ZA_4i#gt9U5+Y=EG#de zL7>8QZAOwG^I#5auYX1q&Dun#`_X~M3tUK4MwiOYiCE1p%(YI4f1=U0ZPq?IRERz|3r%eLIqfqa z0eqF1LLn9cNaCcQl0N|27IfFDK+#-YCyVixR31!%Z^0##@1Pofjy43BY-|h}f(3cm z{)k1oS*eawloDD2b95AJgo{-%C5^CN2yjJTa5(;0j!odj2{6q}PfiAE*D9UtG?BO(cTgmQsB=Fe-@;ASWU@D4EeT?C3p? z`QnCATW{_UT^qX%;^P1u&Mizm8@_Oco}d{pi0dm1+l#YMqiJd^%jS#Hajp-2zFwJo z;>miEiCA;ehcoAYIR>Ps^Ta9OYXl(XVt zhip8v0*dK#*qq%5$!g;~6Pg-a-|Ms|PTs0jwP@Cu$FI`7OzV;I%^1P9cuC*1=-QDa zymu9H{Q@*itCs+iZoR7JrW`*u#@l5XMkIOjwILCj*Xz z{bk}{<`~ocFm;B{6P$u4OCmH{=Vif^r8XgNT-Elqv{ zp_a8vN0PXTcsvKntcUbOw93s_wLVe$gr3jzoJl426oHNa3Jc0eOid+t)R^B(f>Y_F zOCI-DCP#oP7^44Wpt*X9(PB!%T(dK=DH3(g;*9r?kJxN*R?D0w=B%N&H_1`m65nA<+V7T3U4BURdONw?Do_!$>>3h*TZX!ZLozg+{wvi-m z^Lnof*o_lwewOOJHE82P1s7wA$X6SC7T7nYTsPPE6tWX%o$WhnZF`(%PvI zoVY%QWaArc@Gge!z1ao_+gLR~V+Xf)D?c9x@U9k0EdVdhSQbSVa4)+0Fz=Idf7Jt2A;QWJQ9x1Pb76Y^Rl7i64NpoQEhZ5>n&cSVALzwyqe`n?^6(D5lB9nV@ zjHHq2ab*K|3g`JgCPb{;#3@2~ZENI3q}aip zOQj6e3BjK0cLqvY+PN}J<4KLhl9WQGg96TBQUy`4@GRt)C=V_`DJ0Vy%r1`6SLggr&YPl_WhnsKoSKrsv#@93m z=Aa{KUcm~+d{NTN>e$u?-DIIMUlvIo?kiGasqyoAd2x*wojvXnw$G8BdihdaPWi*t zspIvk`5L-5;f5#L_-ne|^RkPZY84GPYESiPK&L|i-Ram*F0|FlON}g5rXEs&PRAtg zKROM)VG!hi`&?#zfw=NkSe^P!CNu53VqBXX29k0iI#S6qiWn(HunIw3BteP)bhgmc z)k5bmHv8KCv8zPQ#GeJn?KG|4$L)yTSga^7KPfqdvUMj=%gZ~{@)cjPkny-jTbl6N z$1Ce{NpgZ&$tUkM){qMtIT#Eu3k#LJU|M{$J*4KN@2h%Uoyqrg^2zDU0nR&FD}W>4 zw2Qc#TJq|%#sKrs5V7WsG||ia{C7}(W#STBx689z}@lDtR7 zqZkcbFQ_p%3}i5FO?0FtC2enxI(To@PMYyiHWt$ehkf7_R6MIhc^W057DSrH$VTb66=C?zZWi`vU&1PMb zq*XAzaBD=a+P`(|V!2i|XpLN%Y&iH@ISEd~pasn{;&z8`ZQ?|dJQRHMzY0F4p`F`X zP8CeE$+Z8q;43{HG|Kj7?)jB-E~OObGgQeL4mfsq?XLz%JSq;tuNXP(UvwgPdpeE z1#0T+!TrznsRbY9Ju8ld!bhzbUpBKt7H?MFCq#X95{-7a&XX(Hsw*G_p2E~xY=eD$ zj}laMkAJGb*hfi6@n=j=@)8_?-R+507zTdVgqF#&5q)l`-HexOxrS8}fi3|%w@Ej4 z*o8goO)8}Jm$6={VmXftdR)aM&FI|ofmSM}h}a+$pXvLaE^C=G{tK9uRW5c=wX&9% zmxKP!lyc4VEPMHD$vy!wU5rv!GUZOA@wCLNu_CkX{Jw$tL;ik=VXew?qO$IzT#;19 zLA0iA?VY>?PugF2NpFEEMbO(N4z$n=e-gp%`&@A?+lp(5C(EwZHC%aVAWb8-{07J zk*vegp}kxBa%@bSd|qa`RsMAws&s@CQ_6N<_pSBKYcusl>fFI{9xdDNq{vwgs!VfZ z{Uh`DTf%q1_nBYT0#8cqTAcskB8fBF-G%IYu3AsABKUhbY6n&%lv=HF0Edtn&U=I~ zx72XDDq>iNwdn5UdavfDzcrT*xkDnTq(MO*{l2>7pP!8>4)MY(aYjik#xlTxl)Yf-LTv3!^4eb&>U*X+F>(cbKjeC6 zXW)wZQP&72Cf+D|t5^;+Fm#hmK4AgxDtPLw-Q2 zeb=aVo9;;!*>LXOG4B`9{Qv%|`xayKpm0}sG{(6*^8eC(YxzpLyM&mgcAj&QtQ6Ww zN}^nf^ziUdBy@WFqlk+;eA@Wknx$;@xKc*?oTSh?d*8Bst?gFI`Na|gZo#R5r)wAa ze1HCwGoXy@Dc=kjS6~=F{rQUG%In=zv+Aijmp4(fAM2u~^)+yNN(FBSOy{%;rZZAj zdN^#pR<896KcC~a0*J$m*b*AIyz=V~G9QD!m#e!S>_4z<2D_cM@7SzyatzDkJ!%>E z9ZjazVm}F|wFy1Pxl`7H8|1Ebe#hrjBGb5LFQE-XkdJYD&C3dP_K%dWpy`UW$h=^( zh-dJ!7w@iBYpmPHAoiZbxZ1JRCyMq>)*{?x4CB6mjGRoW7a}V&vG^;HSqO({zGvs@ zSse(^MmzkZ!tOy`s-x0M8FU?6RB>WFP4p(gUhiu0nzDkkJc(v)%u1!QRyhxtMJK=yY(hqRs{eMMSS7 zIc3>&V7!IVj~^n-ajSE37qWA88kK76;)G1!KGl8Wn9pX8vg*dymr_c8Z8Wh){~|>O zWpMlUZ5kHXR#3y|-`JY)a2RO*?vlWm)48>YS0DapYqQ2F ztgo*FQ}Pp8KTROlvp^S;D@S!i7>Tby9YiqX{AXtbG?y$aK7*L`k~l!aI-n z2|ppR9*jxh3BeQFBo!$pX-X&y&8=&Krg%KYbf1a z&Uf~eR~v58sjzSal1((7A93;WPGb5bvU1(Cd!AWh#F~d+NZx@Df{xAC6#U1) zab||*8%)zUFAMXe9KsEmO4ZqeMZ>>}&bLkS{S5o$T}^Hw=JhdPOexVIwN z$?9!^jQQ82X)8M&=C9uUZvP9Z2&jR~XE7 z=h}}|0eVsXBT;X@bf54A8yRPCJo4Tb?U2T@pa>LxW=6y7b}tiaM(?J-MO?~T?DuEZ z2dacUWKGARTfqOSnb+3FrZj>V?=0hjNvKc4WeyFU;|_Bv4Kl~jF-H3-5FF>6yoL5& zNC_DWQdftySjkwnkxqoPGHCMOsvp!f1Z5ALN6_=R-*2tEbC&JQ_3J@F-p)KKi^)Ba zae^JOZWon27;2TDH=&`Fc|T`nOxfe`9yL;VQn@F@eAgtgudPxan&y1^ZBIq=%nx7u z8MVa(N@1jpSovL3(-wo(Pa=_C>!WX7D5c*z?gErEfMl9@(Y<>GW1U-mNWX&tA6&Yj zC4`90zq@8|2a8PC>BJyEujm89Y;D69IF-@pN7KaR4z`4R=`rabTc-3LkbvVrbPc}A zRkaDniOv>yY&<+U8L7liF?OEF{S=4^DWsFWye1aLqdQ>*av?;c)eQAvihKHlw;OB# zV$lD(Yv;(Ma_SgN%4&BC&@(>K<5VWM{u=3Nm1+0XslOMCQ-cvjN;fzkOvy*i(G-MA zqD_1Fl9Vo`ber-m7cfcV+gfH)R7gX+^OBImWPSK3G-)Btg8nV#Yp6oqi$CpY9nK0EsPK)N zV+uFA{8d4fO`=gxC1FY$2U1%Jg_VWk$k@r>Sbzn-4PIXIv_Aj5fVP{hm9qUMBTInE z$}Q(6#Zx8x$QMR>lkp6_nv*1@&4m1nqBok;i|Lzxg5r^W+=Om0j1YUKfEIjqn)gZj z_wV0>L`Ya1btTUS(yPCr!!ezeWI^P%;o7?m?^z1k1;ocn*W>D(iz$-+I9loOT(KnC z_#)c$K|=HL^Ds6ejq{ZBec1EaO4h=~aJz6Y@^8k|I(e-^{}zCdl?^|+tQ}L_hw7@# zM4f}5(C9WtpL$!)agw-ZkldnjG;NYi*QUjErcmPriIOz|)z6FMUX^Yxs&g;a4Y2?& z>q3Po2_Q=5C#QY(`;{q@;Y3a%mB49FsNG(VZIi)5R{1W_Qi#=`YA%ApsEO--&{j^$ z$8f)fxehCmqQ2-euWe5%5}wsl9IeQ0k`2SKQHON_O9!E5==Ci?t%D%2&6CKH*=$_c zx2M}fy6LNFtj7nyG=0Px%F$HO(AfIyp)o!Lz#EZ79oi#vQ7W_?)1-!*7TD<~`!<3Q z&?#yW%+_x`-uwJDOAQIRXw|^Lm=FcfxB(@fT%xN9olvMqdiZ9VKXnhdO%iAfE<;$j zl*8W4q?1FTPk z3{&#gREDk13VAq6^9e%~7V@O`)YcA1k1?EY-7l=B4fo{A!A%mDV2bVM!oT5+W@JkkrM+Qic%%m7wRKM{7>#W<^izB>waJ zE#YM#8(z~u0~Vhl0I>L(59w13@LHtcX-306PcQC0+i*@@-trhhpe%oaDM{vM02#v!w(2y= zNX_2uj%3%gPCDJ5S?3=mHda;_4d)ib$Nit7+e=9&r%}Fb88J-nV!_=nEV=$o{|h)F zXL#b#FwR0K=BEl$nUC{RUp_si$#Bqiaq(h5w3gTIL_m8TW*#f|IVigHPI)DRr}Co4 zw)SH$3d6Ej{Q#1qsc=DrcsK=@EUUa_Sv=w+>r3<$jWF{7o~jRKg(96w*|7bCR}Kfb zpw$8kf7x4n_{8rivoAB6Es)j6a*`_A@e1Ya(@PySZdH;27pjs>53oeDjz!tz>_QT7?cmAibAATJqxKbNG&kfPjz9HvYDFbc5$6xiG zo?6eUqQ>Wcm_GQQUq%10`V7qSejNc(jqWgIALp*ds#^g@fI<$;8L+<6*2?^r!|S~Z ztu)=5+i{T*a#c^m)>O`$jf;$_w$@fj>v&{;da`lEL%8uV$k;B|=5pUai}l&2z`e11 z{we&=r#tdO0)))@F7GQc)BGdz@E&|Cnyh1p$d7r+uvm|#IoEDlcY-PHcIGeG5tzd) zl0hZke+WDJH+(z$B{8w(?NKEdQ@WBCi~YXezaUh;;|x<^s~!CpUMXagetsAo4TPZD8)bxCmF0Lgooo2`G@!=K(4* z{=;VBL4#A5+H$U?7YgAa(`5IM9sTq+HvDJbwMA+=CZao6u3t)yUeph|-)ZD=l3{K@ zjEpk9-TiaQPx%1g?R?I%jQLK-V~x%@bd1%UwbKuC&5g5yVQ?}m+!3SD{v$g-?e_kP*aolViwEtlK z-1eBauwZ|Y)@S)zV)|82bFhhqv}uiM4iZegNaITgkry%pd1f<#tOJ=Kf#Ca!S{N@huf{HIF;#~hj-g8Ffv7^ z#SNf$9wM&)IC;E?VFT3XEv%LOrxUo0*qF@n3n*C{4nJQoE+4jP=&sQKVV*NE>PirZp3Wq{E@Ra%17R4 zw8UO4-TOZvd(gmsuv4bZ`A*%|-QB(31mR%^RqWgNPj;<6oZ;@Cv=F-fdEprkF^D+k zTqXz7hVQmQ^$Spg-$*^EpMHb&4({Xk0C*cPTrjmaZ%xx6C^^Si0pJBGCr=o;15lX0 zz1>?T_ldM}9nneA*k)kqU9rR78?Px3zMt@N-W(T4$oI>=p9MEzkrYjC(0!2w^ZxD3o&#YMF=HCGE;(fx2V;+?P!=!lzp+v{MdZX0aNV`w+B7$O*93shXD!|MSEd9Rk!0a5rS_(OIIFN9NrF+QoA9BsW%9{uA1q4uHVn^{@{=REZ zVfj8LTc_+CNCOC;^Hb0?y*BXkv-qb0{dRBJRyQ#?(fK)bQjhNRsRQ`xZtCM2(Cc`^ zd`zdZp+P)J35GRF%qQG70muUrbyWp`SlV8~AG{Q&0HZ+{3AlCA+fb?jt88>MGzP@M z0;FDZ-rL{1ho+T*8tqdR4undoFnvu4Db4xwe&0i5;0Xs**@RTZx}79H^Jga=Zleuv zoOS4SOe5$}?CKLYVJZ~rF4YoW{(!}=WH|zhi{l^p99mgI<1Gj$o=Z8VG7V7; zPVqEIAEvvYCjxl3HiG6NFq&m^`!+2@*$cc(v>&6gii(0cMIa;*nhMn75B2#FGoWM2 zrqodzTAn4$Dqcvy(Y>Z{>!LA?}TpI4M1OJHM*pr^)c-q9sER6rLq^-& zv*G(>r?)S0e`Kv*F@;z&LuWks_jMtc5&b_9O$oL^6v}+#T;@E0GLpOjoONpv+I-Pl z)A9P;*|8$t`>#+U1kF`3%e8KRA$UX=^}M;y7Yrf6VfH((nE`z>=AT1{O8pRu8GnA{ zm4IHPl#_MAOvCeO5n9&8OU_Y6N8@F0+yBgZji}>gw&;^X0z;JKik$t)X~nl^p0u6* zB>xU19N+6|vCV_j_EoAa!+8?3ak-_gKhE;Le$r^D|G4vol*cBE8qzbPRsPRs>YqsJ zR7U&xgYwj$5KQNL9sHWnJOjb=zFVdWDI;EM1<@vV_Vh$2_6osI)Npb)--5|K_j+11a#sLPi{K^ zTA7)d0p32x1fW6O-0=zsAZ9}P1Z)q;quREXt854%3Zl%GDE@pJdX4$W7-5@@1Exy+ zZ|8IY`ka1d0^#&m_|vd!ZPrh6KYtnM>x4>h)}tGC(=^C@D8v$ZZohg7^4gDSW7U8G z$&DpCybTO*XExw;O48AOB8heT)W)0sXYZdPI1Co=ejo3UV?d^{x}v(*>|$ni@<1JY zh=J5IIXvv+1*8IC!gzn14)|hQSh3{RDxK&FD6iU>@dmM^h1(ltkNvf4s= z*U+(xf5?=3g-mO_D2ghW2J^|DR_0g876C8L;W~W&Z;$9Wi6sTxX|3mIJiafktsa<) zfPse+8`*aM*TdZcoZiRJK<<^tQsB~hadYYG9OYE4TL&-Tykn^EPbHy zUGVBe3;>jy>C9sfh;ZxMuS_8(z;MLP$ixK0P36W7MfpSa8#o*)wila@gRy`#gA*uW zvNir~e?&=?LIu~^Uo#t6{^1eQ5Ep>Zize=2f1Uzt(^I05KKz1`Yv;1p5WNRPzyKBD zgx~1oq=PvuvfCQ@;B$W1>H`Z6ggS_yQUt2;5i}PRa3j>w3|D|hR#aAEOCGBp5=C+l zIch3Adj~2?P){qeRG1nJ+({#f&r13`3&&FJ_X^*W9{qrT4Vxc2a`Df-gx?iLBhY?< zGgi~k(0uUBfW>4D;dS2iK9De5i32}QP0?ZM2Gv4KG%5tk zF0{nwdxBON$cB!Of34`G`r9Y?GXE7&jgb{bi&~FL?3-&6sgG{q6aSmu`ct~zqLSsY zF*q}IwY71Y9j&aaVBet^F2#T@P^|6LZ6SfsX-(5wf+LKF16`{+jHGbwUheSnZ$Ot7 zH)Qf}=DvFV#$yrH_!Ih5{cme;-u&i$PcM4ioFjgJ9pY*%KP8)ZI#1(yZ_gQWQXCzk};Z0bl)F0^v^MLSSu}^fh7~45gG}B z;LlO|iy)=S0{>4qdfp}N381q)ZOc#UMUsdWY+TOWo$J1m?Pgeae>M%(+U~SiR)G3& z6Nab#I;1~k6wsDZ+P4cI!r|NiR# zmGgx@rj5I=l_3rMVO8xU{9{!S`Tn+b_{Yt=BKhldY1XytMm-1eX5a?Tm7}+q7US1$ z{f~O-kR}Fj?m$7J_Z9A^(L3GnA3I$P^KjEa$K{{T6U`2Tm_=w)E(lKx0wt>9A18zt z&ad70AFQfj+`o2mzbL6*A;ZcAXwD45QU@ld0D9@812>2d93E1K;saJl2q2IWqhaLi z6@L>S_^ZTZpF`8a1`@gN6dp+;d@%Jf;NACsF&jBa@gmtb(R8rG+S2t`&W`4TS#_SR zuyt~}=ry!@BL;y$%-+@eRwRe0m{3Az?SBtK@bk;Z=(fz*#d4NQw=eE>mL0Za{GlJ? z4E>lX+F+o9m6wNyKzXbgTV?_Dw&_-UIlJC*Fs9wO-zlBp7h&^ri(GuY@3ajW`^w84 zY9!K^Jul$>R!yV@(lRQNL_p5AwGYk=LQ>Wxyd(Er;1b;Qyo>*4gs?%3=BZuD+H3*F z%_3M22!2Nwm)A-Eqqt;*_qdq5oQoDu|HnfexR&wFY#c~;z$5+DR9dz&pc;0&u~-kN zU|H^2)~vYI=!1vbvkB)IGAC!(-cg#3pKE)tXC3g!YsPB)DZV=D=#-k4^}nsX=vA*7 zaae#?OV3#&x6Ei86o|Fq!10{3zjX9%u;YF$e|KVBGcU+&tRw$SqB74{(G;h5BbMJm&_9({nOFm=6h8$EaO!5+J$5fkg; za#HOG@sXSNS6XQe3?HB5%-nO=OA|_#ySkLP6QDnLt>F%G23x@Js_ z*=lmJrbTlZvW$y+_cahmyv&1!TP4c@_~aEV8P`1)>s+2?P>Hy*rgZPa^aWX2e>KW& zTs|HI2j^Y66H=0raw?lgSts>NxG^-?+@STB?041cN0HhBy3S-;((n+R;iS?c_hfY{ zUs-5^u5ta+CoNnI4$wpB8S4%_vb&}-{^~y^KW;qO^*$)<=B09nZjj*G2j1kXPuw8A zqrf~a!2A6L=nT`I32uSWN`>;)yQfzGAq3!wNq541q5ZE8-k_pTz<|H4iq_NCuB!l` ztl-o9UBiP7Ly!~A6)PC8+WEOP$$^NVzH&Cucw^_2iBXTKfs46u4IAPS-LRiut}^=~ zcz-O|gMDAK(zE=~sYpGq+#7_q$DJ_JN|w2|7kRw5JE0+qoFoL|-?ufiU;s=&wsMG| z3-jgcZOV=shMDa)ZwP3f<`Xq`;g7@~#?ci)Slj9vw+%XS%A8{VwWN_&xay}LZeB;p zaHv*yl~x1y2k&D48+c zwhzlC&vgon4qhu+F@Tb@ z4H)BV*g|`cOK-TOH6$RAi?V|14jj|j1E{z{pc1TN=HiI=8dPxQ>=01vniFG!bW!wd z@d$X*S&O|EUUSzH3E`}`kmPh_W7s;fmR&hr*hz|Q1A4KyP-M&+B>QRM9My&;+*oc< zII`B(iZtYQEwkHh&BZK|-_*<%H`oTDD85^)i%mL$2?=%I*z~@+`dbv=zXz5?35l@@ zt+LLEmgrMZrgOKoXK$wE9HQfjh4trL>-=PEy6?41pKb*o6M_T3*yK?i{ohXuUuH&7 z?h<^1F8I?V$Ub7%bQW}|K*6M?U{K?lgU7=9R50C$O2?0bTITF%bXV2W`?lqu>Z$=2 z9csG>C=rDmfF87HklahKnA^ORf0cH;+A!Pg=hgFC&fcJHw9(ck=k~L&zd<8JBWYY? z`9q3gfgz*nw=<7n($bb@B-!YnnU61BTWl}gWMS@xkruJasaeOh#cpPh5Nr{_DV8>? zW9tB|6f&+J+2att*V2;G?e(6=9xe<>C9b*%oo6_5MScp90EOk&=KgswKsv?`kb=cFCw)L6^8=j(0J z2Oa#LGJPp&Y41$=goQ@>`uIRo{}f?g)`))!v_4PNxOGy`gCKIO z8uaFzMt}a|wXK<>poIe3A*Fe0pI28M!MJ#*cVa?}kB_9>yawuyB8z{0c@J^J6yuy~1?0;cOH#?34(0enY&c<`F@QQF>56TR0*<@8L|XYPGpUre_-aI}i< zJOmxG(!{toR;>W%(c4~@wVm#KcV%blEdP1~a15czI5LtGyRfv>rMU!v+h&7d2WW8+ zKFWZ>`GYt6^P^1+32)?OHTOXj{Ykeu=x*f4f@Mu)Z~PZiOB-uzywCXJK&Qz2+gH5Diqjqi1*PQvG3ia zC!*MP=Y9kkXWo$mjvP`jR{U1MwR;2y&;aW5PoX$}{!B16sB$PXl7Ktx^=-Kxprth; zxk_G~KcT=j1x^9PfiBQwD6N2EG+F&-K44@p`Z#T~x_t!JnFzg;mN%_B`R`vaGf2t> zRUpvYO6d-XVVRJXz>+kQNkHwup$Al^##Td|7oa90rCc2Q49fqR=dG1|dc>G$y3mHZ zX|&t>D76I$c1?J=(nD~%Auk8z!S?}hvFh%9Pfs&EXkkd9bO9q6^t9cyq|&6_lrLIt zZ)d2XBJB}Pps|NX z#@yXbaUZ00!~TxVvu{97H2&6-%ldi*;8iyj8MPgRiuNg9%J(gt5ZfVoJvm=uEk9N5 zZPYe&hUU0QL0!;lRU%sc2)D4qSLopOux>#9O9*Q6RiIdTOeprk4Uja`zJr zgc`2e6Sk1&z`@LB!vSGY!Yfl*B7A~^ZVLl!>#wXpkm;uGGkO!BnYQ}s8B3(WoUj35 z+y~BJx?s`#FcT24z-KoXk+C5Z1IC&<KOGec}2mVaMBNF9xOj z^!oU!sdagEHTEbL!OThO*OA1jRuJzq)k*zRuOYM$0BCNBo{o2%=QiE@3s!178D@@4w+g94b|S^kyMRLWtx-bRy43qvKQ&<;Z7pb~gY zCDJM8MgIq&E!oS1l!+>8DNkwsJ8p?h^YZw=Gz%}9g$D-Yif95P-e_r+9@@F zRKyPu+5F-@ysp8}pad;;KG!n(Kho>#+5Z&qGMOh=blO$kJgF)24_v(5eh$Rzr%wsQ zS!H~&WKntl#nhm*PxH#u7ha+Fwdr&1Z)2Di5VG^yW?s|EZ8RovrKUzGxL#ly(nA3r6VedH>eH5FWe2mvB-pD-kbQ)_0vGIXnJRnsUUN` zq>$cCWPFnlPq=o`ORHAD!lc;{73TOBH4>)L9Y5o8mG|7;zMnkEE_3?QXgvMXP7OA8OZkW0OvG?|U&5wr7Wai^YrfMcUlc@Rf(*|qL@HB4n0rPzX| zAgI#ZV+)oS>JZWI^R4j_%40fNH!_~cX@`#p7NuHlek+N&Y(-w#XU|+R$DOq`&5e1= zOw9F)elU`~dOGnLXtso-e~#Yjw!U4&v1F2an;opU-#Ih4CPa_~<{e@I<0usQ{u>L& zn+@OeHz#wxtR6Jss_%-wvxprN#tzr^qfU@Ac2~bzEbCCr@&+aq-ReNDm_-^V;9URQ z`Ha*8cE*jA-PdC74i*;8_4<99Rm_Igp2tVO9=`uYerGf$b~ypVYWtZFj^EnTsJRTT z*KQFXH8HYc3KZ) zrDwx2+vm<|hF7n)FY-)X1=dTzK_{o9wC2GNsp9|i4JQAxg_2V&R^CU8pK?g8axprr z2q3X^=LZ=rxemAF5TCXMCRTDyBK{v$r-t7hN@#d-owmL*NPW(U;_j&i4TbQV_$tL? z$F)|e{HNQP)HWh{<$&XEnUCB=IGYy)@$!sex0O zJ4Iydq>_~zRsMyyo@Pz!{Q;RBG@@a?gS${MdL@u8M&7lT{Kos_A_>~cm8b%h6FX-m z>?;&qy3+>2ruS@zTij9g=NGD9*z*`67=3(rZXapc)%<8jcD5?C@@o(sSAKuAayC(* zZkk@}LCm4lu*L=>5iTJLqHHn_S-ep~8=H`v})%|IJjU!{wyJ$~EkVi4MKmiy5I zNTE%4%sMs3e~{VAzN;ZlAW=z(3BYPOxL?UyCCBjGU-a2oNML3mT!)cv^<)Ejv1|UP z?bctfav=kpO+0k(iJdRAXzIk0Xf9Ku>)7H7NP5-{wMX(ZFGH9B5!Cj`0Y@smhR4h zK6K~8IKI-i$exCoiC_6P`yb>*Z>-D*3Et1YJVZRgceVJ>gXXgDE>kgMscnji+tz$9G_~Oc z+yMB5NfStxIF4PC|6LXCSi2ets5?B}=T&5cAtcsI?Sm&=5maHuFj9_c#ic%@<5!Wo3drlQs4qYJErS3*tuH4wFzP!TSllf|uRkIEQMoAMt9JyP8NM5Z5b zjdm!6!r*%^ilJ4Wk|QMw7%#=V>lc!E2xFSuQE$Zy&Ghi%j&9XGeEs1P*~oFbBjI5J zjoq2PdUn~WE}nyOvO!0VN6fFJvwTB9VE@2HsxMnJSuj*G+WpDBwf0rQ$%862PijiJ zaG$GJ4l}r(8SuRtlN6vk3{A7-C3hvzffan~A#-i6U9knv!7&gsWC%8wir(MmSTQTn zX^|bYk5OiHmAU;H@-iTo1S^0O`a7F_dH$vBImlNKIWQ6o#tRx+H9zfqVO!Ms6}`Ql z&bTEnc{>a={|Slx04>6*;2!7^^$cO=>noI%6`u0RYo!oB zTcrLe&8KVBv+sHyRn9@{j|i7eSLWMRv_t0wCxWTiXi{{Rt7^|3=F9fhUYe*D=cQv( zdi%+yV~pd;Ef=uw%eNX8Al@7{)4Y%}mdk>otp-A7k=u=^5WD=w&ozHF#I%T|h??Nb zx@n&1@2+DP=g!O3^e7O~SJ{rgsAM2<6DnRJwbc0%%bx6PUHMT1cW=37Y9M!G&7fwG z@4~rrRWMI$=-PX1#>@6dmzwB4d!+3A z8j~*HD?M{8RVQd6%gafvP)nbZrA?PIe&#-(6xpE+BXIU@_3JsdK(^FpYlg9%_>#Fa z?vg{Kh|;tg3mGf|x*HuAFJ6pLv>uoABEpQ3nz1}R%R94!Tg6EC!GAJTR55%*V*N5r zCGpD37}Zlo<`^cEsE2HmjC>L44y{#gLq*OM?I4Xf*KKyx|N1DsV&`OY6EFE|b0gW$ zOn7e4=0GoCbD)$y~;1ZQzR=@ah!_$|};-<~|9@iK`mJzCX%&raChm8`>f>;(Rw2Ds|ZC!h;XTF@dWYU-Wk?!030&OsAi? z*oCXh9>%@8MOt;0#aVQ{2)am#d2?)?Lhi-G@H_GMG}m_STJKVJ-!D)=IU5!}o4Xa_ z5g4midzFZWn%ZeQt~KeAu%zV{Qm;6%<$m0Lfo7=LIrMxg$02Xlb(RJ*nW~r5s9rkTNHbru9+YBe)@C3+t72 zmx&pHrXrj9#-NVWRs}B?mD_QKfOiV9ad9RU1!er+%#%x}3Rwe@miVWC-Nci-Z=6u~ zJ|+TrnS{u}fr-a4eZ`EY2r+^$>`Hm_8+&A0MYFD|l5dN?hn@tB3*{S5l|Fg-H&w)9 zd)iIo@c5&3aY6^9rwd+7NSl0k+1Vvo%3hWJXeoC)kK!cP*3{kT-HxsI8N1?>LCaxW zgQo?@Ss2k4Ld;g9u%b}8^y}{+Hng=UtJ+YmnunxjuYQhr@w4mYFsGODqP${6&a?SK z51;9g=VNs3fn=%GU4r5ANtImS18OxPT(;@gN$j$p@K@||8pJxT0$)$`T$0gAdUudQ zcv94ER8&;FEl^GbCAcZy72YsSzsoTBOpv({&LikYeRGRoKKTAg5#A5j&Nk=$nU_q8 zG|hAtPVH#G&NDroZlh!vAXmSI~*y%#Ba{VorW*w?KYYMO~_TiS{Rk z%Ntw=b}&@zGBzwhYRr~93{h$p@{Z(jxmPrOK-d-c36#Ci+{4s*<-kG|aSE5OUl!#F z^83BLYWG2?)#f+$M}`n$D}=@mb)Bw#%lnwa^wS-?d;u^pwgt~o63$98g~gi`I1uS| zz0SS-sLK>p`cD3G*z@NJ-7$kY$533-L>Py`gtyH7Q}+r42vXWvJ!Xyc*BMRuNlrqi zGIqYOeOu40Pgq%^{`vovFyF~~eB|ppAoWqQcAA85?CWjCWu20WjsStLSc07G$qMwQuNK(_KnX#(~!@qJLz> zioNLg_1iL>uqC-c?}E>nv2QIO^`G}8;>RkMuHxrL6~g{!ug z{ETgQ-FnX-)8h^Xh$aM5T4VA#*q98*efaQZFZiDN<=A7s}D|Att+{=q1&WlsK?=&8~&dMWb@9yf72k~g(`}Y%@Vy#bN@d>eAlg3R=Jf@dz(+)MjCnZ-(*&5)}yHAG50r93DcWjqMwAy_I+Tv8Lp`om(c8f9q zo;t7#j1W6x29}&@8*jpP)$X*P%~HeFhr4j`=$+@G%B3S1(}2c;l7%#Zm=S(7L*&yY zlj}b;⋙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

      9aD27%$%tE@xP%04 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
      |NqR3=dGbH9^S9@122QU0fWM;5_`t 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

      MOMZ0_1S9zbPnt2>o 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

      >SMZOdMY0-9acNi=IxQmB0I1I6}u)G?q z7=T#=hqjK=iikY^&T-*{cfq3>mNcUYPZ--Zp2Ouu{7x4M%H;iU@ED|OpUrNPJUt0R z5;MBUwpVR;zS$nWP#l0kS`3#i^$+TBOI1gvIKBFGT<0KkxG&JQE=cqhz2v`8Y9-)6 ztmM3-YV9v}xZI>sh2BQ`NkKt~m&(np?_Uv;40JSWGJ0>z!h=6Y1^6`hRfEeIc*j99 z?&yfXF^xjmM&d$y@3ham37JB=gshsy8!Mj)U zx#?tJA&g{Mu~VR|MEG|z>!QHufw_90&IderZK22N_Ms^#fS=-pH9TI#$)qXfsKQF! z7aYyV^Kh+U)?A-)o6jpFHy&Sl6n0Mi-p5oV763VrFht@~e$0zByGcAKIvrw;mHbE1 zDI=O~K8lRZ3M?ekcYOg$9u%MVU(c5n>z#2p4_h|?K`;d;2-QA>0nB9 zy<(+J1erfd+2pcU=Hk z=srPXERv-WMlT379);lbl`WR`vVxt9xt@%ATt@bCijuo2 zOd~^Gx<-7XC_RV;27WjBAvM&8ehP5QIq3lxMq0KBYR7r4^v+f;$Rc<}s)T{UjBO@? zUZI46(F~XAe3M1?`&&m*F6HvajfMDhAQeZI*Rv{U6$3aw2W?xk&S;$b>{<7uy{_db z5Yc&?kg@8|F^J)naW0(RjW(X1TQE`**vjO_u*BO8w(TJoWj;ZdqU3U5(%XW6%7z|@ z6Sb?=OTho{35KWRES&IV8qNbl^RlmDd9&r>5fWKLY@%jU3c16efskCAc;K5i@%NW}?8q z&B$QXkI1B2sZowntd#t&wp+=0Nmyg{dycpixl*GAbDQ2E>nThiCI zF;{FathDoP3JQ;>@T(x7ZEOw1fVhmF?4F{xa4Kfpd-joAOP(lGd78*m zYOggTl|Ep}DGS~j15I9rMR9bCA6GUqY2*Y631N6@YAT$Eir8>R=U+RAGpf8Py>YU- zW=7}QHuP9lWO)wsA}0~F%~dlUfK}&w%>{mE)jsHpQP*3`Hh6`5tJ~;Ra+cF9T7EM| z#A)t?XN12?2ASB^8G6m{enBgC0_>ULy^=^CS~lj7mGkVP9}jiU7sKw^3}*^D1qk)Z zP?A%?R&5_73I1J1{D6oJ3DkSEAQ%HPIB92dn!*^In}lI{Hw0sP582J_)mpPa-~_7m zBDU3b=co+U>dAzI2Fq+u549G+#4@NUx4n0kc6t&VfoAW$J?$+DBbkx!A~y!Bzb;C< zx!2h@&y9?ZdO~vow6RTt2-6uPs_gnzF|CMvR%jHsp1o*f>?3F$#$O_eo>y4Vx;Kv# zFlmi|IYZF2fptjfzYfz=F(>hq)URUl^{d~!zX@FkP}A5Ov%XPJbb!8}M?~|i;~aYN zvun%Y>4^#G>|AAk->+>z5~74E0}1|*W>0Qz;2FLnAE8A73MlyZFoz-OxW<($Y>TR> zRrqd`Kx7-lh8<$$&71!YG!9laHU(>VnU^T-X1Zw$snX>9Zhtp~MBB#5D1{Hb3fkZi zGJ8bCN0k?`0M3ITYl?Ud7mlp?0v=$6I4`~JaEL3(Z<|EHkW+;|64^&GkmS8{w}@*x z*45FGZk@)&uQFU>r471RBO}_cz4r7#BV}0R%uq<bY!hB4W{d=INnJnv$(DG?9jxwj5}`COR&G$#N@n<$^H!g7fB=97xLq^*x;@a?>&?S_G#;OLYde!+gC z1>CbL2uM~f&CSclh)vsLBu>u0hPGiXq?C~M0kb?RI@+OtOG0%qB0-gjf4)ymjN_@5 zJ{#;4Tt`wWO5;FFhTy7;s+KCk^o1JmP>w^+gU__ReOs8i`jV!Psjm`!i zq3aPUF|WU7nf0o zLmF)Uka0^M%82FxrrGCaIc<3%gW4&KnbZ<-rRm9WkuGXrA*j3^DL<2We!D5hY8Lu$12N?rLrL)TMW}*784iR2YI^y3VX9zIGW{6PT9%XZ zuxS$LDe$HtM#+DG*+-Rug|LLO`WH&DWr|9ZlMTOp90E|~yc+OaW_uyXy^$9Jj)IQ5 zI*rN%!+~mOH2@t$>0K1^s66N`Mqz=2@axUYXV;lV_~`Puey0S+QBK%*ONdUs2e?Nt zUAUnvNz6M@5&W6S$NXhtgaXgaIB1zXM z=<=hW7n+pR#Z(bjvIudU+*s|x*ArcRaQnf|Kr__Rl9D<=!pRAlo%FJ?#;eavvzk+o zn*uq?|7k%@jVNq$LBZ%~Q&s5LN6xW`G7KrI^Z|dGW!bLc>V)rl#m%p6ZH2GPJQQ=z zN!-Uw!I4)`P%vEyOYUt^zw05DzO`T=;(r*1t9oHjev@{rW#P$D1g*&P65ZKcS=E*!Sd#Bhn?OkaGhg->o_G&NLA_ffgpD>0 ztCG81(q36ZxF*xQO5^6>_fG+CxL6fNkspAEI$piLVsK^IZ!Na`=6lJe!DC!ibxI$S zsx}8CzeKDzyj*;9n~Xnz=r=AQ4=g*%fw{N7n2tIucC90O;WzP@C>Be-vf%~$iZy#k zCy~Gl;V5GW?Nz&jj4vfO76Z$G13l1UGFWfbCO7tmyh%97Fi-{P-y(X7kGj)qqfpV( z^s^9|$;s;|*IpYV6Y@nw9KIAfJY-oDjG5v>Evml70}ERX4}Z_&I5 z11Wi$kU87KZmJr6fVCmiu0bGJrH?x4!6}GuZ2dBTWRs;AU8Vd+^{4F(N?S7G2tLVSsaNNR)~jG>=I4WtVEP`NrGQFb%kTr^Xufyy zIm`AU3>Kq^#FdZYu87{7hnEGW?o^=BC`xkv5YwktdMhYH%fhct@N7dg@%cJHZz#2ghT%6LdjZ%YpQY1X$K#z+p!pxKAStkkuU>e z=O~Ov-t}t0NX*cUm0O4b_AU9$sK<}l>eDjKzpWsn?TmUel`H$^qWNw>Qu8p%Gb3}R zV3Oq##w758U@Ym%!!1A5N|4}Nf`>OCD?U08VIPLr?Q#-oJ=TjF z-p2?zn9@+55dlRIHSQt2oZ5&IqaQjjtr~2PKCdM0 zK=AZ{__oPdnVL_0ER&DL(uNA+!W9;diz9=BYX&eTcx?MynUbR7nu_!Nd?yCRYhORU zyGZ>8Nm<4@&#R0y9?a@jKnZKC;F_X&d1|+~ll(Vfs>h1ur$(@$uc%l19^qyY0oZqL zRu)Y~rQwVHp9Qg_GV4n6hlC$P@NiJ{e7AkW5kM3N?+))bi}n@d#!)JUF1C8#`-2B> zq=nZ@A?3R~z7LSi&O?N`?wsVky^a_Nez23P!~{7EiEGbB)pqiDe~E#7FHHGrp)q-3 zW(D(JAT*y===CnF@*903Vn|NSCF)225E*brKeV1V*y@MUkore^D*wyY>KHz`L<0jr z4dbYRSx2u$homPa-J~3-FF?BmmvX$PPPJdsxjskswI5NK?>*XHjN@Qy%VjZIUoWXJ zA11Z6_94Wgl7Ts_WPGmq{K*TKbadpe%%tenpyE*aI2^`pneR1C(ezwhQmBEehu=h- zJsCn*iHdq{0E&*UlLFMNYb zQ+@E@L)hHe-dRV{FWpj(-H>Yld2)HUv56w7pKk#s0SEHrGj)_|_7#KEvzPG2OjT$> zu#8fN5X;{pH1$$4)USznmUDiAnG=WI{)vyVU0jJU00DfF%ERlq*W#=>I!Q8o1C(7O z8+|^esl`S!GQ#}P*#s3ThBA?ZpsgE8=$#66nOmQVFHWFjP$llZSe3J4Z(hkjmw0&B zSq0u7ob7$5^r4=*P$j4JV=G^&K9~N$b~$P&Eku$hWc^9==6gCX%7BgFrsChw-C2qG zw-17bB}W39Aj!7HvD5SasX4g+lSEI8=@T zZv|eS<~sGmA@qaeNwi{nity|E5q$nR=7yyuRNcKM^iT;uC-k@=*oy`pBOonlX?{H4 z9*=F_E9M-1UJ8%Su#v3h)7=NeOaMsaJBb9jPA9l*e=pdH^J^a48Xa?TbiDc8sse}C zVw7LN4yZ(Sr8dGPoJlQKOt)XXUUr{U?2y>+JLVvmjzaiRPo(DU!5w}rkI?t{!Cvxf zKx4ml#PQ1I`~-84@Oz#e-Z05rW&>q8THy6HXG*WNt*v%vYpGA)Iann(1a@(>ER=4> z#`Ih-&Zo8}5fK;Pq*EDBqYo$zTfC1p?@5I+^iy^F(ThYr&QfK)&dVNzQSVYkB;IWu-R_ zyY>K|_B-cHL$})D4PU(}FS-&&vD9JJQvP9)`|zlUo18FZ zMyFG6G}zAafOhH zID$mBxcy-|+U`K!yl^q+{cxcpFJE*c!$E3kv&yM$<9nnm>OyT!eTP8MI3&}@2iyOY z+u;jz92?g9gxcq$QUf<(w&zUn>v1@DHMS}i!V@R)XPXKg+xjVFKV|Z%&>OMOUJ{mD ztPM}hQ(C3vWM@ASk`C2&KT;ii@570!m*>WVjEAnB;d2W>Tp&|F9mta`vw2ixR>C($2N;KpJ3T0D}ct_R0Ew&&QBPiyS3q_u{ zdfYj4mf?2aFvlxb6Jtr=j8?fl7s@QZt8e4MyaE#d0t;a>w{*L)YTr$>&3Y1(wCmtB zu9_KcQze{*Nq337dyK62PJ3$Zq~P_)IW@r=5(mWO{LoF{X`oI9-K#ZJ^wFV87p{c6I-<2@i-8opjVx7h85LJKg_}VUqKOwSYT|WA z^G=*E7eN9wApVqFd_GBJ1tfW9HW>65tJ|3%XV%;Bvx|NfiI2U9*93fkN( z_YFV^)9hc?9=L2bAiDT6$d8Yqi|Q8*g33pcj&t4pn~Jlx<+Z}~jg1ZC0mB;lZ{%}Q zu&V3n+R20d$$jL5frA8q1{2^3UEbRcD1u0?dW89SpAc&1aa8o83A`G9*kB;>4DCy| z9RRl$F^{#I&_V9NEX>Ub+l^xzf1Eeixy4M$*JlGDkr6G7_nj4o!2)C*`F*pSncm+s zwYuQVBF;a+iGJ<@j)7ouV%jl2&opcSj7lKKk{i!s@;<~m>4|}cS3<%EtbCTzMA%U- zKdQK@r?6Cw0~Ji;GAIjRy_!i~Ydpeisi)Ehg)u4T)vP0hz>ERiiWk1#t&IG9PBF10 zo+keO`=`BPOd1i``ePmxHhEVo!fZo}Ig=PS>W^{x-vjDqHaHK4*aEy2c66u1)~n%R z>Xpsq`+WOaZ9Uq`l#av+#y)=B)&&Ewv!6Xv*O<4A18@1WO)=?tX+!Ao*YUu-y!gtl znA61zfVmGPAR89RJHutEr|AjOHn6ZipP69+e}fFfe#xO3H)S+EJ$+ilIZ$lUzG7yT zr+A!aEI;3gC6kXhx|MdP+O#8XBdf#r&1;?AYVwn_OU2bQx-T~sl9r)!;|+6v1^M|u zuk`XQfa$>c7Rhk{7G4OxNvQwSiJ5$!3UqXa(osmZvfX1!I8|1{Oubet>317~#=b~( zRU4*&A1h%tFTlswjeo20bozs6s?Q~ywRk?R!kp1o;3yBN^wfMbOpjAeJYNCqW$zed z#Kq9i&@obW0vD9z3?U z2BS&G)~a#JF&_mC;89%+cq{SIGpfeR*L)JJUB~l$XoIv{jlm5iVjbFjkTL_>L~ab{ z*5;dmno?i@b9t|~Y1M<>g;dWufb|wCT|bXA0b3QEag6A_HipM~zk$FB-Mk2eI=L~Z zz_T%EAU?wvLPA2&>n+I5J##54Je>Y5k6DR+pnb}4}Um?)lT>|)&5fGgl z-ZSs&kBUVebxnggUtl5hjDd+>4G_jP{zue=`{#U9_@YDc$(A2P1{NY2maK9d-vfQF z-tku>{VMR~;*Kz2L?8jNd8P~4f$H2hc!D6>i4X$>5DXg(2Kr6=fO$*hp-|LeA9KL|%m@3tQS zlr1tkS}l$bj3OVJ7B>%|&u~!~gFc;&iz`XcRv)^O9Us7$EvZ{-Nfj_ExP){K<7|%h z{)~<7UNu>Bx&7skhl`RbyMwJ$oOK5|8w(4Jde7!7iP#i0wuViq>521trAsUc{(Jmb z2~UyfEZmvRhy|BrfwWre5_k9J zGJy0BuILrX=;^!|sL5+L+iK4xs3sA5l-j_EHR$Llj6p_+?DTJ=;BVrPv_VC3)}lAf zEXlJpJDcUiNs#7%Ux{%bJkIK!?F}HOR#qmcP6HAPZ36RESfI6FMF9%^3qA5Z)lO`z ztao0#1Fsml`<-oVSHR8X9R1~iujf$O178ifbzr83eKb#0QqsReMH$&f+vnb z_l}?r5UJkYUg$u?R!aOZtf4T5wG91~450(1X|aH+G7Bm7G$5m6ax574T z7H}Hcg0Tdo^EW@edjWS6?z0WYH?1f`h90Lj^d=(1A3sKp>gfkh1AWj}Io}M}t9$^2 zt1FKG;cz9?5|+RxmH zKP3cJ_oc_-6UMDtC;G(%1+{ydHp}*dRw=ijU}vLt$DQ*dm?$>Bt#tJd7Pw1sy6;d-1m?P_Ti*O-42M;>_GznX;b!C z)@Y5cU7!AA@gnH2D*7hN&du@N;i^}Dpp&yP^yC>!V@b4|@SH>5&MG5ORPuNms!dP! zCVfW*)r+I=x}|87MadOA?Yke3W|*~~kfZ3wmY+wV6`s#g_nQevw1#6y%!;kzOe-2! z)r0SNB498L?~(4W4_Zlrzeg&YCeFI%NA3pgS^Umo>>n47XjeZGEAElDL1SDPE7Eqf zA>YY@a0*H^;9GqD9YKm+8Xq8>c$mR%@c~h?Ow3CKr7CQ5z2I?x zaFX3|S2)hx8pzdcD5Lptyg|5ym6CU;Y!*Z0}mgdnl2_by)s zf<4(QLYBk6DaNMOd<|;Xp^XWx8CaTTfiKr}>(0GKJGR0}2uC~wWB405gaQjeybFQI z#PxaVt=&!`-4FgBi{%}@6FGm5jP@V&-fncSDlZ`R9SYm1q2a?srFZ`t=D9g z6NE3t)mk08%dz`7OMlQ_1K%d@c36-tad)&`4Xy{*_6%R8P}6uE^aABJ|-;s7=@4fo}q(b(HkO##5WWD@gk=$h9y|r=s7MocH1{@8(-l_%~ z?9wU-H9)G`X$~6o-6rX1U!T<2T0SL0*9G8W^+%axcLfJ^BicHD&83d@W4lc|u125l z&oYVoir}GIJ>S@q+SVJ}+g|MT=S2_o-HiHqUqA2eEVh>PiNC3BGc%`fWjcN`<_vR* zc3FND)t=%AKd55#=RY$RXYG3 zCns1ICwpe*=PP%ETTjTbALds)bl?;b2=j>3PU-@3)XkCavCG#7s=e!Zs5nP$+A*hM zQ~0TVvu7d9LqwAS+9hx*5VA~lhBI;Zp;4QcMP1jgaXt+Q{;q`zR$3s|%>SB`8g zoJeI8n7M+xb5cO2Or?93rmgl5eHehJFGLLnfAXdlh_Rlj_FKMevC8HJ6LavQA=&!w z%gZ6L3KFbQe|z!yx5NifE@HcloIf#%W(7&Me#^9WdEXO<=n8-Hc0v6AgZG_JqN!Je zfP3HMjNwhOr&OuzE| zD+wTrJZ7ile^TRu&dLd>wxd z>Hkr)X7Cyf_7l*pH3v8r%DkU&EG+Myz)!B{^JI%D-akC#xda0f@o^-^6o2xd#;&c6 z{UGTc9@sr9xN zpI?;w{cS(KNDI5&T4u9LrTs6(gNUlp^EY!g;PNVUu??$Ss=B})r1`dZ*xw87AEzSn zGLThoJmE1UagO3fR+UGbmUP%r^HK6mXFNuJo8q3G&C}1F!l~lwZT3X1efur3wGM&B z%@3c2e=a@n3UZ&SplYeJ-Zgj!QHemH-_?IU0%+WSSiS!#U!*ZEu>mGCG$(f*$N*;N zr37l@E?QODjH5SD@K+>;X|EvGB?%htdB@AUVJsEbrGUS{=-reh-RGOeIPX<@@eD{0 zk>t-%bG}KyQ*4Pi!rwWvYg=xk%WTIMr)OZmL#()d5 zYrBfpT?%EYMcnX0eqP=M$C*d1!`*K5vNqgD<@WFip>1>zL`|YU!}@>T8)6SN3-(YR zrJxUx=0KifIE7Zd=s!`-cHOs-_a{1JS#JJV)SwkvEa--{s8YwI>vVPY=f+yDVa@$l?+QXiS}gO?ZF9(y5}5fYUdG_fJy%PQ z4{d~$c&B@~B&x#XNznH64m{=10|r?q_FPBcsr{@CKrsE`g|O!U*;PQ65wd13{TJtg z&ra9dp{7Qs(e<6G&z_-fCLIrzv6Tj4Avy5i@g|u@*T_(>}_rxTYhO#jJB>pm!oPv@URX7(mH??1ig zjqdYtQrcIvSbflebGFKRr)J=Lmz-wm6?t9XoEJ_^d~FopWyS+%>?|GaQl zqV9_Md%4GSwKEgy{#7lH65Y;qw|x<>BwUCROgPzR(77pJ?{v(lB!8NUs0Jy||N7O! zhLxaj7@3Xi^yY}iKW`1gf#sS)5zGJn zLt45L5&BD02CemzOhlDUoFhd{pi_^n>TL)@pQ0s;tu?{;2{A~QBhi5#Uh1Q z8KjRZ1~X0xd@y}pBfF{?mn59~?jP;?zWwu$#A(~m^z`(gjBz|2rbb=!%7TPQfU-IlI}c;<1O zwAa;*C7=trk^B7lMH~%n?daz7G+=PzLjr4|EpD;eecj;MU*mvR?luk*vFa zyE9J&S#81#*rGy=;C{yJ2LzoAi>Y(7{VMs-pYsynzyOl#XDiS=W|Swdk19XNbJ%It zr+J+_1{~6(v_J_gN!uwRX=X6SxVV0_x-skNL;ec*OoplXvlrC^71^vd@8zwf{9b%9WYLzogl0TV`ugG zi_rU1td?|&XzspKk15J0>*~)dk$hJ$VWiT6UaH;M2KZ@kQ+P+G%jCWtO^lAAop0TrbaA^9qQ`x$wK^4T4@c!ISyv}w zI!B(NRtX&op4ww_uFgMl8d%??4EQaB+pU*`Xp$Woe%}`7k$4doRh-WspLZRlMP^FI zeo^d&{}W3x7cDB%T^)5eCXLZ6Wqpq3qh1=!%I7b0|N1nvp9JSvl}oOo`zN{z)=;)k z*Uwi+Q5T6g{KTU1gp_ie^kUUf^SYSy%%ZFBb2klTKMc2q_XWNv>E-XzOL;tC{;b~I z4$TH5VvFjgBX(%!GaL*brrj75qgE)lp>076#RN$b{d17F(Y(7Ql~3h|#48J;HQps` zAf0mfL0dvvLnD+R6{gQG>Gr-7_fgA(sF>Z@+`vRX)S$$4MbGD1oqO}s*Og?iEVqWwRw;9#f4Y&CT<*S5`A_=r3Us3UA!H^@gtlfMGD2*J9=8;o-3vo|!Q}8%qVl*C;6|si?q~ z^}vAxP?1CDwr}>;h0;kw%n^luZYGxwE5Trcecsu{#Q>&qfD>X_8N!$b<`iTlib*$M zWCM7WoFXTe9~3xu?i@6mtcP1#+xUt zd#(7zoOE6s#52QuXbhPdu()}{i1Ct)d-?gWh=w2mVmo_^WsrZWG zp)_6X_SXWKR%mT~Lb7~uJ|}BQiypTWjMM>Hjxy1RWetgNi6NunKN ztupdwh_22eqykje^J_Az#E~%R7!A^Xr zmMPH1kdC@cQ;B&K#$P`PZ!_{$3rCW@yzTU4(^XAP$o}eMSC>wGY{JTrRtaT|h^y|E zC|AhT%$`p2*2f{l!9JI$#oFK9P4Gb4UzVFZH!m-eS54&>pmQEa51TjK25|m zQs1!3>1$}%O|?_BR*a<0MgVlDt)-SvFhi+2^B0&RprxvMd}HNx0e@RjRC`Q3 z=iS(K#qY_gX1Y!-BcAbhi`W5ySpFbg)R1_=-H!k`JYo0(Fob1AcA5N|E@^tIqxhR3 z-ER>EjOX{aD4c76;}6cDV&A(2Fwz#VYuqc+d{dGWd`^tD+WLwpBnWysP5k2-diJx;ye(e$J-^FVPVD9lx(d4 z8{y214CTJ~*w~aSO(6cVD%C3snka>361Gne2)b9!5`EOEubk$#u8;40xXxPfu*Q+t z;q)o@cSefU!gE{HWe)(MmBi@1%x055xC`C=fVkjyaqOx^pUDr8oD^0gV`*^ryPbLF zG=G`45#|ao;{#P$(jWNQIpx(xD&<&B8O((&dpqmEyq7M6I zXkvxm3ze6?tZYHF4*ghAg8)Vk^2|b=Kn6}yn=!AA1^6}?ZQ$n$9?#cGKT|Orx>L*t9eRS%pE^FA>Q^?nI$zv(QMD8}EaM%M<73d8lf6 zAIYDofB%f&8lY)@d;~a;nB|M^8Gei5RGvWRn&zcTGM`)e%C-EW4ZOf(^5StpAnG!JP&Zu|8CZ>s zl9*+G;^B8>X`~{&_+~3_37$;SlUox}4NDpVDh|-x&s`-JY^@5zvMdIg?z`fwe&`^> zVtXKc=SA{Jm;nrZ6e{Cu_5?fq2JWm;WE!lyYfJdtB=nvObv^=Po=_5U0pf|WF|RAZ z_ZzmsMgZ8b+_=6d(Mb$9ZiOD9RM>mtLh^>`_Knr!ow$d~t%x5%daA?Tq^8w!%I`5B z9;KGm2{m|pB@>3+@;vJEXK{TiZ=8)yLtTvHWAku~zxbXCP(+h9Qq9l@?NYQD?m%eT z9ixpfl|s|3s$46FzY!9cJHZzW?+m6EXTELN-agN7)lrnoz}v*q>O=BPVym+V{Yck6 zye-u)`+I~H-m5H7jz%XaC^-a_M4427pUZ)lZMnWNwj=6P2YmH)o>SAVFa*+KGvcB~ z{p+puFbM^a8nD@Pibb~J;ZfQjxJXrA$+2`xS|+1Y{yp4GMe679!{U^6^r1LpNoO1= zT+PffjmV)ZnPFkdS7VoIe>+lAxFvd@S-Pv7}7Gg`tOx4s=Idhy{4?xNbD>W_C^$Vc z7kK`#+#%~W3CTDGag2(YIi1vwq@zLF$oK8fNZ#j`g~q3uzs9=Pi$eVoo|(ks4flx`7*Umg@w5TFR_gBK=gs#J&!qdkycQ-?U=a$7eAP zMrL^)kN5&_o&zSgfScY4l?!6=tq})l5q7bFg}jSwRTo3m9vYf~l5Xdr6X({9Z9zzDmy zoePpa$!;Q9XPOvb!Z`Y+5muOIYbjn<%o;y2+g8M`IW_U-)hd)zP9Cd(lJ*rZ z)p1^mK0Yf;%LwQGp`i+^0ZyBwD3h5 zu8N(w3eqGhl zOHTtzLh2dlB~8pfR7(eI+ItN~ZYxI=wL@(yLR*@nb0sjBBkh#m8r^BFoO9ZO>0-xd zL2oq~s?N#i5OqMSw)KVhP{>!u zW@>#v#ME`}IZDAM?Enj#L}XDnUvYf?#RN^&_d`Z*`j@@|nbVKp4$0N;0i`)6F?=N) zYR+vu&&-*$dDK=#tisdIlAh1PY0VgselXB!Z+}Modl|N* zre5XZ(+R!3b<-D%nk4&Jx7B`~`xn2*h14_oy~~i9?RCv>d>5{^9iSR9eA4?R7CNJ) zYu{(>6D_@8{oka7k?OfkW_pwD0v>9Y4mTz$U@qsQp^}9_lM}N;dYx z@5s-+GngImYDuDV47Tt5poF0@D36YC(yq?WrkluYj=86OJI!-_mg-yDw8g|cJ#7cG zS1^aW57uxInRf;cpuECTNL*VjOu~}F`q}r|Z8(V=b`W=02>wEOm;|xqOEpZZNeaX5 z$J6h2_ntl-Uk@VvWHY#wt(vo&xX`R*7-Q?fb+n}hZ$a%Fq`B944+VB{~Yd@jFa=4DBf;am;F__&2_~`Ch0>? zwC7mZI@vW?`Pe#o*(3Erb+V#BXf+wA8zoazoEykm_-Z>1%i#%~db`Ru$9sBKe%Gx{ zD!BX03F>2qL0`bf&;RmTA&4ryUggKT6}){Pd3w>e=s-WqfwXI_PSTxen=EsLo-)N1 zO)7n7e8PKJ;@DOdZ3;VsyM(mlS@WVt+1pYjZvP+3z5=YuuG>}-5l})(6s0?r1`!Yi zX{6nxAYDp_geV~((w)*sy6Hwy=}ijKA`JoxNQrRg#`r(JbMCq4`h3r?k3a5M?^<)s zIp&ySJpW4c9w<+3qWcD1$s3{Gb`ZDh3d~L91AO*%WT^UA+4Jxbw+4);0y+Yu!D1q=A4%d6gZWenkmA)6QYZHfL@&)@d z$Mv?4%nwZ#+@>QPlawyl^5-WAVdvy#yQ z#{kO-J@>^(1LEn2LS%-qTD?0mu zxR&HtR2gk{ms*FIwxIUb&mSy3P}OiWgzY0RTjd5;5_C9&96leaEj zk%phz!XWhzqlw$s`s`-w+)mwUKdvdeQ4p@qnuQDx`A$kUCuoApd@0ljYg{Xl?CE++ zKFv33ao10r)VEgRuhCBJw$Al(p3G?3otOGj#5Mhu#jfD2z#x08jeFt6J2F%o*P9vA zP@ks&a1b5yKP?@mO2EJu!&=?JZ#M$QEVV!Dm&nsLZVC5%=yS}O+-vcMf~61%gViv# z;O5I;AwPsr>{&9rB`WJ2O84T-`oj5{iJ{PW2hPVl)CA{hul{Tr{LntarMk&|VPcx- z+o#4;-%mS230K{6!S99DQ-xPMYSpSG*$zof^>&H-)2yGY*p3(VsPEu~23Mn}>dujY zm?FHV>qBdXh>dJJ1vU4lGz4QC*=uw+g&4NHBnEu*6Hqlm{n}k8Yz$Y@?}a*2^_{;= za3QeXZ?0WFEEIXV00 z*EX$a29h2WOGwqrCxx!*`N*7BV_VeT1wW9J4WYcos`Q9ewOZ78GM1(L!v}S+Ch2IJ zEEdTt%s0;P?QdJOXh(u107bBr`RDqKjGN;=17(lRUT#5B>)Fvc?)k&IEmrevA`!;w z=9hf@s$xAKgyp1h63Q*ZB}WkEMC?j0X4zd4AC$`L&$26IckI3>aJA+5ZeYwwVrJ9! zFr~?2%V3wNnCI>HJ2M1+tV}d`IXFa4Wjt<=%ck4^a6P+5CA{IYZ>`?)YyC5~g{iF% z+TX|kh{`@}t7Q7EBl|sRcx0V_k-U>-e+tz-oehc4u*w6$k-Cw_O1KZdskvQCVcrUR z#{K@v?Z%+0i()BhYMBJWlw!Fh+b*0GNTsdGGkwA)!y8fMoT)#jWqzzKEu}ML+jZGp zy1~p*^>aOxHbrj1E%;a>TRYP1`yvdGO?!~kE`Q(!eovX=HjUr!Ah- zH|exfUFn-!7HQfos<9hCX_Kl9h-YtY*S(a@RWmJUw|=aJ;~^V72fSgCvX>y# z1qI9CEG&FOJjB}4Q}N%y&QVHyZt!og8)E$Q9bZ>AhD3iyGCS~YJbg;J^?iGtb%+Zq%9ev%^IRg{M)f5YV3clcoLP0thPNGIutX z?N%bEPv>0h0!AJhRrs9bJU%%E`&IT{ckXME{moBE)lV=Ey21Mq#tCxV-+8GdRpYPL zPVru4i+b0*PVp!|&&)j#!{uP#gR9_cSo}QMn)>}~4f3Wo5ZET23s_BqS=Bi$tHDjT zQ+j|wVGCHGg~*jiYh?aaets;3bCSZui^?PT^j9HhUU@}3iUCCt`m><*tLMolU&ywXNLVx*kdAP?mUyDGt%{MyZJ6i< zVTF`WPm;Clrt}Unb7az(Kc9Q1hF|$P^Ge`I!j~?Cwtz0?I@oct!+cE+J=5)MrYbny z6xs_>)tEY-?tv69-awmRNh$L@dyUHc_bxk1?w1bL+;Erfm8QOuu7ALVc(RMMiC)x_ zDi9f_^^!Dj8}xHW7*Sp5nz7Z+W#8<$f48xGZ}z(4&r0h%1qlQEE!8Qnt`EHPIe)a{ zDQ-Yi%zFmOxln&0=Mx47f?ixDFC_dr&l{0z%P&J;#m|PXA@h#|pb5FR_v|VG;r@Qo=cp~B3(eqT^<2# zG9JJE{e7tPX)w7sX5Q!WuE`tgW{xF;4g;^6=M%0Nx%ZqgS~xWWPfNzu5Zu;U1r%qn z5a*OKRRAebL=5IRKPbIOtwe(vWB~wtsRXvGL8<0LX~u~D#A)(hpuuvRF#?5T4;O+l zDHs@C?59Y~4gL7(B5_Xt+NT>gWI^*_v|7H;%FOJOANT>Cbv=MgA=zUSLF2R6g55Ov z=$ulK2J2wFF+%wKRO$4i2rQ4hw@RmyJZ?9Xxhw3$xRe%#8lncxS6rQV5V|_Q6tKLAV zOqsJA$uCcEAI3h|?%xGLUm=*hGfl>oI}vXlKl$L!P+(l_)nzdT8s)mLMxfIOybiBo}2epli&y^^;Ls0)h z(7UuAW>Qr$ZW#$;39t>V%F6OHUB4(brG1PpautV?G9|9<~d0p;dq1iz|8mh)- z(Yrs^Hzdl@zBoUhO4-@jny1Bb0>V=NUgBe)k`F9lst1r8)0?;KTv3SNWo^1#se1dp zi#zorXhf{t{zP&>a$67JTm`0kvVmaLjCDy<>*OT|ewRZ`_q(yKR_xMSY0J-1*?4yj zR2PHFsV<*MhhpJEu*$9Oi(MYYr)hGgz%jn*ao~v&64_8sclXO^~dJ#T+rXipa$*y&dP3-Hma6PbFnL|7tq}hop zowqJ{ADUsd<#h~}x4n4pj8$i~ zr8&KeLHXY&j`6zL`jsV7njSoPb&VF{A_Oz^shprhrn1tu*9!tVgiH-y4FXXJv{1a_nvoI zSX*bxEZ)7`QWRs4>eY&dr-m*&P!dm}%?4dOV{SFLL6P|&>NId0#1+hxW5PLOeC?Oc zfFV;%bhOG9nIupoEbR;CX7qVrlRX3|2|y$ll;Bjnd0_XOk)eJYqC88 z#O62|dZOH-qL@KPSJLaMDxZA>8+}xB`wMkz?qH+ab$tw8zD&0y@`4lMG z%X(BOjiP)FH^UvNWG_J2rdLs^aV$trPELktjEIl5U|u3rfjX>UG+$W9n}E~3zz--u z^iZ7b)%0D(6kGVFCb24-n&*}V!ld60U9TNJ@os2hLSJ8BDb|TT57(!WjQjG9b$;ECe>qv!ImT(3h z#_V?nnimSct0v;apa@yypXqcPy~d>9zu z6pDp%#Y{tZ1{5rKMBc*K6(~JEKC88Jx6dUF{7`yAUC$)X7jGkpByUsZ9hqovs>Pg7isC4m0y-A!xm6FKq zmgLuDFkM8ms~%y08Li?WKl2z1+bH3fk*?&Fec+=)EgGY-4b}@rFbq=;@;nP0o0KD$ z*|3hb5sS;Q=l6!2(F3oCz4-wOK!OVS6!Y?;BwY%VPkIs}ZH{XY8jWG(lNjM(;wFki zj!^4p?>$F0q+NrFz8Dnd#?Zg%YOC6{a2&~KjAX@42hbcGH0dqnyUa0UVad2c--2Vx)-U zpTwdG6K-wgzt|E6z^MHA-?1ftH8T)-(e6-X@^6wKN7Nnnh#CR2@=JfYVO^lx<@QUL zSij0Hv#T7k9uSNJ|HHRa-+*#vHd1U2{H|6bJBQamUwChw5X#OlH2t_I>9kjTkoB;E zL;KWT;&=XP&ECC!gOgN*ckaUi+XXv2If054Tx|$!Wj(!pa`q2p?5B~OgZC%l|0Yw^ zrDpo|vAAIkLLK{D1<=3oB#}HhDv^=TfwAUMsY#AbF!kIYT*MsUfq$U$0}MJOu$wM} zx2tL{36*{y{N>3zz=HY5(&Z1R^NvA-ea!je34$LTgBww@Lp(`U0Ub&#l{`k6`v&^6 zDOCfJ=@P4KWuDHj#=^do8?CReSCDn|msqFJ3sh7ov9WOeO2zv7`y;JmKWmsJ)ajnEk*OY?dkvBiEwstBU#r@x!G_a0>NJ&z%O@`G-P4hU z6F{76sSdGtU6xF}Wa4Ot8}?7>R(R`q!tOYSN9Y#e|AiBo$6TX$7S4$9$SkXE4W&E% zWVJ8#(xN;Q@LbSG^Y4GuTmLgf^Y`A=A=Mdt@*7mM7ZdU&IfC9F!*sx&mlqZX04}dj z@!uT6V(`ED1eFLRss8xYeIXO8Av`XlhhcutU!UBd3^y;&C&V2tE{X>R1<8W;F z@42BaCc+SI*fd5|fH_ol_8h3@L94zFs$$X+fE#wLDags6HctiIH0&;i7loHTJ0f+? z3Vw~2^uq{~KeX*jORzFfH^^Pvt8 zF?i*Q?}`5`&LO*_`mif~)ieQ%wenxgtVfM*^v8bPFw{V7ELR}2`Pmfe_zI_FrS$yX zk*}W`iap;U@Mov2yATW7O+O_}gZaxoLy)q=q2a!^^lIarL}XOdHNeU^)Ij2xFs-Dd z@B4`HMIG&9U5P?yDQp@a19Auu?aZsVO08E5fxbV3cY%#vQ1RF3Y0J4kOYFs>xle|s zTS~;o-_SeqQN&{&p{|Mj=@nRpH9|t?OIYKyti`>a$FKxi>R1@w()554#>j76v2UsA zh`yH$biw8M`O8)?J{%~Oo|j|2q-h9d)o#&_6;?xrAX~WxXwp>5v5^fL{!0L=Z&IS>(VPXUPu9CR(8r@-O#`(ceCxU;q9Drw>e~ z=wnsLEA7muhotq)12rv@czt|aLwCUA;O7>Em&9|yItDeH)3-_qea1hM=i@v4Cg9$g3_jswJ3i3w#Bvf zYCnT%t5w_2wUkD>!#y5A3vHk05f{d5j zcMEOp5tvA4COS}RsrKdN^RGQ}I395xKbY9ru+Bo-h)`0M0s+U&#l_`qdCy6Zfuqnb z4mg=ULcE*t(5k*K>&Lm>f5eY6A?rT$ZR?_QxJ;d7NY*&K^LE#Y20F2nipa1LgF$DW z|GF2ZV;dh?3n}(9RZW%S;p6vSGv|);$xqni14Jhb*u^c?)$8(K|5c5&TsW+t!`Je> zaXG0&9Wj8Oct~ozji%xO$2m$iGqO%*Au1ZWhO#z^%`*A$>2Hf@YiWUKu}nNjqk}8- z_i#rT6oFFLS_se)u;)|Fjl4)Pqad1=ldy-O*vAXs^2Q5L357;}m~;!1N+r~eKsa0n ziSo2n)J zhW!-kKyvbFu?AVvy-`%Wd%rJFZhMY zGw$Ru*uP6Axh;)L1Le`j?1lz?8_-hB`NieDBuKQ_5F8x*b{Q;KZ@aU%)4q`ntfeRs z<$P&;@cfH>(sO2pz?-!2+0u$C8}3BE(;d0|49$CFL7K-yzpx-DC-n`qlY*sYJg+xB zRZ%$@i=Da74phT|0ai&t(2fUr=y&IFeSxz(vu})uK9H7}Ql}@HBu7he+Yya!@4#2j zG6zS?Z`~KLF(EjBHncHS;Q$Jy=<1MZd*|ER6!fXOZ3Z!B+&)(I)CS=hDt8)Yx4k(X zo0s(o?;eBC5dTa+& zSQt-pWSQHHlq+DLJ%eRj0d>ojJ-D{<{e21HSU-PfnDMNw`ohDu<0?0N389Vx_8ovJ zB(I@HmuqKN<%m-kvcr$)80hZ4OD+ZY06ST_+L@+L)pT<(XCJDermXy$l*8vE()jcV zkXwX#Yq&O-rNQxeF~9!p9#(ck=vIR6F=(pT7alnFnucal=JwVmP8wyV`OM_c5(xbu>ffW^FwsFcyEOmm~8Sl{;AEQX&0vJTK{u% zWZE9|zpD=38(#5z`XW93#&dt!wy$+BS3xTPz7_pfF%Y^|^I#{o_}u%Y#coqDKk}&* zy=Us%>;@m8=R~G5!h_7whYUN;k9y@CcpI>8#h^V9)Kq5Tuu!CI>A*m)=CO^wloMnd z*iQ^M&>PWxx&ZTdcpwr_K^|0@01xYl&I8o3xd}8@di@>?Q(M{^wCqs}YgN!#^fTxd zloAK_D*;vXwX^8SHg5^KV~D{Qi-yFr4vGr5mKdoBb}k}USUY)WE*!~@k9p^x?T$PB zCkbU5!31X3YZZ+(m0XhC(-PRxgo$e$Go7xZEKA|x07-J@*+51`f2(zO9)tsZ2w^ex zT%5t>!MH3ZE8mh_%GFh<=($3s3cW_FF9QRJEj`av;M|9w&3Q)egf<$`xs+v|43x72 z2dqkJG}3$@ND0&BHe+q4a8eaDc1VQ8WuxRfcst|cFZhzHUzd>yIKv+$8Y7#8< zv$w*P$Bt7BYxUxVH$?zMA5`L5i3jRL%uSb#sM?XtXh+`kQH$BYAjVUPBEYP}8v#Xm z<1Toe#anhJK7vpwPIgPUtFYWN&S~yexPP8OboApQ>x^wF4W^A1KOiiz_GyNigV3s+N6eZf_?w>`|CA=|cj-m4a z;Rb-SR|h(W`_I!JnQHWwph@L9iT;_xnUZpxP!gITgGfW#FzU`I2Fz@Cxn$IoA|ghk z;QQt#>pPmT8)Ro?GPgmB(pYKuJwN%Gwd)=TO|o!~cG^iJSRWE~ef<=|w93jmWRmRd zAnoPDeh?Z@Ye}C-Ty%`|Z52b2F@m0>1l7zP<)u+aM4PK5^OT<1H7P}tw3xgV!@8Sa z@wvtN_d)%062-z%@{GQOz+y2K7<{DaXLRjO>*b`vP}|^$MF|_8=`50)B_=WhjyB0( zFz4gr;B?bqdX<6dsqr$M_e+p!qWY<0n`qbA8gbJQF=^rz9x>w^>maO2`>-18X-Qsw z-V?bJx~macR_z3O%%c7JK7?&9pUbqgM3Y|LSUINW45EMI zh>YW(K5-er-Mk7~@iNUa85=4FGOLrFJ_|}VL?HMG!WS9&_Gi>=MR$oamm+C+Xwyjo_tos! zezXK5(90W@LY|6E`Y5pt#)~$B^!I4Vg5Z7*Qvt+ogZEK>X3t9mR%QyDqB6dqYdB+b zc3x1Uaj^doU7o%8*TxWrS4A6ry1E&=NxpEE-)C?EBv zDRn7&VcII5k;6>`2ZYz4Rm(&m>XX8mU221BJrM;ct?W6)$&~&+Z zA7rSE*@bk2B$;n$bM{DM;=M!H!x8GVlVUUOYu5+9&OcQmg;P!F;z2JI(XU{^X|ocY8s}6XVIc%yDBYO_Z@|QJ~2$Xn}h5|GmHGW~u%Z8&<>*7Sj{c z(wsu$KdU(;HXG}Ps>^%wF*bMUzmmA2d~K9SXx0EsI~=NcMgq0cbAN_*YN-=|^70|aNzk3j8&PjEsz+8hP;GG63sSwk_3& z1mPQRk5q=YnK2z~_GJcsf_KVVD^m(MfP(ibnl(^YSBIXwGSohJj0aGnHN}658|Bvb z=d280ldUL<9(bv6SG!Is*}qb_`fSB5vJ0V4*Qzn6>QCw}PW=$`aB!mVjkvjaF5%+fxRS5c&W@S*5Q)tIgMc!fjD_k)roN) z&6HS%-!Xn{t8?hO$mBAP-02UHgIY5r1x>j2kozRu>7ask-K{n$q2R}yc4K6|F zs;_{T4g+2qmd?7$_Mxuw%4n3@*j2msxQbw{5076yw7>qL4j-}QL4E{GfAom!u#Q9x zWgXU$k{I-71Q~?g)HB$ZdPk&ODfCdpb=TB1WJw@j@PbN8ntq!dH`JXus0b|MC7v=k zZ|QO%&^A;OPr((Q;hx-nuGzTa0sNW9r?&UG2lKj)ltNq}9A#l{isj5NxcqVQSk_bO z9{Hk_LUtKBInsJoS|$`6BaWmRNv;w4*W@M^Ba{u(#bkUxbL0>CYgyUaUb)nRKF%3$ z*;en)ioS78Jw{qwRMb_Kg%Hz}P29+4PwEW=z~FEqGHD-E*2Y_p!7;g=HFc@RaR!B& zV|DHO(&8?BD#y8HXtszsbx2?5gRDih?0yW>l2)`MWU(}uWq~j;Jgw~=^|(7_pAM&P zJKEA4_Z^b6u6@XHJMH?Nm0CEv=QVHdaU8ZfZewFwsXM0<+DW(y+Q5);Y5DbmpAyTy z`Ab&=e7ODvudc~7_CggO>c|(5qk~j@#7oq48L~{FSJ0Ciw$q4qxmK2ckix3=F7F8Z*Om(+0uZHVQ;S;2(l_Vml^4D_Jcs7 zu`W-PEQ~e>%|yVl6Pn91XDzxt^UU_qfb;M1lItKsd@DxtyLp@1#Q>tOy^ADq!DL*~ zk&!KTp$m9OLTGa{*0Ph;f0gm}{$v5nM`#{r-3dF$un3RI(~8bil6oH4lp#@7eg~ed zU08gcSEoh2cFdX%Xp9BlT%k)8z`Y0-N7$1Ll@_zI0TKIZi;+(B{8kY^AVb_J_C@Lq znn`64^t?6R2m1M84U+@!>>zBqC5#Rx{OpLjM1SNHK7JUg8lSmL z1|qRd9P5*@PUz8xMpw)!!?s(@G?D|LN}Njg8Qh@C67hV{j|xV1sFzst1ORoK)0td& zNiOR0wb5%Q=b%@$=>BhQgPp`giQyx$^%#aQro+k}&2RLt_4x5#F`wTBE}CZW%6?99 zj+TGeY-2Lx0FXf71@K-Vm8b<7$iUvINJrv;oAg9yfhXV%q=7r^WVpT<-p4qcBaC&U zseA|_A%j90U`nU>sLW>d!ykuE__~I&@^v>J>p4q=25>+P$P=lE{3FW}Q1L2_FhkZ8 z07G_ReB=soZRf=d8z7|d?VJGMh&`pAg} z9}@$}j8LqboKoQa!gWg8m$oNND_`@vgN26b0G~p{M#(QtN*1X6g+^eswe&$mzsB5V zOMF#$P=|qOQm;w7TF8sr%w$0zQF+@d;3jR`u1itYn{VyMweGO{Kz|cm*vq>~e(s?7 z5b1R*T6OxeK!`NG1l=P8^89xeo9AZb@0i_5H)&E<4y13Q@KXj^$zZ9ZH%wJMRgnxA zUi%Od=x4Qi#8CtokoTBHN=YxS$#;3t(-=Y`Wp}NuiB70R$N|3q;Du7hl09*(ki4}j zHO|0@q+FT%LrCAeU+7uO)nCB!4j-4ti0i1nr1OXIB%(T%iH|-AQ!Lzn%et`9r`oUo z9b&h^P89WsHzFW%h9p+HT}=ZWJAeQ^R8m)$q(+8dv2Cj+;CrXW3gwd0V^tVd1peph zDw7hTB6ST$eY?jqGRmRlcJZ2S zxC_}K3TX5`s@`jHT79TMTOQY?}pUo++{ZHY^4;&lXBR~z-Pj2FF<9R@EPm2 zBLNS!w&qYbW+qAV2uWHFU6YY>tb4o4FhX%o1E+Ez*BJ3@Xj+Z$X8NmFVKY+C-{$2O zKOr&$B7@+Q*VJ{_HK@)>mKi~cIxRLcdmZmPKzJJko?Z(J3kIzX85tR6WgplMpt-G6 zvPY|pI&%^RI0%EKe$pgl4SoD59a4-<0}jNz7iJQ*qi4jz6GdEsoBqbM^3!{+IgZ0b z>p>cLuR$wrEzRA|=~~Q;-bznKF4|1ejtCnKq>6juki_SYjE{qn$~TbXfJRSP*jcxV zmF;c825o0MyWa0()$s3YJbwz;X>WlN(VorN&W`KOrCb2#HGD)QXPYd>9G-WwOt@Y0 z&W8gQV$GJQ{AS@_r(TFL)qd{puAsyTHG0RUu^vlIkN1xzc(Lg3u33?5KqU$WYH5~c zT^8|LkBUE700v|G7lYBq3~!|`;BVK&3gtX z0X>edX$2_oQib*1yVN!#sn$@y0jZg;oB=4LC;tH6`-wWmx$mSZc=m*rFIO)qi!S)J zEJe_3Cn=$&K)gqZ!Oeq2La^c%%0n@f_8(uRu^OEMO_ES0T+Zg<4SV7By6Pc%c~W+U zPYBek7C#J97z+RK+^B*fp(40^v%c!?;JGg#aUE^V>vdg~BFj3|al-$|5+1{@JrEt^ z-iGl3hMvI`qWY8G7YSWfs^&mTg`LR(NO^8l7Eo`yUo<#UF19ehT$5c~nwJ*zwn4pS zjO(qQfclpAjSqER_t7-UGyl@16vxNjp1|p=_)}qmHbXH7QNUZnS1@yXoB8G~uw%3j z6%Ic#&~ls$dPwK;+*1x_A~AGHn@$l>ZWmJi?5G-5o0I-EO(k&3{nZ4 zt*=MKV2%@_%kPHGKX>7O)e8E5VTu1xw$#j972GPkB^5J{OlQhL@V^ep(_qV&x(XBb44Yk zE+`P7xz*XJJPUTKPGBudaoWl9HM;4{RbCUcoZPf>^^3Q^$E@Y9TjrNIRQFB4{gZQ? z=f=gp$o=3M6t+{F@yM(`C*W7(OdpZZS!)g4)^N44gwroq96=_g=}3?D7^XYUoeRK4 zNAcsSJ^0sCJ?8ygx>3XN6mIr3P}W66I*==G-}wD5EJ(seJKOGq0mRoMq80WJN*%Uso%f`_(UHS@H}ii( z`xrc=eW2f`(18Xbh{&Q`JUnlC` z`KB6r{#F)jFV*%FAYyTUh!&+nc~tP#WC(bn%zsnQ57 zVLb=dvhO%1S1z?y4s~#m8;xxl9N87eFxqMFn#114b1Uod_>`c3 zobuGW*xjqdNh#vn462u-qHU!%EYBl3`3)532B*JQ?i=I}ysL4vzcS&+dn7VYpT=}B zG5Fh5WIZnLXCiVcfcWnZA?3yOzcz8jv1>|_r4JSvAF_XT`2G?)*yW38WRD)tlgBU7 z;Qj#?^NAXb%*agH&hq`q9~zO^^QS$x8A{k2Puhlia@;s%B^9;4DewaJnbDX|M+FVu z(O1OyFRysL!;+Tx@46Em_jpavU_@_a$)2O%{`;cXS1H`%K=Vovv3fTm|Nboc522?q zge6G+a83{mk6OF=_)i3W`TdX@g{f1ywkKmchOO~;%XB^=S6W(Hfd2=_0uIOYV}Qb8 zbgb(m|JAE<4Rb|9PWN5|zT?_n?mA*4_lx`RCw}k91tXbr&nq6PPCT|BoL+-^^+QUT zE%Z}lpJLE3M|uAXM(iyi6rL&ts)5w?GgW*m+2TewCWqbU%>{5(87*REL)^TU`L z(%R6_(B0kL!GSkU{`s?KXCM>D$7du8@b>lwHX&t6XKyj(h~1TCpQF$D7^X(ZqxT^m z?Y9QdbSfA!I^QYV5Ut&~KQ2 z^}^u|*fj6gG8dsX!thJ433>CAbGh=t8>TZ4;${nVl? zR>;0K{pWD5S+fAtQUp-TvoGEWz#FW42ba_L*<3>6|GWx11NbBJm$AKA{FngSDBu|5 zjTnKm0VV(0pSOPP&o3V&%I^)J_a{mr_80BMCVq0RxxSm^+J2vYKwI*{8Bjym4R0oi+C}VjJ&z`cf$ag^W5H7IY!lT->IU%yNlh7>-^Vl6wT7- zdWs``Bk@nR)aahw%2fCBL6`HF&ua-rB(&iC{a$AeU(IB>{QOTXG#g1ENncx~(-;I1 zE%#Q)hyEqn{}uYc(Ero_(daBh1KYIh>iNLL-!}kSHuCUnmW^N?o_2I{6|6qOZ~{ci z>J;^oHUVF!^fhnJYS<_ zxPPCZa?5f=G@pQgfaOT3H6&edYX6ZV9u9g!j`)v3&re_y)@;>2Y|V1C5euS-Conzl zjiBA?Az=q$)?ZV58=ITIUED#tcmZ8*p>4)&N1&Vtwf<9XDUZCjf`SWY1n7xkObiKH zR{$L ziw|Inj3ZZ|GW8*B0K2-Fey0*F^0QAGdogiMxgEffUE(Qv#o80jyNjT9!FYtzhj|(a ziqgyDbw2`_k_jbXJdxB+BTV2h+IyGD!FFa#)aPc){`rJz@2>7ovfd(N?GKmk>^fT) zih%GR4=)H2VAsR;{vZ>E|My58{y|&=+pMh`U?js=*S`0wLQ4UDQJp{E`psetq}-Y= zKc~DVd~YPb;`%_RZ2I+#JO%2$)^13_L8lDf?a>@3w2}26E|;M__$c_TQj>SV1MPd+ zpx(VxoyUyETtxJ?k(`}^(5r%J;HioI0PMp! zujWl`zZc-Q`q(`>TKk23PbmXGyl(raYIDWm4RjA<_pyFfgAr1fusV{f-g#%Qs0bXO zRX2ZrKE@Yx4 zxQ@=wHwJVg97E*Ko$;1ux&dCKIZHjf6KIE0-Eg;gKugS7dHP%%zqD2Zg0v52Z(Gp8 zGl|a}{c)}mjk<99Z2Nm{`-8@lmmuf>K7=0AX{Y7y3HR$|lxRf0y(R9qSy0+>^_33_ zeG<0?{eh~j9nItQ=p5afPXV4_`$mj>`K#{C#8sVn*7X@Mb^;MB1h@Gm1aKlsK(fqJ zgukP^Xy#3%chxO5sksn~sovHWuVUz@FU-lC_DCdv2ctWosVhq7EB*jE=ZC(TJ`n;lgR-bN~g~V7CojSt; zf!H2U@o;@T!Go$z|K}|DS@nc?zP*K8j2*ciqvsaD6L2VvEK-QMakAl=XY2H_bGmH{ zD2Bdi2hMAt4$I|BxMnXMm!%@Oe;8RoW_JfDfuW9Nt3{JX`OhId-p1|K5Ro9+_F5P4 zqVsX744cidzE>X1_0h*V_uYSF6YsP|L71nS!>Sf-%Mv?3JUF;TI^x0~I$-0uRWmU| z#|F3+$DTs$_mg%>0Si&3(NT#%dgZuqXvW>w6%M3vOR&4HZH@ZjQ3zkX`jaQ*K03ft z%VCbYOa))SdpH#=pb-m6mC`{>2X0A*tFV!-!tHM^It|h21oV(JVM4#8GQpYH_1#uK zMCEtlB>sY!@ZkQ1g8|;-Nn{#=4adSFX3lo!&P26T6FApEhnQ4iZ&9=1aem$n3Q_7$ zvX6u-QJ5DC@X=oO?@@U*dYI_6(MAh_XSP@tZ-eN3$+NaK;iZrL>Y20V)$})K(ShO) zmN$_7fUxLgP*Gp6H{Nvbe6A7w_QF9pLQj$V+G%8==#`gO2dQ$}4y&%;iyftmNS0*`LA375*=O>`GpJd zpzl`@#idgzZs}xR1|a4(+EnqEIwjf`k3fHSsSIZwdL%F(#!LaoH<|{9aCCAyWH`$A zfmxD()zZpJvVFvUAYQj``sq`M8a1Uj_cyS#Y z23f;^p=-u#LGDNRd1o#K!eIqFTa+veGxaX~5{-=N$}BdIPsF3S38PSeP$$_4s@%pj z>xStSx+tjN5|Uhbw3Eu7KnVxuHcMdD=40_BxX_E*&z`wO8q!>6G*&V0mRDIBTP<&E z`%U|P9Yc!bMxnA3jgy(yOh!KT(f%f{ToR0u_vFYAPyX((T%+_1;tse&aDkiTvE?+laq2 zxII%k{S{Qo>bL4vzdZ~~aa+uVw`_GyA2#qKc`#-WJ{<6Q2i+@28yna0KL~7;TK>ZY z@B~!RhY;TOn@eJ#)QDTd=CGyO*+M+OwT5T3stEV;q77DzOlF^LxUnchn$cGRQ?iQ$ zw(a)UNf!}C(^h#Gxn;CjGSK_pX4Ka1fk7p=J8lHQhcOuT*#YA><%6_RqXYN`!US#j zzc6hL90w;Ss4@HGhTsm)Mio6~u$OL7a`5Cv?_2I3b=z(Tht6T{aX)~+wV*=V5T{pP z+0CF*^=4NGrI9I!2)_CE@C}6KKU776kCskF@c1Gy9-+;wU;uy;8VLI>Xd$!Ch}O2A znu2~BPz-=y0G#Is557)zjY6pa_X^^YC@ca}{D6%aL(N&Z zOy6v4?xgRlMxOM8cEmpg3;s*$v%1Q~!Qqk9)3!Qr2_OSX%6)K#goh05mih11^h@6ZQAEufz4AFci>#K22Z!Ti0p$0Bjg(C`T6o_3GVWya#%zqQC<9qP(~kSF0Kh+ zyq9!|%5jgN@2naYgU8fLZ^EDCYaoq&KyXswXO6&CA;Vz7;@TPbzTM@y$&b#Bu}em}N#M2Jbc)Ko@o|p31~5^YqQ6EJx%=X)^lYw-{RqDAJ_Tuz%jS@&^OujW ztLrgbT_sn*{Kmp#()XOvLcINqI;LH!%4J>}%o*8aS0<&G3anu|ERb_S_?(-bo+HSa z48xK?D@>{*TyIp?_Koh4c9AFd2}E|eYQH{K9YVhnENvO9`NG8Qc{o8)&p6HpJkK8) z8j|TsYZcQ?cKM968^@vlWjd%G%?Z17)yaKHdxA*9eTGf{1=|;JLtSSmQ7eY}zE%sl z0t@Nj8F=t5#B0OZ^8S4>&pj7VG92lJ`K4dLEeth*X0rLn;YisY^JPit&%?ndYd{qo z1lO%=IEKJ7Wref+AwG0JPEl^g75(J1m-|!n-<)pWS?AJaYf%o_imHy*esifc1Is>P zxO;D}77$aP{5-L?JD2}J9^UN4kMgyP1x(~j&Y%^{DNmgGsgGg{b36boFkBiC{EjTO z24x{5NNWR4lU=iFYDPTER_3-oz$ixP?04seAD71N_03V-uch(X2BThHetzJi^9c${ z+dw>kLWt`l+7}UQEvdLTl~?5D;mNhED=&qMGYdLvfm=96L|l5Amd zI04{K5Dv`Z_b??hpK2Z-S@%Ft2ec7{zrkNfC(hdcAx*&fb1!aa5IdxLjf}LPI?K$9 z(QgoQ(N%PJo{r{i5LbPU3v!LsXB*{QKgGJT`TcuX)(_Ox)vpUMB=E7=0K|VkOBO03 z&=%4p5__LciQP>ZAJ^+OoA5gD2z&|G8Es5OW+n%%5J%vUR~V;|7g)Ce&l1@`*wgdM zpve!8ubmaD@x={)=9D$fK&|s3%?)tDw7LUUB26%hEZ%7UR@qijo1w0kdgI|bbZ~%z zFY2*6URPN59v`j~B@yt;r2^q4x@{2Ibr1b;>ryx`9*2^A^OS9`o7ncJ6GDo;x1dm5 zpe7X}!S#TYGMepkr@(}ohNL};hXc9C+z2TdSgz0b2;MK0gjqL!CPXb7OR6PvHcs^G!0?#r`KSW{6Req9oWOiMedPoN78!E?3# z$BKoq_<^6qdQ69fu~n;!+1I&j9wBOdVm9=M1y|h$QS*CEJx{Ht^>%tXwVo6Y)GV1( z_1j_ms{ZSn({ijeXt&0id(HR<`d|L^*)a7%dY$sc#;x-QqQBC|!*|sHey7cIFYE$C zyHH2XvnH>lG7s8aU6D3mjR2hk^PX||K5UW$Xa{NNwa9nL_D%Idj&;E4;{tm4J3R}B z<3-6{`>r%^!GiV{f$A#Qe@!;60u;u+1RWJzn);p2`_MwEX{%;ZN~ZTeDYF%Hz{JEP zqiu}XYKvkkC4bJRtKwvSlA=8?qhC~qy+xv^E4CF`h@9arxI7NmZ&y{TQTPBClAyI3 zCidOmf3j||Pk zD#^7QwUGP-35f5*exz%+g6HpW)paF2JYClnk)&cYhK`@5<-oX#0wOiY#cb=S?Gn!`m za^|X=i36W0Uh}(eMw%sJQkzSIw*HP6jqz$&FX!i>IIqqR9U!55dmmMeT~0 zdg`EA>oI4~H58gQl&>WhPTxkSl39N@nMY%=z)8rFFwaojy!qKRbFDBe@!63~p8;P! zC6z(qF&OE%_v~tAY1BhVt(GdsAvfQZ_2>86cR$Pc^JY&MTI{e$Rn$l;Nva{Ecq}pT z;)TsP&org68`Rn{R~Qw!IcCol5ep~4MlHOP|IYA5szv?f0hZME8x#d{Pu1S7^@bi2 z<~Il*2qzWQt_9A2sR#CrVm1##Ti`�Lc)MezMn@MSN~Cmh6q*L=!cy-py%|vd;9|aO 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

      *<6#BqqPcc3}05 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

      JTC6wK<}(-^$-6n{?9ix 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 literal 0 HcmV?d00001 From a2d0bfbbdfc7cefa1bc12fdfddf28bf450021bcb Mon Sep 17 00:00:00 2001 From: linaaaf <90840263+linaaaf@users.noreply.github.com> Date: Wed, 5 Feb 2025 19:00:38 +0100 Subject: [PATCH 07/31] Update mendix-cloud-grp.md K->k --- .../modules/genai/mendix-cloud-genai/mendix-cloud-grp.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/mendix-cloud-genai/mendix-cloud-grp.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/mendix-cloud-genai/mendix-cloud-grp.md index 5a49bcd740b..0b5e0044a25 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/mendix-cloud-genai/mendix-cloud-grp.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/mendix-cloud-genai/mendix-cloud-grp.md @@ -73,7 +73,7 @@ Mendix Cloud GenAI Resource Packs are available in the following regions of Mend For the Mendix Cloud GenAI Model Resources with Anthropic's Claude and Cohere's Embed, we do not store any of the requests (prompts) & responses (answers, embeddings) sent to & from the service. Neither do our partners Amazon, Anthropic & Cohere. Your data is **not** used for training. -Data stored in the GenAI Knowledge Base Resources is stored in a logically isolated database only accessible by you, the customer, through the Keys you can create yourself in the Portal. +Data stored in the GenAI Knowledge Base Resources is stored in a logically isolated database only accessible by you, the customer, through the keys you can create yourself in the Portal. ### How is data sent to the Mendix Cloud GenAI service stored & used? The requests (prompts) sent to & responses (answers, embeddings) sent from the Models are not stored anywhere and are **not** used for training purposes. Only metadata about requests like token input/output counts are collected for logging, metrics & monitoring, metering & billing, product improvement and maintenance purposes. From 91f84dfaefeb0da79129eca1a96be328107d8c2d Mon Sep 17 00:00:00 2001 From: linaaaf <90840263+linaaaf@users.noreply.github.com> Date: Wed, 5 Feb 2025 19:04:53 +0100 Subject: [PATCH 08/31] Update _index.md small editions --- .../modules/genai/mendix-cloud-genai/_index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/mendix-cloud-genai/_index.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/mendix-cloud-genai/_index.md index 18f1aa12e1a..99858df3311 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/mendix-cloud-genai/_index.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/mendix-cloud-genai/_index.md @@ -9,11 +9,11 @@ no_list: false ## Introduction -In order to help developers get started integrating GenAI capabilities into custom applications, Mendix Cloud provides GenAI Resource Packs. These provide access to Large Language Models and knowledge bases and integration between each other, so that the most common GenAI patterns can be implemented seamlessly in a low code way. It makes leveraging GenAI technologies accessible for Mendix customers and partners by abstracting a way complex provisioning processes and turning configuration steps into a few simple clicks as part of the platform experience. Feel free to contact genai-resource-packs@mendix.com to learn more. +In order to help developers get started integrating GenAI capabilities into custom applications, Mendix Cloud provides GenAI Resource Packs. These provide access to Large Language Models (for text generation and text embeddings) and knowledge bases, so that the most common GenAI patterns can be implemented seamlessly in a low code way. It makes leveraging GenAI technologies accessible for Mendix customers and partners by abstracting away complex provisioning processes and turning configuration steps into a few simple clicks as part of the platform experience. Feel free to contact genai-resource-packs@mendix.com to learn more. ## Resources Overview -From the GenAI Resources portal, you will have an overview of all the resources that you have access to. From this overview you are also able to request a new GenAI Resource. +The GenAI Resources portal provides you with an overview of all the resources that you have access to. You can also request new GenAI Resources there. There are three different types of resources: From d14a9b1e7609e47bae5f48b4586bcfe966a3e44a Mon Sep 17 00:00:00 2001 From: Karuna-Mendix Date: Tue, 11 Feb 2025 21:59:41 +0530 Subject: [PATCH 09/31] conflicts --- .../apidocs/deployment/deploy-api-1.md | 2 +- .../sdk-howtos/creating-the-domain-model.md | 2 +- .../modules/SAML/_index.md | 198 +-- .../modules/SAML/advanced_configuration.md | 27 +- .../modules/SAML/idp_attributes.md | 89 +- .../modules/aws/amazon-bedrock.md | 10 +- .../modules/aws/aws-authentication.md | 4 +- .../modules/database-connector-mx10.md | 50 +- .../modules/encryption.md | 4 +- .../modules/genai/_index.md | 42 +- .../mendix-cloud-genai/Mx GenAI Connector.md | 26 +- .../external-platforms/openai.md | 44 +- .../pg-vector-knowledge-base/_index.md | 2 +- .../external-platforms/snowflake-cortex.md | 23 +- .../genai-for-mendix.md/genai-commons.md | 317 ++-- .../genai/using_genai/start_from_blank_app.md | 16 +- .../modules/mendix-sso.md | 93 +- .../modules/oidc.md | 19 +- .../modules/sap/sap-event-mesh-connector.md | 2 +- .../modules/sap/sap-odata-connector.md | 4 +- .../modules/scim.md | 57 +- .../modules/snowflake/rbac/snowflake-sso.md | 8 +- .../modules/snowflake/snowflake-rest-sql.md | 25 +- .../modules/teamcenter-extension.md | 16 +- .../services/business-events.md | 4 +- .../services/event-broker.md | 2 +- .../services/use-sap-model-creator.md | 2 +- .../widgets/combobox.md | 30 +- .../widgets/popup-menu.md | 8 +- .../contribute-to-a-github-repository.md | 2 +- .../contribute-to-mendix-docs/_index.md | 2 +- .../community-tools/mendix-exams/_index.md | 51 + .../mendix-exams/manage-exam-admins.md | 52 + .../mendix-exams/manage-exam-seats.md | 70 + .../en/docs/community-tools/oauth-scopes.md | 2 +- ...mendix-implementation-your-organization.md | 2 +- .../people/roles-permissions.md | 62 +- .../security/software-composition.md | 5 +- ...going-connections-from-your-application.md | 2 +- .../deployment/mendix-cloud-deploy/_index.md | 2 +- .../backups/restore-backup.md | 2 + .../environments-details-new.md | 571 +++++++ .../environments-details.md | 2 +- .../mendix-cloud-deploy/environments-new.md | 6 +- .../private-cloud-storage-plans.md | 4 + .../private-cloud/private-cloud-deploy.md | 28 +- .../reduced-downtime-deployment.md | 6 +- .../general/team-server/migrate-to-git.md | 16 + .../developerportal/general/team/_index.md | 6 +- .../developerportal/general/team/app-roles.md | 6 +- .../docs/developerportal/global-navigation.md | 44 + .../extensibility/howto-datastorage-api.md | 1 - ...nity-best-practices-for-app-performance.md | 2 +- .../siemens/mindsphere/mindsphere-api-only.md | 2 +- .../mindsphere-development-considerations.md | 16 +- .../mindsphere/mindsphere-module-details.md | 4 +- .../private-platform/configuration/_index.md | 277 +-- .../configuration/pmp-configure-azure.md | 6 +- .../configuration/pmp-configure-k8s.md | 2 +- .../configuration/pmp-version-control.md | 166 +- content/en/docs/private-platform/pmp-admin.md | 82 - .../reference/admin/_index.md | 23 + .../reference/admin/pmp-ref-admin-manage.md | 294 ++++ .../reference/admin/pmp-ref-admin-system.md | 247 +++ .../general/studio-pro-overview/_index.md | 36 +- .../installation/upgrading-from-9-to-10.md | 4 + .../offlinefirst-data/_index.md | 8 + .../offlinefirst-data/online-sync-mode.md | 59 + .../building-native-apps/_index.md | 6 + .../building-native-apps/bitrise.md | 15 + .../overtheair-updates.md | 1 + .../prerequisites.md | 4 +- .../native-mobile.md | 43 + .../app-explorer/app/app-settings/_index.md | 8 + .../mathematical-function-calls.md | 4 +- ...nity-best-practices-for-app-performance.md | 2 +- .../modeling/consistency-errors/_index.md | 2 +- .../consistency-errors-navigation.md | 35 +- .../consistency-errors-pages.md | 343 +++- .../refguide/modeling/domain-model/_index.md | 11 +- .../modeling/domain-model/entities/_index.md | 16 +- .../domain-model/entities/access-rules.md | 10 +- .../entities/data-sets.md} | 4 +- .../modeling/domain-model/entities/indexes.md | 2 +- .../entities/view-entities/_index.md | 56 + .../view-entities/abstracting-data.md | 54 + .../charting-with-view-entities.md | 76 + .../view-entities/create-pivot-table.md | 79 + .../entities/view-entities/decoupling-apis.md | 48 + .../view-entities/multilingual-apps.md | 114 ++ .../view-entities/multitenant-apps.md | 90 + .../view-entities/use-view-entities.md | 125 ++ .../view-entities/view-archived-data.md | 49 + .../view-entity-data-versioning.md | 76 + .../view-entities/view-entity-export-data.md | 72 + .../view-entity-overview-pages.md | 277 +++ .../modeling/domain-model/oql/_index.md | 77 + .../modeling/domain-model/oql/oql-clauses.md | 1490 +++++++++++++++++ .../domain-model/oql/oql-expression-syntax.md | 1218 ++++++++++++++ .../domain-model/oql/oql-expressions.md | 291 ++++ .../modeling/domain-model/oql/oql-v2.md | 296 ++++ .../published-odata-services/_index.md | 4 +- .../use-the-external-database-connector.md | 6 +- .../modeling/mendix-ai-assistance/_index.md | 14 +- .../domain-model-generator.md | 6 +- ...ot-recommender.md => logic-recommender.md} | 24 +- .../mendix-ai-assistance/maia-chat.md | 53 +- .../mendix-ai-assistance/maia-learn.md | 8 + .../translation-generator.md | 4 + .../mendix-ai-assistance/ui-recommender.md | 12 +- .../workflow-recommender.md | 10 +- .../modeling/menus/edit-menu/go-to-option.md | 2 +- .../menus/edit-menu/preferences-dialog.md | 6 +- .../modeling/menus/help-menu/_index.md | 18 +- .../pages/data-widgets/configure-form.md | 2 +- .../configure-list-and-details-on-one-page.md | 2 +- .../image-and-file-widgets/attach-images.md | 2 +- .../image-and-file-widgets/configure-files.md | 2 +- .../refguide/modeling/resources/_index.md | 2 +- .../resources/data-sets/oql/_index.md | 111 -- .../data-sets/oql/oql-expressions/_index.md | 12 - .../oql/oql-expressions/oql-aggregation.md | 17 - .../oql-expressions/oql-functions/_index.md | 18 - .../oql-expressions/oql-functions/oql-cast.md | 58 - .../oql-functions/oql-coalesce.md | 18 - .../oql-functions/oql-datediff.md | 33 - .../oql-functions/oql-datepart.md | 43 - .../oql-functions/oql-length.md | 18 - .../oql-functions/oql-lower.md | 18 - .../oql-functions/oql-rangebegin.md | 36 - .../oql-functions/oql-rangeend.md | 36 - .../oql-functions/oql-replace.md | 26 - .../oql-functions/oql-round.md | 30 - .../oql-functions/oql-upper.md | 18 - .../oql-expressions/oql-operators/_index.md | 28 - .../oql-operators/oql-case-expression.md | 50 - .../oql/oql-expressions/oql-parameters.md | 43 - .../oql/oql-expressions/oql-subqueries.md | 141 -- .../data-sets/oql/oql-from-clause.md | 135 -- .../data-sets/oql/oql-group-by-clause.md | 58 - .../data-sets/oql/oql-limit-clause.md | 51 - .../data-sets/oql/oql-order-by-clause.md | 54 - .../data-sets/oql/oql-select-clause.md | 68 - .../data-sets/oql/oql-where-clause.md | 38 - .../modeling/resources/scheduled-events.md | 41 +- .../runtime/custom-settings/_index.md | 1 + .../mendix-client/content-readiness.md | 57 +- .../widget-conversion-limitations.md | 4 - .../refguide/runtime/session-management.md | 6 + .../refguide/runtime/tracing-in-runtime.md | 46 +- .../repository-size.md | 17 +- ...nity-best-practices-for-app-performance.md | 2 +- .../en/docs/releasenotes/catalog/_index.md | 15 + .../releasenotes/control-center/_index.md | 10 +- .../en/docs/releasenotes/deployment/_index.md | 4 +- .../releasenotes/deployment/mendix-cloud.md | 17 + .../deployment/mendix-for-private-cloud.md | 10 + .../deployment/sap-cloud-platform.md | 13 + .../releasenotes/developer-portal/_index.md | 20 +- .../en/docs/releasenotes/marketplace/apd.md | 4 +- .../en/docs/releasenotes/marketplace/ats.md | 4 +- .../mobile/native-template/_index.md | 1 + .../nt-studio-pro-10-parent/_index.md | 4 +- .../nt-studio-pro-10-parent/nt-12-rn.md | 34 + .../releasenotes/private-platform/1.11.md | 2 +- .../releasenotes/private-platform/1.13.md | 2 +- .../releasenotes/private-platform/1.18.md | 61 + .../releasenotes/private-platform/_index.md | 1 + .../metamodel/metamodel-10/metamodel-10.19.md | 9 + .../releasenotes/sdk/model-sdk/model-sdk-4.md | 7 + .../security-advisories/_index.md | 3 +- .../docs/releasenotes/studio-pro/10/10.10.md | 2 +- .../docs/releasenotes/studio-pro/10/10.11.md | 2 +- .../docs/releasenotes/studio-pro/10/10.12.md | 127 +- .../docs/releasenotes/studio-pro/10/10.13.md | 4 +- .../docs/releasenotes/studio-pro/10/10.14.md | 3 +- .../docs/releasenotes/studio-pro/10/10.15.md | 3 - .../docs/releasenotes/studio-pro/10/10.16.md | 5 - .../docs/releasenotes/studio-pro/10/10.17.md | 1 - .../docs/releasenotes/studio-pro/10/10.18.md | 61 +- .../docs/releasenotes/studio-pro/10/10.19.md | 147 ++ .../docs/releasenotes/studio-pro/10/10.6.md | 80 +- .../docs/releasenotes/studio-pro/10/10.7.md | 2 +- .../docs/releasenotes/studio-pro/10/10.8.md | 4 +- .../docs/releasenotes/studio-pro/10/10.9.md | 2 +- .../en/docs/releasenotes/studio-pro/9/9.24.md | 33 + .../support/new-app-node-request-template.md | 18 +- .../partials/landingpage/latest-releases.html | 8 +- .../step-three.png | Bin 448755 -> 18441 bytes .../aws-bedrock/chat-completions-mf-old.png | Bin 15455 -> 0 bytes .../encryption/encryption-constant.png | Bin 0 -> 92682 bytes .../[excluded]blank_genai_mf.jpg | Bin 465263 -> 219347 bytes .../genai/snowflake/StatementSetup.png | Bin 0 -> 85227 bytes .../modules/saml/saml-endpoints.png | Bin 256557 -> 0 bytes .../manage-exam-admins/access-management.png | Bin 0 -> 68892 bytes .../manage-exam-admins/add-exam-admin.png | Bin 0 -> 27669 bytes .../manage-exam-seats/expiry-date.png | Bin 0 -> 91742 bytes .../manage-exam-seats/invited-students.png | Bin 0 -> 39642 bytes .../manage-exam-seats/overview.png | Bin 0 -> 138997 bytes .../people/roles-permissions/learn-more.png | Bin 240883 -> 0 bytes .../roles-permissions/roles-permissions.png | Bin 549747 -> 0 bytes .../environments-beta/deploy-mda.png | Bin 0 -> 160833 bytes .../environments-details-beta/actions.png | Bin 0 -> 47148 bytes .../edit-constant.png | Bin 0 -> 48433 bytes .../environments-details-beta/edit-event.png | Bin 0 -> 30595 bytes .../environments-details-beta/general.png | Bin 0 -> 286410 bytes .../http-header-dropdown.png | Bin 0 -> 25981 bytes .../http-header-string.png | Bin 0 -> 34659 bytes .../http-header-url.png | Bin 0 -> 46239 bytes .../environments-details-beta/log-levels.png | Bin 0 -> 324329 bytes .../environments-details-beta/maintenance.png | Bin 0 -> 89792 bytes .../model-options.png | Bin 0 -> 338979 bytes .../environments-details-beta/network.png | Bin 0 -> 353878 bytes .../environments-details-beta/runtime.png | Bin 0 -> 313075 bytes .../environments-details-beta/services.png | Bin 0 -> 377322 bytes .../environments-details-beta/tags.png | Bin 0 -> 235669 bytes .../private-cloud-deploy/generalTab.png | Bin 0 -> 309888 bytes .../private-cloud-deploy/image18.png | Bin 294552 -> 198867 bytes .../private-cloud-deploy/image22.png | Bin 308350 -> 0 bytes .../general/team/role-settings.png | Bin 198629 -> 0 bytes .../developerportal/general/team/team.png | Bin 34461 -> 40506 bytes .../global-nav/maia-mendix-portal.jpg | Bin 0 -> 72624 bytes .../private-platform/pmp-admin1.png | Bin 241463 -> 208641 bytes .../private-platform/pmp-admin2.png | Bin 168988 -> 0 bytes .../private-platform/pmp-admin4.png | Bin 0 -> 188585 bytes .../private-platform/pmp-admin5.png | Bin 0 -> 776784 bytes .../private-platform/pmp-admin6.png | Bin 0 -> 204894 bytes .../private-platform/pmp-admin7.png | Bin 0 -> 191057 bytes .../private-platform/pmp-admin8.png | Bin 0 -> 182365 bytes .../private-platform/pmp-admin9.png | Bin 0 -> 1217873 bytes .../private-platform/pmp-config1.png | Bin 185916 -> 72875 bytes .../private-platform/pmp-config2.png | Bin 106335 -> 0 bytes .../attachments/private-platform/pmp-vc1.png | Bin 137868 -> 0 bytes .../attachments/private-platform/pmp-vc2.png | Bin 2958 -> 0 bytes .../attachments/private-platform/pmp-vc3.png | Bin 138147 -> 0 bytes .../attachments/private-platform/pmp-vc4.png | Bin 136989 -> 0 bytes .../attachments/private-platform/pmp-vc5.png | Bin 45553 -> 0 bytes .../private-platform/pmp-wizard7.png | Bin 95593 -> 0 bytes .../access-rules/access-rule-editor.png | Bin 202689 -> 184224 bytes .../use-view-entities/active-tenant.png | Bin 0 -> 259204 bytes .../use-view-entities/current-user.png | Bin 0 -> 216446 bytes .../use-view-entities/customer-per-decade.png | Bin 0 -> 571184 bytes .../customer-with-address.png | Bin 0 -> 516351 bytes .../use-view-entities/product-language.png | Bin 0 -> 401229 bytes .../use-view-entities/query-plans.png | Bin 0 -> 142817 bytes .../abstracting-data/domain-model.png | Bin 0 -> 82431 bytes .../abstracting-data/export-level.png | Bin 0 -> 63961 bytes .../abstracting-data/module-settings.png | Bin 0 -> 60184 bytes .../view-entities/abstracting-data/usable.png | Bin 0 -> 122984 bytes .../chart-example.png | Bin 0 -> 59396 bytes .../chart-final.png | Bin 0 -> 106315 bytes .../domain-model.png | Bin 0 -> 67159 bytes .../series-name.png | Bin 0 -> 46691 bytes .../create-overview-pages/change-object.png | Bin 0 -> 80796 bytes .../create-product-microflow.png | Bin 0 -> 68133 bytes .../create-overview-pages/domain-model.png | Bin 0 -> 91042 bytes .../create-overview-pages/live-data-grid.png | Bin 0 -> 99222 bytes .../create-overview-pages/nanoflow-data.png | Bin 0 -> 157630 bytes .../product-overview-microflow.png | Bin 0 -> 33939 bytes .../product-overview-page.png | Bin 0 -> 24934 bytes .../product-overview-ve.png | Bin 0 -> 18900 bytes .../supplier-and-category-ve.png | Bin 0 -> 16656 bytes .../create-overview-pages/total-value.png | Bin 0 -> 27528 bytes .../update-product-microflow.png | Bin 0 -> 66091 bytes .../decoupling-apis/can-be-empty.png | Bin 0 -> 82848 bytes .../decoupling-apis/domain-model.png | Bin 0 -> 91042 bytes .../decoupling-apis/key-attribute.png | Bin 0 -> 85577 bytes .../exporting-data/connectors-pane.png | Bin 0 -> 112113 bytes .../exporting-data/domain-model.png | Bin 0 -> 40415 bytes .../exporting-data/export-mapping-data.png | Bin 0 -> 156745 bytes .../exporting-data/json-structure.png | Bin 0 -> 179665 bytes .../view-entities/exporting-data/mapping.png | Bin 0 -> 181785 bytes .../all-product-translation-ve.png | Bin 0 -> 19575 bytes .../multilingual-apps/domain-model.png | Bin 0 -> 16035 bytes .../translated-product-ve.png | Bin 0 -> 19021 bytes .../multitenant-apps/current-user-ve.png | Bin 0 -> 9518 bytes .../multitenant-apps/domain-model.png | Bin 0 -> 200315 bytes .../multitenant-apps/project-ve-grid-2.png | Bin 0 -> 367632 bytes .../multitenant-apps/project-ve-grid.png | Bin 0 -> 121697 bytes .../domain-model.png | Bin 0 -> 219158 bytes .../orderpivotve.png | Bin 0 -> 409606 bytes .../view-archived-data/all-products-ve.png | Bin 0 -> 17205 bytes .../view-archived-data/data-grid.png | Bin 0 -> 70181 bytes .../view-archived-data/domain-model.png | Bin 0 -> 54423 bytes .../data-grid-2.png | Bin 0 -> 86574 bytes .../view-entity-data-versioning/data-grid.png | Bin 0 -> 113230 bytes .../domain-model.png | Bin 0 -> 121827 bytes .../entity-properties-2.png | Bin 0 -> 269140 bytes .../entity-properties.png | Bin 0 -> 253380 bytes .../studio-pro-overview/status-bar.png | Bin 1921 -> 16252 bytes .../studio-pro-diagram.png | Bin 184471 -> 384242 bytes .../migration-advice-combined.png | Bin 0 -> 171607 bytes 292 files changed, 7970 insertions(+), 2554 deletions(-) create mode 100644 content/en/docs/community-tools/mendix-exams/_index.md create mode 100644 content/en/docs/community-tools/mendix-exams/manage-exam-admins.md create mode 100644 content/en/docs/community-tools/mendix-exams/manage-exam-seats.md create mode 100644 content/en/docs/deployment/mendix-cloud-deploy/environments-details-new.md delete mode 100644 content/en/docs/private-platform/pmp-admin.md create mode 100644 content/en/docs/private-platform/reference/admin/_index.md create mode 100644 content/en/docs/private-platform/reference/admin/pmp-ref-admin-manage.md create mode 100644 content/en/docs/private-platform/reference/admin/pmp-ref-admin-system.md create mode 100644 content/en/docs/refguide/mobile/building-efficient-mobile-apps/offlinefirst-data/online-sync-mode.md rename content/en/docs/refguide/modeling/{resources/data-sets/_index.md => domain-model/entities/data-sets.md} (98%) create mode 100644 content/en/docs/refguide/modeling/domain-model/entities/view-entities/_index.md create mode 100644 content/en/docs/refguide/modeling/domain-model/entities/view-entities/abstracting-data.md create mode 100644 content/en/docs/refguide/modeling/domain-model/entities/view-entities/charting-with-view-entities.md create mode 100644 content/en/docs/refguide/modeling/domain-model/entities/view-entities/create-pivot-table.md create mode 100644 content/en/docs/refguide/modeling/domain-model/entities/view-entities/decoupling-apis.md create mode 100644 content/en/docs/refguide/modeling/domain-model/entities/view-entities/multilingual-apps.md create mode 100644 content/en/docs/refguide/modeling/domain-model/entities/view-entities/multitenant-apps.md create mode 100644 content/en/docs/refguide/modeling/domain-model/entities/view-entities/use-view-entities.md create mode 100644 content/en/docs/refguide/modeling/domain-model/entities/view-entities/view-archived-data.md create mode 100644 content/en/docs/refguide/modeling/domain-model/entities/view-entities/view-entity-data-versioning.md create mode 100644 content/en/docs/refguide/modeling/domain-model/entities/view-entities/view-entity-export-data.md create mode 100644 content/en/docs/refguide/modeling/domain-model/entities/view-entities/view-entity-overview-pages.md create mode 100644 content/en/docs/refguide/modeling/domain-model/oql/_index.md create mode 100644 content/en/docs/refguide/modeling/domain-model/oql/oql-clauses.md create mode 100644 content/en/docs/refguide/modeling/domain-model/oql/oql-expression-syntax.md create mode 100644 content/en/docs/refguide/modeling/domain-model/oql/oql-expressions.md create mode 100644 content/en/docs/refguide/modeling/domain-model/oql/oql-v2.md rename content/en/docs/refguide/modeling/mendix-ai-assistance/{logic-bot-recommender.md => logic-recommender.md} (90%) delete mode 100644 content/en/docs/refguide/modeling/resources/data-sets/oql/_index.md delete mode 100644 content/en/docs/refguide/modeling/resources/data-sets/oql/oql-expressions/_index.md delete mode 100644 content/en/docs/refguide/modeling/resources/data-sets/oql/oql-expressions/oql-aggregation.md delete mode 100644 content/en/docs/refguide/modeling/resources/data-sets/oql/oql-expressions/oql-functions/_index.md delete mode 100644 content/en/docs/refguide/modeling/resources/data-sets/oql/oql-expressions/oql-functions/oql-cast.md delete mode 100644 content/en/docs/refguide/modeling/resources/data-sets/oql/oql-expressions/oql-functions/oql-coalesce.md delete mode 100644 content/en/docs/refguide/modeling/resources/data-sets/oql/oql-expressions/oql-functions/oql-datediff.md delete mode 100644 content/en/docs/refguide/modeling/resources/data-sets/oql/oql-expressions/oql-functions/oql-datepart.md delete mode 100644 content/en/docs/refguide/modeling/resources/data-sets/oql/oql-expressions/oql-functions/oql-length.md delete mode 100644 content/en/docs/refguide/modeling/resources/data-sets/oql/oql-expressions/oql-functions/oql-lower.md delete mode 100644 content/en/docs/refguide/modeling/resources/data-sets/oql/oql-expressions/oql-functions/oql-rangebegin.md delete mode 100644 content/en/docs/refguide/modeling/resources/data-sets/oql/oql-expressions/oql-functions/oql-rangeend.md delete mode 100644 content/en/docs/refguide/modeling/resources/data-sets/oql/oql-expressions/oql-functions/oql-replace.md delete mode 100644 content/en/docs/refguide/modeling/resources/data-sets/oql/oql-expressions/oql-functions/oql-round.md delete mode 100644 content/en/docs/refguide/modeling/resources/data-sets/oql/oql-expressions/oql-functions/oql-upper.md delete mode 100644 content/en/docs/refguide/modeling/resources/data-sets/oql/oql-expressions/oql-operators/_index.md delete mode 100644 content/en/docs/refguide/modeling/resources/data-sets/oql/oql-expressions/oql-operators/oql-case-expression.md delete mode 100644 content/en/docs/refguide/modeling/resources/data-sets/oql/oql-expressions/oql-parameters.md delete mode 100644 content/en/docs/refguide/modeling/resources/data-sets/oql/oql-expressions/oql-subqueries.md delete mode 100644 content/en/docs/refguide/modeling/resources/data-sets/oql/oql-from-clause.md delete mode 100644 content/en/docs/refguide/modeling/resources/data-sets/oql/oql-group-by-clause.md delete mode 100644 content/en/docs/refguide/modeling/resources/data-sets/oql/oql-limit-clause.md delete mode 100644 content/en/docs/refguide/modeling/resources/data-sets/oql/oql-order-by-clause.md delete mode 100644 content/en/docs/refguide/modeling/resources/data-sets/oql/oql-select-clause.md delete mode 100644 content/en/docs/refguide/modeling/resources/data-sets/oql/oql-where-clause.md create mode 100644 content/en/docs/releasenotes/mobile/native-template/nt-studio-pro-10-parent/nt-12-rn.md create mode 100644 content/en/docs/releasenotes/private-platform/1.18.md create mode 100644 content/en/docs/releasenotes/sdk/metamodel/metamodel-10/metamodel-10.19.md create mode 100644 content/en/docs/releasenotes/studio-pro/10/10.19.md delete mode 100644 static/attachments/appstore/platform-supported-content/modules/aws-bedrock/chat-completions-mf-old.png create mode 100644 static/attachments/appstore/platform-supported-content/modules/encryption/encryption-constant.png create mode 100644 static/attachments/appstore/platform-supported-content/modules/genai/snowflake/StatementSetup.png delete mode 100644 static/attachments/appstore/platform-supported-content/modules/saml/saml-endpoints.png create mode 100644 static/attachments/community-tools/order-exams-in-bulk/manage-exam-admins/access-management.png create mode 100644 static/attachments/community-tools/order-exams-in-bulk/manage-exam-admins/add-exam-admin.png create mode 100644 static/attachments/community-tools/order-exams-in-bulk/manage-exam-seats/expiry-date.png create mode 100644 static/attachments/community-tools/order-exams-in-bulk/manage-exam-seats/invited-students.png create mode 100644 static/attachments/community-tools/order-exams-in-bulk/manage-exam-seats/overview.png delete mode 100644 static/attachments/control-center/people/roles-permissions/learn-more.png delete mode 100644 static/attachments/control-center/people/roles-permissions/roles-permissions.png create mode 100644 static/attachments/deployment/mendix-cloud-deploy/environments-beta/deploy-mda.png create mode 100644 static/attachments/deployment/mendix-cloud-deploy/environments-details-beta/actions.png create mode 100644 static/attachments/deployment/mendix-cloud-deploy/environments-details-beta/edit-constant.png create mode 100644 static/attachments/deployment/mendix-cloud-deploy/environments-details-beta/edit-event.png create mode 100644 static/attachments/deployment/mendix-cloud-deploy/environments-details-beta/general.png create mode 100644 static/attachments/deployment/mendix-cloud-deploy/environments-details-beta/http-header-dropdown.png create mode 100644 static/attachments/deployment/mendix-cloud-deploy/environments-details-beta/http-header-string.png create mode 100644 static/attachments/deployment/mendix-cloud-deploy/environments-details-beta/http-header-url.png create mode 100644 static/attachments/deployment/mendix-cloud-deploy/environments-details-beta/log-levels.png create mode 100644 static/attachments/deployment/mendix-cloud-deploy/environments-details-beta/maintenance.png create mode 100644 static/attachments/deployment/mendix-cloud-deploy/environments-details-beta/model-options.png create mode 100644 static/attachments/deployment/mendix-cloud-deploy/environments-details-beta/network.png create mode 100644 static/attachments/deployment/mendix-cloud-deploy/environments-details-beta/runtime.png create mode 100644 static/attachments/deployment/mendix-cloud-deploy/environments-details-beta/services.png create mode 100644 static/attachments/deployment/mendix-cloud-deploy/environments-details-beta/tags.png create mode 100644 static/attachments/deployment/private-cloud/private-cloud-deploy/generalTab.png delete mode 100644 static/attachments/deployment/private-cloud/private-cloud-deploy/image22.png delete mode 100644 static/attachments/developerportal/general/team/role-settings.png create mode 100644 static/attachments/developerportal/global-nav/maia-mendix-portal.jpg delete mode 100644 static/attachments/private-platform/pmp-admin2.png create mode 100644 static/attachments/private-platform/pmp-admin4.png create mode 100644 static/attachments/private-platform/pmp-admin5.png create mode 100644 static/attachments/private-platform/pmp-admin6.png create mode 100644 static/attachments/private-platform/pmp-admin7.png create mode 100644 static/attachments/private-platform/pmp-admin8.png create mode 100644 static/attachments/private-platform/pmp-admin9.png delete mode 100644 static/attachments/private-platform/pmp-config2.png delete mode 100644 static/attachments/private-platform/pmp-vc1.png delete mode 100644 static/attachments/private-platform/pmp-vc2.png delete mode 100644 static/attachments/private-platform/pmp-vc3.png delete mode 100644 static/attachments/private-platform/pmp-vc4.png delete mode 100644 static/attachments/private-platform/pmp-vc5.png delete mode 100644 static/attachments/private-platform/pmp-wizard7.png create mode 100644 static/attachments/refguide/modeling/domain-model/use-view-entities/active-tenant.png create mode 100644 static/attachments/refguide/modeling/domain-model/use-view-entities/current-user.png create mode 100644 static/attachments/refguide/modeling/domain-model/use-view-entities/customer-per-decade.png create mode 100644 static/attachments/refguide/modeling/domain-model/use-view-entities/customer-with-address.png create mode 100644 static/attachments/refguide/modeling/domain-model/use-view-entities/product-language.png create mode 100644 static/attachments/refguide/modeling/domain-model/use-view-entities/query-plans.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/abstracting-data/domain-model.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/abstracting-data/export-level.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/abstracting-data/module-settings.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/abstracting-data/usable.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/charting-with-view-entities/chart-example.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/charting-with-view-entities/chart-final.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/charting-with-view-entities/domain-model.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/charting-with-view-entities/series-name.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/create-overview-pages/change-object.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/create-overview-pages/create-product-microflow.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/create-overview-pages/domain-model.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/create-overview-pages/live-data-grid.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/create-overview-pages/nanoflow-data.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/create-overview-pages/product-overview-microflow.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/create-overview-pages/product-overview-page.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/create-overview-pages/product-overview-ve.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/create-overview-pages/supplier-and-category-ve.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/create-overview-pages/total-value.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/create-overview-pages/update-product-microflow.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/decoupling-apis/can-be-empty.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/decoupling-apis/domain-model.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/decoupling-apis/key-attribute.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/exporting-data/connectors-pane.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/exporting-data/domain-model.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/exporting-data/export-mapping-data.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/exporting-data/json-structure.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/exporting-data/mapping.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/multilingual-apps/all-product-translation-ve.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/multilingual-apps/domain-model.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/multilingual-apps/translated-product-ve.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/multitenant-apps/current-user-ve.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/multitenant-apps/domain-model.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/multitenant-apps/project-ve-grid-2.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/multitenant-apps/project-ve-grid.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/pivot-table-view-entities/domain-model.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/pivot-table-view-entities/orderpivotve.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/view-archived-data/all-products-ve.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/view-archived-data/data-grid.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/view-archived-data/domain-model.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/view-entity-data-versioning/data-grid-2.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/view-entity-data-versioning/data-grid.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/view-entity-data-versioning/domain-model.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/view-entity-data-versioning/entity-properties-2.png create mode 100644 static/attachments/refguide/modeling/domain-model/view-entities/view-entity-data-versioning/entity-properties.png create mode 100644 static/attachments/refguide/version-control/troubleshoot-version-control-issues/migration-advice-combined.png diff --git a/content/en/docs/apidocs-mxsdk/apidocs/deployment/deploy-api-1.md b/content/en/docs/apidocs-mxsdk/apidocs/deployment/deploy-api-1.md index 70f34ed7c21..7f1179c0b14 100644 --- a/content/en/docs/apidocs-mxsdk/apidocs/deployment/deploy-api-1.md +++ b/content/en/docs/apidocs-mxsdk/apidocs/deployment/deploy-api-1.md @@ -399,11 +399,11 @@ An object with the following key-value pairs: | HTTP Status | Error code | Description | | --- | --- | --- | +| 200 | ALREADY_STARTED | Cannot start app. App is already running. | | 400 | INVALID_APPID | Invalid AppId | | 404 | APP_NOT_FOUND | App not found | | 500 | NO_MDA_HAS_BEEN_DEPLOYED | Cannot start app. There is no MDA deployed. | | 500 | APP_ALREADY_HAS_A_STARTING_JOB | Cannot start app. There is already a starting job id found. | -| 500 | ALREADY_STARTED | Cannot start app. App is already running. | ##### Example Output diff --git a/content/en/docs/apidocs-mxsdk/mxsdk/sdk-howtos/creating-the-domain-model.md b/content/en/docs/apidocs-mxsdk/mxsdk/sdk-howtos/creating-the-domain-model.md index e321e193f2d..2cebf8dee06 100644 --- a/content/en/docs/apidocs-mxsdk/mxsdk/sdk-howtos/creating-the-domain-model.md +++ b/content/en/docs/apidocs-mxsdk/mxsdk/sdk-howtos/creating-the-domain-model.md @@ -68,7 +68,7 @@ invoice.location = { x: 400, y: 100 }; *Studio Pro Guide* -* [Domain Model](/refguide/domain-model/) +* [Data in the Domain Model](/refguide/domain-model/) * [Entities](/refguide/entities/) Metamodel reference guide diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/SAML/_index.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/SAML/_index.md index f2c64730fd5..839fefa9019 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/SAML/_index.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/SAML/_index.md @@ -1,6 +1,7 @@ --- title: "SAML" url: /appstore/modules/saml/ +linktitle: "SAML" description: "Describes the configuration and usage of the SAML module, which is available in the Mendix Marketplace." #If moving or renaming this doc file, implement a temporary redirect and let the respective team know they should update the URL in the product. See Mapping to Products for more details. --- @@ -21,10 +22,10 @@ Mendix also offers an [OIDC SSO](/appstore/modules/oidc/) module if you want to ### Typical Use Cases -The following use case are supported by both SAML and OIDC SSO module: +The following use cases are supported by both SAML and OIDC SSO module: * Your app is aimed at your company’s employees and you want these employees to sign in to your app using corporate credentials hosted by your identity provider (IdP). -* Authenticating against your Microsoft Active Directory server in a secure manner utilizing the SAML capabilities of Active Directory Federation Services (ADFS) — the SAML protocol allows for the encryption of all information transferred between the two servers, so VPN connections, LDAP, or Kerberos authentication are no longer needed. +* Authenticating against your Microsoft Active Directory server in a secure manner utilizing the SAML capabilities of Active Directory Federation Services (ADFS) — the SAML protocol allows for the encryption of all information transferred between the two servers, so, VPN connections, LDAP, or Kerberos authentication are no longer needed. The following use cases are supported by SAML: @@ -33,7 +34,7 @@ The following use cases are supported by SAML: {{% alert color="info" %}}Some of these identity schemes use optional features of SAML which are not yet supported in the SAML SSO module — see [Limitations](#limitations) for more information.{{% /alert %}} -* Authenticating within a Mendix session — for example requiring end-users to re-authenticate shortly before they are allowed to do critical transaction in your app or having a second user authenticate within the context of the first user’s session in your Mendix app +* Authenticating within a Mendix session — for example requiring end-users to re-authenticate shortly before they are allowed to do critical transactions in your app or having a second user authenticate within the context of the first user’s session in your Mendix app. * Single Logout is supported. ### Features @@ -50,27 +51,27 @@ This section is aimed at readers with more knowledge of the SAML protocol. You m * Artifact binding for SAML responses (Mendix 8 and above) * Single Logout profile -2. For encryption of SAML messages the following options are supported: +2. For encryption of SAML messages, the following options are supported: * No Encryption - * 1024 or 2048 bit encryption + * 1024 or 2048-bit encryption * SHA1 or SHA256 algorithms -#### Usage of SAML metadata +#### Usage of SAML Metadata -The Mendix SAML SSO supports usage of SAML metadata in the following way: +The Mendix SAML SSO supports the usage of SAML metadata in the following way: * Daily synchronization of the IdP metadata, so your Mendix app will always have the latest IdP metadata. - * For daily synchronization of IdP metadata, configure the `SE_SynchronizeIdPMetadata` scheduled event. For local development this can be done from Studio Pro. In Mendix Cloud, you can do this on the [Environments Details](/developerportal/deploy/environments-details/#model-options) page for your app. + * For daily synchronization of IdP metadata, configure the `SE_SynchronizeIdPMetadata` scheduled event. For local development, this can be done from Studio Pro. In Mendix Cloud, you can do this on the [Environments Details](/developerportal/deploy/environments-details/#model-options) page for your app. * Downloading of the metadata for your Mendix application that acts as an SP in the SAML protocol. #### SAML Module Configuration Feature -For easy configurability, the SAML module offers the following: +For easy configuration, the SAML module offers the following: -* From the version 4.0.0 of the SAML module, if you want to connect your Mendix application with single IdP, you can do the necessary configurations at design time (using a microflow) and/or deploy-time using Application Constants. This is described in section [Non-default Configuration](#non-default) -* You can create a custom SAML configuration microflow and share it across all SAML applications in your portfolio, such as by using a custom module in your private marketplace. This approach makes SAML configurations both automatable and repeatable. -* Runtime configuration by a local Admin is still available in below cases: +* From version 4.0.0 of the SAML module, if you want to connect your Mendix application with a single IdP, you can do the necessary configurations at design time (using a microflow) and/or deploy time using Application Constants. This is described in the section [Non-default Configuration](#non-default). +* You can create a custom SAML configuration microflow and share it across all SAML applications in your portfolio, such as using a custom module in your private marketplace. This approach makes SAML configurations both automatable and repeatable. +* Runtime configuration by a local Admin is still available in the below cases: * If you want to connect multiple IdPs with your SAML app. * If you want to upload a keypair for your app. @@ -91,7 +92,7 @@ The Mendix SAML SSO module does not support the following: * Enhanced Client/Proxy SSO profile * HTTP artifact binding for SAML requests -When using SSO connections with multiple IdPs, the SAML EntityID for your app will be shared with all connected IdPs. The SAML module does not allow you to configure different EntityID's for each of your connected IdPs. +When using SSO connections with multiple IdPs, the SAML EntityID for your app will be shared with all connected IdPs. The SAML module does not allow you to configure different EntityIDs for each of your connected IdPs. Some SAML services, such as eHerkenning and DigID in the Netherlands, use optional features of SAML which are not yet supported by the Mendix SAML SSO module. These include: @@ -102,9 +103,9 @@ Some SAML services, such as eHerkenning and DigID in the Netherlands, use option * RequestedAuthnContext in the SAML requests * HTTP-SOAP Logout Request -If you need any of these features, contact your Mendix CSM to discuss inclusion of these features on the Mendix roadmap or customization of the SAML SSO module. +If you need any of these features, contact your Mendix CSM to discuss the inclusion of these features on the Mendix roadmap or the customization of the SAML SSO module. -Versions of the SAML module below 3.5.0 are limited to single keypair. If you are using one of those older versions and you want to connect your app to multiple SAML IdPs, you cannot use different key pairs and certificates for each of the SSO federations. Instead, you must use a single key pair and certificate for all SAML IdPs. The certificate can be either a self-signed certificate or a certificate issued by a certificate authority (CA). For more details, see the [Use a Certificate Issued by a Certificate Authority](/appstore/modules/saml/advanced-configuration/#use-ca) section of *Advanced configuration for SAML*. +Versions of the SAML module below 3.5.0 are limited to a single key pair. If you are using one of those older versions and you want to connect your app to multiple SAML IdPs, you cannot use different key pairs and certificates for each of the SSO federations. Instead, you must use a single key pair and certificate for all SAML IdPs. The certificate can be either a self-signed certificate or a certificate issued by a certificate authority (CA). For more details, see the [Use a Certificate Issued by a Certificate Authority](/appstore/modules/saml/advanced-configuration/#use-ca) section of *Advanced Configuration for SAML*. If you use both the [OIDC SSO](/appstore/modules/oidc/) module and the SAML module in the same app, each end-user can only authenticate using one IdP. @@ -145,17 +146,17 @@ There are different versions of the SAML module, depending on which version of M * For Mendix 8, you should use the latest published versions in the **2.x** range, unless otherwise indicated in the **Documentation** tab. * For Mendix 9, there are odd- and even-numbered patch releases that contain the same changes and require the same Mendix version, but differ based on the version of Atlas UI that your app uses: - * The even-numbered releases (for example, 3.6.2) are intended for apps that use the 2.0 version of Atlas UI, that is, apps which were originally built on a version of Mendix below 9.0.0, and then upgraded to Mendix 9. + * The even-numbered releases (for example, 3.6.2) are intended for apps that use the 2.0 version of Atlas UI, that is, apps that were originally built on a version of Mendix below 9.0.0, and then upgraded to Mendix 9. * The odd-numbered releases (for example, 3.6.3) are for new apps that are built using Mendix 9 and are using version 3.0 of Atlas UI. - * For Mendix 10, you should use the latest versions of the module that is compatible with the 3.0 version of Atlas UI (that is, the version for apps newly built on Mendix 9 or newer). These are currently the same as the odd-numbered releases mentioned above for Mendix 9; in future releases of the SAML module, there will be separate versions of the module dedicated for Mendix 10. + * For Mendix 10, you should use the latest versions of the module that are compatible with the 3.0 version of Atlas UI (that is, the version for apps newly built on Mendix 9 or newer). These are currently the same as the odd-numbered releases mentioned above for Mendix 9; in future releases of the SAML module, there will be separate versions of the module dedicated to Mendix 10. Mendix 10 does not support the 2.0 version of the Atlas UI, so you should never use the even-numbered (Atlas 2.0-compatible) SAML patch releases with your Mendix 10 app. -3. To download the required release, in **Releases** tab, find the release that is compatible with your app per the guidelines in the **Documentation** tab, and then click the **Download** button by the number of the release. +3. To download the required release, in the **Releases** tab, find the release that is compatible with your app per the guidelines in the **Documentation** tab, and then click the **Download** button by the number of the release. 4. Follow the instructions in [How to Use Marketplace Content](/appstore/use-content/) to import the SAML module into your app. -### Post-Installation Configuration Steps +### Post-installation Configuration Steps By default, the SAML module will be installed as the **SAML20** module in your app’s Marketplace modules. You can find all microflows and other configuration elements in this module. @@ -163,13 +164,13 @@ By default, the SAML module will be installed as the **SAML20** module in your a 2. If you have set up path-based access restrictions in your cloud (for example [Path-Based Access Restrictions](/developerportal/deploy/environments-details/#path-based-restrictions) in Mendix Cloud), ensure that access to `/SSO/` is allowed. 3. Add the **OpenConfiguration** microflow to the navigation, and then allow the administrator to access this microflow. 4. Review and configure all the constants: - * **DefaultLoginPage** – You can specify a different login page here for when the login process fails. When the end-user cannot be authenticated in the external IdP, a button will appear, and by clicking this button, they will be redirected to the specified login page. If this is left blank, an unauthenticated user will be redirected to `/login.html`. - * **DefaultLogoutPage** – Removing the sign-out button is recommended, but if you choose to keep it, the end-user will be redirected to a page. You can choose where the end-user is redirected to (for example, back to `/SSO/` or your `login.html` page). Every user signed in via SAML is redirected to this location when they are logged out. + * **DefaultLoginPage** – You can specify a different login page when the login process fails. When the end-user cannot be authenticated in the external IdP, a button will appear, and by clicking this button, they will be redirected to the specified login page. If this is left blank, an unauthenticated user will be redirected to `/login.html`. + * **DefaultLogoutPage** – Removing the sign-out button is recommended, but if you keep it, the end user will be redirected to a page. You can choose where the end-user is redirected to (for example, back to `/SSO/` or your `login.html` page). Every user signed in via SAML is redirected to this location when logged out. * **SSOLandingPage** – Set this if you redirect the `index.html` to log into your app automatically. See [Using SSOLandingPage](#ssolandingpage) for further information about this. * **HybridAppLoginTimeOutInMinutes** – * If you use the default login handler in your [hybrid mobile](/refguide9/mobile/introduction-to-mobile-technologies/hybrid-mobile/) app, you must change the `com.mendix.webui.HybridAppLoginTimeOut` custom runtime setting to change the validity of the authentication token used by the hybrid mobile app. * If you use the SAML module in your hybrid app, you must change the `SAML20.HybridAppLoginTimeOutInMinutes` constant to change the validity of the authentication token used by the hybrid mobile app. - * If you use both the default login handler and the SAML module in your hybrid app, you must change both so that they match. This is because, when you use the SAML module for SSO in your Mendix app, the authentication token is not created by the Mendix runtime, which uses the custom runtime setting. Instead, the authentication token is created by the Java code in the SAML module. This Java code does not have access to the custom runtime setting value, and thus requires the constant value to be set. + * If you use both the default login handler and the SAML module in your hybrid app, you must change both so that they match. This is because, when you use the SAML module for SSO in your Mendix app, the authentication token is not created by the Mendix runtime, which uses the custom runtime setting. Instead, the authentication token is created by the Java code in the SAML module. This Java code does not have access to the custom runtime setting value and thus requires the constant value to be set. Only use this setting if you are using SAML on a hybrid mobile app. Note that this functionality also requires mobile authentication tokens to be enabled in your IdP Configuration as well as changes to the hybrid app package as described in [How To Implement SSO on a Hybrid App with Mendix and SAML](/howto8/mobile/implement-sso-on-a-hybrid-app-with-mendix-and-saml/). @@ -179,32 +180,32 @@ By default, the SAML module will be installed as the **SAML20** module in your a ### Using SSOLandingPage{#ssolandingpage} -You can use single sign-on (SSO) to automatically sign users in to your app by redirecting every user accessing `index.html` to the Mendix `/SSO/` endpoint. To do this, you need to add `` to the `index.html` file. +You can use single sign-on (SSO) to automatically sign users into your app by redirecting every user accessing `index.html` to the Mendix `/SSO/` endpoint. To do this, you need to add `` to the `index.html` file. {{% alert color="info" %}} For Mendix 9 and 10, there is no `index.html` file, so you need to create this file first. You can find instructions on how to do this in the [Customizing index.html (Web)](/howto/front-end/customize-styling-new/#custom-web) section of *Customize Styling*. {{% /alert %}} -If you use this method, do not forget to set the **SSOLandingPage** constant to a value different than `index.html`. Otherwise, the app will come back to `index.html` which will be redirected again to single sign-on, resulting in an endless loop. **SSOLandingPage** specifies a different landing page so the end-user does not end up on `index.html` again after a login attempt. Mendix recommends changing this constant to `/index3.html` and create an `index3.html` page in your `/theme` folder and copy contents of the original `index.html` (without the added redirect) into it. The authenticated end-user will then land on `index3.html` which will display the content of the app. If the user authentication fails, the user will be directed to the **DefaultLoginPage** instead. +If you use this method, do not forget to set the **SSOLandingPage** constant to a value different than `index.html`. Otherwise, the app will come back to `index.html` which will be redirected again to single sign-on, resulting in an endless loop. **SSOLandingPage** specifies a different landing page so the end-user does not end up on `index.html` again after a login attempt. Mendix recommends changing this constant to `/index3.html` and creating an `index3.html` page in your `/theme` folder and copying contents of the original `index.html` (without the added redirect) into it. The authenticated end-user will then land on `index3.html` which will display the content of the app. If the user authentication fails, the user will be directed to the **DefaultLoginPage** instead. -{{% alert color="info" %}}If you want to redirect users who have not yet signed in automatically to `/SSO/` when opening `index.html`, while still allowing users to open `login.html` directly and sign in using a local account, bypassing single sign-on, then you should not add `` to the `index.html` file as described above; instead, you should edit the `index.html` file by changing the URL within the `originURI` to `/SSO/`, for example: `document.cookie = "originURI=/SSO/" + (window.location.protocol === "https:" ? ";SameSite=None;Secure" : "");`. This cookie determines to which location the Mendix Client will redirect users when they need to sign in. If you have already signed in, you are not redirected again.{{% /alert %}} +{{% alert color="info" %}}If you want to redirect users who have not yet signed in automatically to `/SSO/` when opening `index.html`, while still allowing users to open `login.html` directly and sign in using a local account, bypassing single sign-on, then you should not add `` to the `index.html` file as described above; instead, you should edit the `index.html` file by changing the URL within the `originURI` to `/SSO/`, for example, `document.cookie = "originURI=/SSO/" + (window.location.protocol === "https:" ? ";SameSite=None;Secure" : "");`. This cookie determines to which location the Mendix Client will redirect users when they need to sign in. If you have already signed in, you are not redirected again.{{% /alert %}} ### Upgrading from SAML 3.X to 4.X {{% alert color="info" %}}If you are using Mendix 10.12.10 and above, ensure you are using version 4.0.0 or above of the SAML module.{{% /alert %}} -The table below introduces you several key updates when you upgrade SAML module from V3.x to V4.x. +The table below introduces you to several key updates when you upgrade the SAML module from V3.x to V4.x. | Feature | Changes in Version 4.0.0 | | --- | --- | -| SSO Configuration | You can now perform SSO configuration during design-time and deploy-time.
      Introduced deploy-time configuration and `Custom_Create_IdPConfiguration` microflow for customized SSO configuration. | -| Admin Screen Restructuring | The **Mapping** tab has been removed. Equivalent configurations can now be completed on the **User Provisioning configuration** tab.
      `evaluateMultipleUserMatches` microflow is now moved to the **User Provisioning** tab. -| User Commons Module Integration | 1. The SAML module now integrates with the User Commons module, offering a more uniform experience with the OIDC SSO module.
      2. A new method for creating custom user provisioning microflows using User Commons simplifies development and allows you to automatically set the user-type for users
      3. Deprecated: SAML 3.x provisioning flows will be unsupported in future versions. It’s recommended to create new provisioning flows using User Commons after upgrading.
      5. From UserCommons 2.0.0, new users without IdP-specified time zone or language will use default App settings; existing users retain their previously set values.| +| SSO Configuration | You can now perform SSO configuration during design time and deploy time.
      Introduced deploy-time configuration and `Custom_Create_IdPConfiguration` microflow for customized SSO configuration. | +| Admin Screen Restructuring | The **Mapping** tab has been removed. Equivalent configurations can now be completed on the **User Provisioning configuration** tab.
      `evaluateMultipleUserMatches` microflow is now moved to the **User Commons**. | +| User Commons Module Integration | 1. From versions 4.0.0 and above, SAML2.0 is compatible with the UserCommons v2.0.0.
      2. The SAML module now integrates with the User Commons module, offering a more uniform experience with the OIDC SSO module.
      3. A new method for creating custom user provisioning microflows using User Commons simplifies development and allows you to automatically set the user-type for users
      4. Deprecated: SAML 3.x provisioning flows will be unsupported in future versions. It’s recommended to create new provisioning flows using User Commons after upgrading.
      5. From UserCommons 2.0.0, new users without IdP-specified time zone or language will use default App settings; existing users retain their previously set values.| | InCommon Federation Support | Pre-configured support for InCommon Federation has been removed. You now need to create custom user provisioning microflows in version 4.0.0 | ## Configuring SAML Module{#config} -Configuring SAML module is crucial for setting up secure authentication within your application. It involves reviewing and updating the Service Provider (SP) settings and creating or updating the Identity Provider (IdP) configuration. +Configuring the SAML module is crucial for setting up secure authentication within your application. It involves reviewing and updating the Service Provider (SP) settings and creating or updating the Identity Provider (IdP) configuration. In versions below 3.6.9 of the SAML module, configuration can be done using the app pages – see the [Using SSO Landing pages](#ssolandingpage) section above. However, in version 4.0.0 and above, you have the option to use constants or custom microflows to configure your app at deploy time. @@ -224,6 +225,9 @@ This configuration offers simple and default settings. It is the ideal configura To enable the single sign-on (SSO) method as SAML 2.0, you need to manually create an application on the IdP server. +##### Creating SP Manually at Okta + +To kickstart the SAML module with Okta, refer to the images below. Ensure to log in with [Okta Developer](https://developer.okta.com/) credentials. In the new application, configure the following fields and get the IdP metadata URL: * Single Sign-On URL: This should be your application URL. @@ -231,19 +235,19 @@ In the new application, configure the following fields and get the IdP metadata * Other Requestable SSO URLs (Callback URLs): This should be set to `/SSO/assertion`. * Index: The default value is zero. Ensure it matches the value you set for the **Assertion Consumer Service Index**. +{{< figure src="/attachments/appstore/platform-supported-content/modules/saml/saml-okta.png" >}} + After creating an application, you will receive an IdP metadata URL. This URL is used in the IdP configuration to **Read IdP metadata from URL**. -To kickstart the SAML module with Okta, refer to the images below. Ensure to log in with [Okta Developer](https://developer.okta.com/) credentials. +The setup described above offers default configurations to start the SAML module. Any changes made to the configuration will require adjustments to other configuration details accordingly. -{{< figure src="/attachments/appstore/platform-supported-content/modules/saml/saml-okta.png" >}} +##### Creating SP Manually at Azure -To connect [Azure](https://portal.azure.com/#home) with SAML, refer the below image. +To connect [Azure](https://portal.azure.com/#home) with SAML, refer to the below image. {{< figure src="/attachments/appstore/platform-supported-content/modules/saml/saml-azure.png" >}} -For IdP configuration, the default value for **Assertion consumer service index** is *0*. Set the corresponding value *0* for the **Index**. - -The setup described above, offers default configurations to start the SAML module. Any changes made to the configuration will require adjustments to other configuration details accordingly. +For the IdP configuration, the default value for the **Assertion consumer service index** is *0*. Set the corresponding value to *0* for the **Index**. #### Setting up Eight Mandatory Constants{#setup-eight-constants} @@ -251,17 +255,17 @@ To configure the Service Provider (SP) and Identity Provider (IdP) metadata, you * `Org_Name`: This constant represents Name. * `Org_DisplayName`: This constant represents Display Name. -* `Org_OrganizationURL`: This constant represents Organization URL. -* `Org_GivenName`: This constant represents Given Name. +* `Org_OrganizationURL`: This constant represents the Organization URL. +* `Org_GivenName`: This constant represents the Given Name. * `Org_Surname`: This constant represents Surname. -* `Org_Emailaddress`: This constant represents Email address. +* `Org_Emailaddress`: This constant represents the Email address. The following constants in the **IdP Configuration** > **USE_ME** folder help configure IdP metadata. 1. IdPAlias 2. IdPMetaDataURL -If you provide values for the above constants, the SAML module will automatically generate the required/default additional configurations with the help of `Default_CreateIDPConfiguration` microflow. +If you provide values for the above constants, the SAML module will automatically generate the required/default additional configurations with the help of the `Default_CreateIDPConfiguration` microflow. #### Deploy the Application and Login with SSO{#deploy-application} @@ -273,32 +277,32 @@ After configuring the eight constants, you need to deploy the application. For d The [Easy Default Flow](#easy-flow) section above, gives you an overview of the default settings. If you have requirements to deviate from these defaults, for example, to enable Force Authentication, change encryption settings from the default, or support multiple Identity Providers (IdPs), Non-default configuration setup offers advanced options for your SAML integration needs. With these features, you can customize the SAML configuration to meet your specific requirements. -In this configuration, you have several options to customize the Identity Provider (IdP) settings. Firstly, you can configure the IdP using constants. Additionally, the SAML module supports further customization of the IdP configuration through the implementation of a custom microflow called `Custom_Create_IdPConfiguration`. To do this, create a new object in the `Custom_Create_IdPConfiguration` microflow and add your own custom values in it. `Dep_IdPConfiguration.return` microflow returns a list of configured IdPs, which the SAML module then uses to generate the necessary SSO configurations for multiple IdPs. +In this configuration, you have several options to customize the Identity Provider (IdP) settings. Firstly, you can configure the IdP using constants. Additionally, the SAML module supports further customization of the IdP configuration through the implementation of a custom microflow called `Custom_Create_IdPConfiguration`. To do this, create a new object in the `Custom_Create_IdPConfiguration` microflow and add your own custom values to it. `Dep_IdPConfiguration.return` microflow returns a list of configured IdPs, which the SAML module then uses to generate the necessary SSO configurations for multiple IdPs. -In this configuration, users have the flexibility to introduce your own constants by creating custom IdP configurations. To enable this configuration, you need the IdP metadata obtained by creating an SSO app in the IdP without complete dependency on SP metadata. +In this configuration, users have the flexibility to introduce their own constants by creating custom IdP configurations. To enable this configuration, you need the IdP metadata obtained by creating an SSO app in the IdP without complete dependency on SP metadata. Follow the steps mentioned in the [Easy Default Flow](#easy-flow) with an additional custom configuration in Studio Pro. After [setting the eight mandatory constants](#setup-eight-constants), proceed with the [custom configuration](#custom-config). {{< figure src="/attachments/appstore/platform-supported-content/modules/saml/non-default.png" >}} -#### Creating custom configuration{#custom-config} +#### Creating Custom Configuration{#custom-config} This module uses non-persistence entity names starting with `Dep_` -Following entities are used to create IdP configurations: +The following entities are used to create IdP configurations: * `Dep_IdPConfiguration`: IdP details * `Dep_SPAttribute`: List of Attribute Consuming Service requested attribute * `Dep_SAMLAuthnContext`: List of SAMLAuthnContext * `Dep_IdpAttributeEntityAttributeMapping`: List of Attribute Mapping -Below table shows you the different attributes and their values for the quick reference. You can see the details of these attributes of above entities in the [Reference Guide for SAML IdP Configuration](/appstore/modules/saml/idp-attributes/) document. +The below table shows you the different attributes and their values for quick reference. You can see the details of these attributes of the above entities in the [Reference Guide for SAML IdP Configuration](/appstore/modules/saml/idp-attributes/) document. | IDPConfiguration(Non-Persistable entity) | Description | Default Value | | --- | --- | --- | | **Alias** (mandatory) | This represents IdPconfiguration Alias | | -| **ResponseProtocolBinding** | Response protocol binding, contains caption value of SAML20.Enum_ProtocolBinding | POST_BINDING | -| **EnableAssertionConsumerServiceIndex** | EnableAssertionConsumerService Concept, contains caption value of SAML20.Enum_AssertionConsumerServiceIndex | NO | +| **ResponseProtocolBinding** | Response protocol binding contains a caption value of SAML20.Enum_ProtocolBinding | POST_BINDING | +| **EnableAssertionConsumerServiceIndex** | EnableAssertionConsumerService Concept contains caption value of SAML20.Enum_AssertionConsumerServiceIndex | NO | | **AssertionConsumerServiceIndex** | This should hold the same value for the SAML configuration and the IdPs. | 0 | | **EnableInitialLoginAttributeConsumingService** | This will be returned when the end-user initially signs in | FALSE | | **InitialLoginServiceName** | It represents the Initial login Attribute Consuming Service name | Service1 | @@ -317,25 +321,25 @@ Below table shows you the different attributes and their values for the quick re | **CustomPrepareInSessionAuthenticationMicroflow** | This represents the Custom Prepare In-Session Authentication microflow. It sets up specific data in the current user session so that it can be recovered after the SAML in-session authentication flow returns to the app. | | | **CustomEvaluateInSessionAuthenticationMicroflow** | It implements the logic that handles the authentication details of the in-session authentication. | | | **NameIDFormat** | This attribute represents the Description of SAML20.NameIDFormat. Disable NameID policy is true when this attribute (NameIDFormat) is invalid. | | -| **AuthenticationContext** | It represents Authentication context comparison, contains caption value of SAML20.TypeOfAuthnContext | Exact (Default) | +| **AuthenticationContext** | It represents Authentication context comparison contains the caption value of SAML20.TypeOfAuthnContext | Exact (Default) | | **UserEntity** | The Mendix entity in which you will store and look up the user account. | Administration.Account | | **UserPrincipalAttribute** | Determines the attribute on which you want to do the lookup in Entity attributes. | Name | -| **UserIdPPrincipalAttribute** | We need to provide the attribute which contains the user name which uniquely identifies the user. It should be Assertion Name | UseNameID | +| **UserIdPPrincipalAttribute** | We need to provide the attribute that contains the user name that uniquely identifies the user. It should be Assertion Name | UseNameID | | **CreateUsers** | The module will always search for the user, based on the Identifying Assertion. You can allow the module to create users with a predefined user role. If you allow the module to create users, it will automatically create a new user account if the user cannot be found. If the module is not allowed to create users, it will present a message to the user stating that the login action was successful but no user has been configured. | true | | **UserRoleName** | This role will be assigned to newly created users. | User | -| **UserType** | Assign usertype to the created users | Internal | -| **CustomUserProvisioning** | This is an optional configuration to run a microflow to persist user information in your app model using some of your own specific logic. First, you need to develop a custom microflow in your app and select it for the CustomUserProvisioning | | -| **CustomAfterSigninLogic** | Checking the box will execute the `CustomAfterSigninLogic microflow`. You can replace the default with your custom microflow below. This microflow runs after a new session is created, allowing you to copy or review data from the original (anonymous) session to the new session or user. This functionality is similar to the after sign-in microflow in Mendix project security. Only custom microflows starting with 'Custom' will appear in the list | | +| **UserType** | Assign user type to the created users | Internal | +| **CustomUserProvisioning** | This is an optional configuration to run a microflow to persist user information in your app model using some of your own specific logic. First, you need to develop a custom microflow in your app and select it for the CustomUserProvisioning. | | +| **CustomAfterSigninLogic** | Checking the box will execute the `CustomAfterSigninLogic microflow`. You can replace the default with your custom microflow below. This microflow runs after a new session is created, allowing you to copy or review data from the original (anonymous) session to the new session or user. This functionality is similar to the after-sign-in microflow in Mendix project security. Only custom microflows starting with 'Custom' will appear in the list. | | | **UseEncryption** | Enable better security for app | TRUE | | **EncryptionMethod** | This represents the Encryption Algorithm | SHA256 - RSA | | **EncryptionKeyLength** | This constant represents the Encryption length | 2048 bits | | Active | After completion of Idp config it will make the Toggle Active | true | -Deploy the application and login with the SSO. For more information, see the [Deploy the Application and Login with SSO](#deploy-application) section above. +Deploy the application and log in with the SSO. For more information, see the [Deploy the Application and Login with SSO](#deploy-application) section above. ### Runtime Configuration Flow{#runtime-config} -This process involves configuring both the Identity Provider (IdP) and the Service Provider (SP) metadata to establish secure authentication for the user. In some IdPs, SSO app creation is not allowed without having SP metadata. This configuration method is ideal for such scenarios. The following subsections provide you detailed instructions on integrating your application with SSO: +This process involves configuring both the Identity Provider (IdP) and the Service Provider (SP) metadata to establish secure authentication for the user. In some IdPs, SSO app creation is not allowed without having SP metadata. This configuration method is ideal for such scenarios. The following subsections provide you with detailed instructions on integrating your application with SSO: {{< figure src="/attachments/appstore/platform-supported-content/modules/saml/runtime-config.png" >}} @@ -346,9 +350,9 @@ Deploy your application and log in with the application Admin account. Click **S #### Configuring Steps 1. Navigate to the **Model Reflection**, select the required module from the left navigation pane, and select **Click to refresh** to synchronize entities and microflows. -2. In the **SP Configuration** tab, provide the necessary values and click **Save**. You need to complete this step before proceeding for IdP Configuration. +2. In the **SP Configuration** tab, provide the necessary values and click **Save**. You need to complete this step before proceeding with IdP Configuration. 3. In the IdP Configuration tab, click **New** and provide the necessary details. For more information on IdP configuration tabs, see the [Reference Guide for SAML IdP Configuration](/appstore/modules/saml/idp-attributes/) document. -4. From version 4.0.0 of the SAML module, you have the option to download the SP Metadata from **Encryption Settings** tab, **Identity Provider Metadata** tab, and at the end of the configuration process. +4. From version 4.0.0 of the SAML module, you have the option to download the SP Metadata from the **Encryption Settings** tab, **Identity Provider Metadata** tab, and at the end of the configuration process. #### Downloading and Uploading SP Metadata Manually @@ -360,7 +364,7 @@ The XML for the SP metadata is signed. If you make any changes to the metadata ( #### Downloading and Uploading IdP Metadata Manually -Once you configure and upload the SP metadata, On the **Identity Provider Metadata** tab of the application, you can upload the IdP metadata. This can be done by either using IdP metadata URL or uploading an XML file. +Once you configure and upload the SP metadata, On the **Identity Provider Metadata** tab of the application, you can upload the IdP metadata. This can be done by either using the IdP metadata URL or uploading an XML file. With the completion of these steps, your application is now configured for SSO. @@ -368,7 +372,7 @@ With the completion of these steps, your application is now configured for SSO. After each restart, the configuration will be automatically updated to reflect any changes made in custom microflows or constants. {{% /alert %}} -## Configuring IdP Specific Settings{#idp-specific-settings} +## Configuring IdP-Specific Settings{#idp-specific-settings} Before configuring any IdP, you need to configure the Service Provider (SP), which is your current application. The SP configuration allows you to configure some basic information for the SP metadata file. This information will be available to the IdP administrator for reference. @@ -392,7 +396,7 @@ The XML for the SP metadata is signed. If you make any changes to the metadata ( The following settings apply to the IdP configuration: -* **Alias** – The alias for your IdP can be used in the URL of the application to indicate the IdP configuration that should be used during login. The alias must be unique, but you should also make sure that this alias is compatible with usage in an URL (meaning, no `/`, `&`, `?`, or special character that could get lost in the communication). +* **Alias** – The alias for your IdP can be used in the URL of the application to indicate the IdP configuration that should be used during login. The alias must be unique, but you should also make sure that this alias is compatible with usage in a URL (meaning, no `/`, `&`, `?`, or a special character that could get lost in the communication). * **Log SAML Requests** – Determines whether all requests and login attempts should be logged and stored in an entity. @@ -400,13 +404,13 @@ The following settings apply to the IdP configuration: ## User Provisioning{#user-provisioning} -Initially your app will not have any end-users. The SAML module provides so-called Just-In-Time (JIT) user provisioning. This means that an end-user will be created in your app when they log in for the first time. If you do not want JIT user provisioning, it is possible to disable it as described in the section [Custom User Provisioning at Runtime](#custom-provisioning-rt) below. +Initially, your app will not have any end-users. The SAML module provides so-called Just-In-Time (JIT) user provisioning. This means that an end-user will be created in your app when they log in for the first time. If you do not want JIT user provisioning, it is possible to disable it as described in the section [Custom User Provisioning at Runtime](#custom-provisioning-rt) below. -By default, end-users are provisioned using the Account object in the Administration module. If you need to use a custom user entity, you can do this via [Custom User Provisioning Using a Microflow](#custom-provisioning-mf) or (in version 2.4.0 and above) [Custom User Provisioning at Deploy Time](#custom-provisioning-dep) or [Custom User Provisioning at Runtime](#custom-provisioning-rt). +By default, end-users are provisioned using the Account object in the Administration module. If you need to use a custom user entity, you can do this via [Custom User Provisioning at Deploy Time](#custom-provisioning-dep) or [Custom User Provisioning at Runtime](#custom-provisioning-rt). ### Default User Provisioning -This applies the following mapping: +This applies to the following mapping: | ID-token Provided by your IdP | Attribute of `Administration.Account` Object | | --- | --- | @@ -418,40 +422,32 @@ If you create custom user entities as specializations of the `System.User` entit If you connect multiple IdPs to your Mendix app, you can use separate custom user entities for each IdP, each with its own attribute mapping. -### Custom User Provisioning Using a Microflow{#custom-provisioning-mf} - -Review the microflow `CUSTOM_UserProvisioning` in the **USE_ME** > 1. **Configuration** folder of the SAML module. This is where you can change the way that end-users are provisioned in your app. The OpenID token is passed to the microflow as a parameter. Use this object to find an existing, or create a new, `Administration.Account` object for the end-user. This is set as the return value of the microflow. You can find examples included in the **USE_ME** > 1. **Configuration** > **User Provisioning Examples** folder. - -Make a single call from `CUSTOM_UserProvisioning` to your own module where you implement the provisioning flow you need. This way, it will be easy to install new versions of the SAML module over time without overwriting your custom provisioning. - -The SAML module supports multiple IdPs. Since each provider can provide user data in a different format, you may want to use multiple provisioning flows. See the microflow `UserProvisioning_Sample` for an example and details on how to do this. - ### Custom User Provisioning at Deploy Time{#custom-provisioning-dep} -{{% alert color="info" %}} This feature is available in version 2.4.0 and above {{% /alert %}} +{{% alert color="info" %}} This feature is available in version 4.0.0 and above {{% /alert %}} You can set up custom user provisioning by setting constants when you deploy your app. This has the following limitations compared to setting up provisioning using a microflow or changing the settings at runtime: * You will need to restart your app to apply changes to the constants * You cannot set custom mapping of IdP claims to attributes of your custom user entity -You can set up custom user provisioning by setting the following constants. You can set default values when you build your app, but can override these in the app's environment. +You can set up custom user provisioning by setting the following constants. You can set default values when you build your app but can override these in the app's environment. | Constant | Use | Notes | Example | | --- | --- | --- | --- | | CustomUserEntity | a custom user entity | in the form `modulename.entityname` – a specialization of `System.User` | `Administration.Account` | | PrincipalAttribute | the attribute holding the unique identifier of an authenticated user | | `Name` | | IdPAttribute | the IdP claim which is the unique identifier of an authenticated user | *Default* | `NameId` | -| AllowcreateUsers | allow to create users in the application | *Optional* | `True` | +| AllowcreateUsers | allows to create users in the application | *Optional* | `True` | | Userrole | the role which will be assigned to newly created users | *Optional* | `User` | -| UserType | assign user type to the created users | *0ptional* | `Internal` | +| UserType | assigns user type to the created user | *0ptional* | `Internal` | | CustomUserProvisioning | a custom microflow to use for user provisioning | *0ptional* – in the form `modulename.microflowname` – the microflow name must begin with the string `CustomUserProvisioning` | `Mymodule.CustomUserProvisioningEntra` | ### Custom User Provisioning at Runtime{#custom-provisioning-rt} -{{% alert color="info" %}} This feature is available in version 4.0.0 and above {{% /alert %}} +{{% alert color="info" %}} This feature is available in version 4.0.0 and above. {{% /alert %}} -You can set up custom user provisioning by selecting the **IdP Configuration** tab of SAML module. Select configuration and you can see the **User Provisioning** tab. +You can set up custom user provisioning by selecting the **IdP Configuration** tab of the SAML module. Select configuration and you can see the **User Provisioning** tab. 1. Set up the following information in the **User Provisioning** tab: @@ -460,9 +456,10 @@ You can set up custom user provisioning by selecting the **IdP Configuration** t * By default, the value is set to *Name*. * **Allow the module to create users** – This enables the module to create users based on user provisioning and attribute mapping configurations. When disabled, it will still update existing users. However, for new users, it will display an exception message stating that the login action was successful but no user has been configured. * By default, the value is set to *Yes*. - * **User role** – the role which will be assigned to newly created users. - * **User Type** – this allows you to configure end-users of your application as internal or external. - * By default, the value is set to *Internal*. + * **Default Userrole** – the role assigned to newly created users and remains unchanged even when the user's details are updated. You can select one default user role. To assign additional roles, use the Access Token Parsing Microflow. If the Access Token Processing Microflow is selected, OIDC verifies the updated default role configuration and applies any changes to the user's role. Note that, bulk updates for existing users are not automated when the default role configuration is changed. + * **User Type** – this allows you to configure end-users of your application as internal or external. It is created upon the creation of the user and updated each time the user logs in. + * By default, the value is set to *Internal*. + 2. Under **Attribute Mapping**, for each piece of information you want to add to your custom user entity, select an **IdP Attribute** (claim) and specify the **Configured Entity Attribute** where you want to store the information. Note the following: @@ -472,7 +469,13 @@ You can set up custom user provisioning by selecting the **IdP Configuration** t * The IdP Attribute is one of the fixed claims supported by the [OIDC SSO](/appstore/modules/oidc/) module. * **IdP Attributes**(Claims) cannot be of type enum, autonumber, or an association. -3. In the **Custom UserProvisioning**, select a microflow you want to run for [Custom User Provisioning Using a Microflow](#custom-provisioning-mf). The custom microflow name must begin with the string `UC_CustomProvisioning`. If you have added a new microflow, you will need to refresh the module containing your microflow as described in [Installing Mx Model Reflection](/appstore/modules/model-reflection/). This selection can be blank if you do not want to add custom logic. +3. Optionally, you can use the custom logic in the **User Provisioning**. In the **Custom UserProvisioning** field, select a microflow you want to run for custom user provisioning. The custom microflow name must begin with the string `UC_CustomProvisioning` and requires the following parameters: + + 1. **UserInfoParameter(UserCommons.UserInfoParam)**: A Mendix object containing user claims information through its associated objects. You can use this parameter to retrieve user provisioning configuration information. + 2. **User(System.User)**: A Mendix object representing the user to be provisioned. Ensure that the selected microflow matches this parameter signature. + + The microflow must return a **System.User** object to ensure proper user provisioning and updates. It will be executed after user creation or update of user. However, starting from version 2.0.0 of the UserCommons module, this is no longer mandatory. If you have added a new microflow, you will need to refresh the module containing your microflow as described in the [Mx Model Reflection](/appstore/modules/model-reflection/). This selection can be blank if you do not want to add custom logic. + 4. Click **Save** to save the configuration. ### Custom Behavior @@ -481,7 +484,10 @@ This section describes the microflows that you may want to customize if needed. #### evaluateMultipleUserMatches -The module tries to look up the user that matches the provided user name. When multiple `System.User` records are found, this microflow is always executed. +{{% alert color="info" %}} +Starting from the version 4.0.0. of the SAML module, `evaluateMultipleUserMatches` microflow is moved to the UserCommons.{{% /alert %}} + +The module tries to look up the user that matches the provided user name. When multiple `System.User` records are found, and this microflow is always executed. It is possible to customize this microflow to determine the correct user. Whichever user instance is returned will be signed in to the application (and passed on to any other microflow). @@ -491,7 +497,7 @@ When selecting in the SSO configuration to run the `customUserProvisioning` acti #### CustomAfterSigninLogic -After a new session is created for the user, this microflow can be called to copy any data from the previous session to the new session. This microflow behaves similarly to the platform after the sign-in microflow. By using this microflow, it is possible to copy records from the anonymous user to the newly signed-in user. +After a new session is created for the user, this microflow can be called to copy any data from the previous session to the new session. This microflow behaves similarly to the platform after the sign-in microflow. Using this microflow, it is possible to copy records from the anonymous user to the newly signed-in user. ## Using Deep Links @@ -499,9 +505,9 @@ After a new session is created for the user, this microflow can be called to cop The Deep Link module has been deprecated from Studio Pro 10.6.0 and replaced by [page URLs](/refguide/page-properties/#url) and [microflow URLs](/refguide/microflow/#url). For instructions on migrating to page and microflow URLs, see the [Using Page and Microflow URLs with SAML](#page-microflow-url-saml) section below. {{% /alert %}} -If end-users who use the deeplink do not yet have a session in your app, the deeplink can trigger the SSO process. If successful, the end-user will be automatically redirected back to the deeplink. +If end-users who use the deep link do not yet have a session in your app, the deep link can trigger the SSO process. If successful, the end-user will be automatically redirected back to the deep link. -For more information on using Deep Link module (with Mendix 8 and 9), see the [Using Deep Link Module](#using-deeplink) section below. +For more information on using the Deep Link module (with Mendix 8 and 9), see the [Using Deep Link Module](#using-deeplink) section below. ### Using Page and Microflow URLs with SAML{#page-microflow-url-saml} @@ -516,9 +522,9 @@ Page URLs and Microflow URLs are supported with SAML for Mendix version 10.6 and * For manual redirection: add an onclick event to the button that manually triggers the SSO login. `this.href = 'sso/login' + (returnURL ? '?cont=link' + encodeURIComponent(returnURL) : '');` 4. To allow the end users to navigate to the desired page, URL can be formed as follows: - * If single IdP configured, URL will be the base URL of your application followed by `SSO/login?cont={page/Microflowurl}`. + * If a single IdP is configured, the URL will be the base URL of your application followed by `SSO/login?cont={page/Microflowurl}`. For example, `http://localhost:8080/SSO/login?cont=link/pagepath`. - * If Multiple IdPs configured, you can specify which IdP should be used by adding the alias (MyIdPAlias) `SSO/login?_idp_id={MyIdPAlias}&cont={page/Microflowurl}`. + * If Multiple IdPs are configured, you can specify which IdP should be used by adding the alias (MyIdPAlias) `SSO/login?_idp_id={MyIdPAlias}&cont={page/Microflowurl}`. For example, `http://localhost:8080/SSO/login?_idp_id=Okta&cont=link/pagepath`. Once the above changes are applied, end users can directly navigate to the desired page. If not logged in, they will be redirected to the IdP login page for authentication. After successful log in, they will be directed to the desired page using page and microflow URLs. @@ -527,7 +533,7 @@ For more information, see the [Migrating to Page and Microflow URLs](/appstore/m ### Using Deep Link Module{#using-deeplink} -When using the SAML module with the Deeplink Module (for Mendix 8 and 9), you need to set the `LoginLocation` constant of the Deeplink module to `/SSO/login?f=true&cont=` in order to redirect the user to the original deep link location after a successful login. +When using the SAML module with the Deep link Module (for Mendix 8 and 9), you need to set the `LoginLocation` constant of the Deeplink module to `/SSO/login?f=true&cont=` to redirect the user to the original deep link location after a successful login. The DeepLink module does not have full support for multiple IdPs, so it can only trigger logins at one IdP. You can specify which IdP should be used by adding the alias (`MyIdPAlias`) to the `LoginLocation`: `/SSO/login?_idp_id={MyIdPAlias}&cont=`. @@ -537,12 +543,12 @@ If you are using version 6.1.0 or above of the Deep Link module, you should also When testing and debugging the configuration, an option is to view the messages in the log files. A detailed cause of the failure will be printed in case something goes wrong. -When enabling the log node SSO to show trace messages, you can find detailed information from every step in the process. This allows for an easy analysis of where potential configuration errors recite. Enabling trace messages for the SSO log node will also allow for detailed response messages to the user trying to sign in. By default, every failed login attempt always results in this message: “Unable to validate the SAML message!” After enabling trace logging, you can see the exact cause of the failure in the browser. In case of exceptions, you can even see the stack trace. Obviously, you should not have this enabled in production, but it does allow for easier and faster testing of the configuration. +When enabling the log node SSO to show trace messages, you can find detailed information from every step in the process. This allows for an easy analysis of where potential configuration errors occur. Enabling trace messages for the SSO log node will also allow for detailed response messages to the user trying to sign in. By default, every failed login attempt always results in this message: “Unable to validate the SAML message!” After enabling trace logging, you can see the exact cause of the failure in the browser. In case of exceptions, you can even see the stack trace. You should not have this enabled in production, but it does allow for easier and faster testing of the configuration. ### Error Messages * **"The application hasn't been properly configured to support single sign-on."** – This message indicates an incomplete IdP configuration. In more detailed error messages (via the log file), you are able to see which property in the IdP configuration has not been configured. -* **"Unable to complete the request"** – A message has been received that does not have a RelayState/RequestID that matches any of the previously generated IDs (or the message has been answered already). If you get this message, you should validate the message communication and confirm that you are not using unsolicited requests. Or, you can enable that check the box to allow for IdP initiated authentication. +* **"Unable to complete the request"** – A message has been received that does not have a RelayState/RequestID that matches any of the previously generated IDs (or the message has been answered already). If you get this message, you should validate the message communication and confirm that you are not using unsolicited requests. Or, you can enable by checking the box to allow for IdP-initiated authentication. * **"The authentication was successful, but there is no account available in this application."** – There is no account that matches the identifying assertion, by downloading the SAMLResponse message, you can see the assertion attributes in the XML file to validate which user name has been sent. * **"Your account hasn't been configured to access this application."** – There is a user account available in the application that matches the identifying assertion, but the user does not have user roles or the user is not active. * **"An unexpected error occurred while creating a session"** – An uncaught exception occurred, which could be a configuration error or situation that has not been supported by the module. More information should be available in the stack trace. @@ -565,9 +571,9 @@ If it is not an option to have the IdP and the app in the same domain, set the v When using the SAML module with Mendix version 10.9 to 10.12.2, you may encounter an endless redirect loop to the login page. This issue is related to the session cookie handling in these versions. To resolve this redirect loop, Mendix recommends upgrading to Mendix version 10.12.3 or above. If a user logs in on one tab and then attempts to log in on another tab, a `401` error may initially appear. However, after the browser reloads, the error will be resolved as the session is validated and synchronized. -### Testing a new ‘deploy-time’ SAML configuration +### Testing a New ‘deploy-time’ SAML Configuration -If you detect an error during start -up, the application will start, although SSO via SAML may not work. You can log in as the local MxAdmin user and make the necessary configuration adjustments to get the SSO working and then you can make the necessary adjustments in the deploy-time configuration. +If you detect an error during start-up, the application will start, although SSO via SAML may not work. You can log in as the local MxAdmin user and make the necessary configuration adjustments to get the SSO working and then you can make the necessary adjustments in the deploy-time configuration. ## URLs{#urls} @@ -577,15 +583,15 @@ The following diagram gives an overview of all endpoints that the SAML SSO modul End-users can access your app through the following endpoints when using the SAML SSO module: -* **/SSO/discovery** – If there are multiple active IdP configurations and discovery is enabled, this page can give a list of all the IdP configuration. It also allows the user to click the correct URL to sign in. +* **/SSO/discovery** – If there are multiple active IdP configurations and discovery is enabled, this page can give a list of all the IdP configurations. It also allows the user to click the correct URL to sign in. * **/SSO/login/[IdP Alias]** or **/SSO/login?_idp_id=[IdP_Alias]&action=verify&on={contextname}** – For logging using a specific IdP, you have to open either of these two URLs and pass the IdP alias as a parameter in the URL. - The (optional) parameters for this end point are as follows: + The (optional) parameters for this endpoint are as follows: * **idp_id** – this indicates which idp will be used to sign the end-user in if you connect your app using multiple SAML IdPs * **action=verify** – indicates that in-session authentication is being requested (see [In-session Authentication](/appstore/modules/saml/idp-attributes/#in-session) for more information) * **on={contextname}** – this gives context to the initiation of in-session authentication, (see [In-session Authentication](/appstore/modules/saml/idp-attributes/#in-session) for more information) -* **/SSO/login** or **/SSO/login?action=verify&on={contextname}** – If you have only one active IdP, opening these URLs will automatically try to log you in using the active IdP. In the case of multiple active IdPs and discovery enabled, the user will be redirected to the discovery page. If discovery is not allowed, the user will receive an error message. The optional parameters work as described above. +* **/SSO/login** or **/SSO/login?action=verify&on={contextname}** – If you have only one active IdP, opening these URLs will automatically try to log you in using the active IdP. In the case of multiple active IdPs and discovery enabled the user will be redirected to the discovery page. If discovery is not allowed, the user will receive an error message. The optional parameters work as described above. -Your SAML IdP can consume the following endpoints at your app. Typically the SP-metadata is used to communicate the URLs to your SAML IdP. As a Low-Code Developer you don’t have to consider these endpoints. This information is included here for completeness and as a reference when questions arise around integration with your SAML IdP. +Your SAML IdP can consume the following endpoints at your app. Typically the SP-metadata is used to communicate the URLs to your SAML IdP. As a Low-Code Developer, you don’t have to consider these endpoints. This information is included here for completeness and as a reference when questions arise around integration with your SAML IdP. * **/SSO/metadata/[IDP-Alias]** – This provides a point for the IdP to automatically download the metadata from this SP * **/SSO/assertion** – This is the endpoint where the IdP submits the SAML assertion to the so-called ‘Assertion Consumer Service’ @@ -598,4 +604,4 @@ Your SAML IdP can consume the following endpoints at your app. Typically the SP- {{% alert color="info" %}}You must log into the Mendix Platform to see the lecture above.{{% /alert %}} * [Advanced configuration for SAML](/appstore/modules/saml/advanced-configuration/) * [Reference Guide for SAML IdP Configuration](/appstore/modules/saml/idp-attributes/) -* [OIDC SSO](/appstore/modules/oidc/) \ No newline at end of file +* [OIDC SSO](/appstore/modules/oidc/) diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/SAML/advanced_configuration.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/SAML/advanced_configuration.md index 8b36b3fa7e8..ae86a3177cf 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/SAML/advanced_configuration.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/SAML/advanced_configuration.md @@ -1,6 +1,7 @@ --- title: "Advanced configuration for SAML" url: /appstore/modules/saml/advanced-configuration +linktitle: "SAML Advanced Configuration" weight: 20 description: "Describes the advanced configuration for the SAML module" #If moving or renaming this doc file, implement a temporary redirect and let the respective team know they should update the URL in the product. See Mapping to Products for more details. @@ -10,31 +11,33 @@ description: "Describes the advanced configuration for the SAML module" This document outlines the advanced configurations for the SAML module. For basic configuration and usage, refer to the [SAML](/appstore/modules/saml/) documentation. -### Multi-tenant Behavior +### Multitenant Behavior The resource folder contains a file called *SAMLConfig.properties*. In this file, you can optionally override advanced settings from the SAML module. Usage of this file is optional. When the file does not exist or you do not specify a setting, the module will use its default behavior. This file contains the documented properties, and example lines show the default values of these options. -With these settings, you can configure the behavior of this module and improve the multi-tenant behavior of your application. For plain SAML authentication, it is best to leave this file unchanged. +With these settings, you can configure the behavior of this module and improve the multitenant behavior of your application. For plain SAML authentication, it is best to leave this file unchanged. + +If you are using a custom URL, see [How Do I Get my SAML Metadata or CommunityCommons.GetApplicationUrl to Use the Custom URL?](/developerportal/deploy/custom-domains/#use-custom-url) in the *Custom Domains* documentation. ### Use a Certificate Issued by a Certificate Authority {#use-ca} -By default the SAML SSO module will use self-signed certificates. It is, however, also possible to use certificates issued by a certificate authority (CA). +By default, the SAML SSO module will use self-signed certificates. It is, however, also possible to use certificates issued by a certificate authority (CA). SAML SSO supports 2 file formats: -* a PKCS 12 file, which typically has extension .pfx or .p12. +* a PKCS 12 file, which typically has an extension .pfx or .p12. * a jks file. -To use a CA-certificate, upload it as your key store file as described in [Managing the Keys and Key Store](/appstore/modules/saml/idp-attributes/#keystore). +To use a CA certificate, upload it as your key store file as described in [Managing the Keys and Key Store](/appstore/modules/saml/idp-attributes/#keystore). Remember to do the following: -* set the certificate password in the `KeystorePassword` constant of your app to be able to read the contents of the uploaded key store. -* use an alias for the certificate — this must be the name parameter that is provided when creating the certificate you are uploading. If the values do not match, the SAML module will fall back to using a self-signed certificate instead. -* the value of the configured SP EntityID must match the alias that is included in the uploaded key store. +* Set the certificate password in the `KeystorePassword` constant of your app to be able to read the contents of the uploaded key store. +* Use an alias for the certificate — this must be the name parameter that is provided when creating the certificate you are uploading. If the values do not match, the SAML module will fall back to using a self-signed certificate instead. +* The value of the configured SP EntityID must match the alias that is included in the uploaded key store. ### Customizing the Login Page -Mendix runtime/system module comes with a default login page. When using SAML with a single IdP, this page is not required. +The Mendix runtime/system module comes with a default login page. When using SAML with a single IdP, this page is not required. You need to customize this login page when end-users have different ways of login: 1. If you want to use both Mendix (local) login and SSO login: @@ -42,7 +45,7 @@ You need to customize this login page when end-users have different ways of logi 1. Go to the **App** > **Show App Directory in Explorer** > **theme/web** folder (for Mendix versions below 9.0.0, this is the **theme** folder). 2. Rename `login.html` to `login-without-sso.html`. 3. Rename `login-with-mendixsso-button.html` to `login.html`. - 4. Open login.html, update the **href** to `/SSO`, and give a button name + 4. Open login.html, update the **href** to `/SSO`, and give a button name. Your app is now configured to use Mendix SSO login. 2. If you want to connect your app with multiple IdPs and the end-user of your app needs to select the IdP to use for login. @@ -53,11 +56,11 @@ You need to customize this login page when end-users have different ways of logi ### Custom Settings -The resources folder contains the *SAMLConfig.properties* file, and through this file, advanced settings can be configured for the module. This file contains the settings along with documentation on the settings. Through this file, it is possible to alter the URLs used as well as how the application behaves in a multi-tenant environment. The file also specifies all the default values and behavior in more detail. +The resources folder contains the *SAMLConfig.properties* file, and through this file, advanced settings can be configured for the module. This file contains the settings along with documentation on the settings. Through this file, it is possible to alter the URLs used as well as how the application behaves in a multitenant environment. The file also specifies all the default values and behavior in more detail. If you are using a custom URL, see [How Do I Get my SAML Metadata or CommunityCommons.GetApplicationUrl to Use the Custom URL?](/developerportal/deploy/custom-domains/#use-custom-url) in the *Custom Domains* documentation. ## Read More * [OIDC SSO](/appstore/modules/oidc/) -* [Reference Guide for SAML IdP Configuration](/appstore/modules/saml/idp-attributes/) \ No newline at end of file +* [Reference Guide for SAML IdP Configuration](/appstore/modules/saml/idp-attributes/) diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/SAML/idp_attributes.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/SAML/idp_attributes.md index dc0997a256e..77301a6f18d 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/SAML/idp_attributes.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/SAML/idp_attributes.md @@ -1,6 +1,7 @@ --- title: "Reference Guide for SAML IdP Configuration" url: /appstore/modules/saml/idp-attributes +linktitle: "SAML IdP Configuration" weight: 10 description: "Describes the list of IdP Attributes for the SAML module" #If moving or renaming this doc file, implement a temporary redirect and let the respective team know they should update the URL in the product. See Mapping to Products for more details. @@ -8,17 +9,19 @@ description: "Describes the list of IdP Attributes for the SAML module" ## Introduction -This document provides you the detail description of each IdP attribute and their default value for deploy-time configuration. You need to use these attributes when configuring the SAML module to create the IdP configuration. For more details, see [Non-default Configuration](/appstore/modules/saml/#non-default). +This document provides you a detail description of each IdP attribute and its default value for deploy-time configuration. You need to use these attributes when configuring the SAML module to create the IdP configuration. For more details, see [Non-default Configuration](/appstore/modules/saml/#non-default). ## Identity Configuration -You may need to choose a different SAML binding to match your IdP. You can configure the SAML binding in the **Identity Provider Metadata** tab of the OpenConfiguration microflow. +The **Identity Configuration** tab allows seamless integration between your application and an Identity Provider (IdP) using SAML protocols. It provides details on key settings, including **Response Protocol Binding**, **AssertionConsumerService Concept**, and **Assertion consumer service index** enabling you to optimize SAML response handling and service provider metadata configurations. ### Response Protocol Binding{#saml-binding} +You may need to choose a different SAML binding to match your IdP. You can configure the SAML binding in the **Identity Configuration** tab of the `OpenConfiguration` microflow. + By default, the SAML SSO module uses `POST_BINDING` for the SAML response. In most cases (for example, when using AzureAD) you will want to stick to this default. Some IdPs, however, require your app to use the more secure `ARTIFACT_BINDING`. -To use artifact binding, select ARTIFACT_BINDING option for **Response protocol binding**. This configuration helps enable the Post/Artifact binding, used as the following: +To use artifact binding, select the ARTIFACT_BINDING option for **Response protocol binding**. This configuration helps enable the Post/Artifact binding, used as the following: * `ProtocolBinding` attribute in Auth-request. * `AssertionConsumerService` binding in SP-MetaData. @@ -28,34 +31,36 @@ Using artifact binding for SAML responses at the SAML IdP is only available in t * v3.3.0/v3.3.1 and above for Mendix 9 and 10 * v2.3.0 and above for Mendix 8 -`POST_BINDING` is the default value when using a [Easy Default Flow](/appstore/modules/saml/#easy-flow). +`POST_BINDING` is the default value when using an [Easy Default Flow](/appstore/modules/saml/#easy-flow). ### Use AssertionConsumerService Concept -In most cases (for example, with Entra ID), you don not want to use the AssertionConsumerService concept in requests. Some IdPs, however, require requests to include an AssertionConsumerServiceIndex. This refers to the definition of the Assertion Consumer Service in the SP-metadata. +In most cases (for example, with Entra ID), you do not want to use the AssertionConsumerService concept in requests. Some IdPs, however, require requests to include an AssertionConsumerServiceIndex. This refers to the definition of the Assertion Consumer Service in the SP metadata. -* If **Use AssertionConsumerService Concept** is set to `No…` then Auth-Request contains the `AssertionConsumerServiceURL` and `ProtocolBinding` attributes. -* If **Use AssertionConsumerService Concept** is set to `Yes…` then Auth-Request contains only the ‘`AssertionConsumerServiceIndex`’ attribute. +* If the **Use AssertionConsumerService Concept** is set to `No…` then Auth-Request contains the `AssertionConsumerServiceURL` and `ProtocolBinding` attributes. +* If the **Use AssertionConsumerService Concept** is set to `Yes…` then Auth-Request contains only the ‘`AssertionConsumerServiceIndex`’ attribute. By default, it is `No` when using a [Easy Default Flow](/appstore/modules/saml/#easy-flow). +### Assertion Consumer Service Index + Set **Assertion consumer service index** to the value you want to use for `AssertionConsumerServiceIndex` in both the Auth-Request and also in the SP-Metadata. The configured binding will be included in the SP metadata, as indicated in the [URLs](/appstore/modules/saml/#urls) section. The default value is `0` for the deploy time configuration. -### Attribute Consuming Service +## Attribute Consuming Service -In the **Attribute Consuming Service** tab, you can configure your app using the SAML protocol to request specific attributes, such as Date of Birth or Gender, from the SAML IdP. Your SAML IdP documentation will tell you what attributes can be requested. In the request you can also indicate whether you consider the attribute as mandatory or optional for your app’s logic. +In the **Attribute Consuming Service** tab, you can configure your app using the SAML protocol to request specific attributes, such as Date of Birth or Gender, from the SAML IdP. Your SAML IdP documentation will tell you what attributes can be requested. In the request, you can also indicate whether you consider the attribute as mandatory or optional for your app’s logic. You can set up two sets of attributes, by adding new attributes, editing existing attributes, or removing selected attributes. These will be provided at different times. Those listed under **I want to request attribute(s) at my IDP during initial login** will be returned when the end-user initially signs in. Those listed under **I want to request attribute(s) at my IDP during in-session login** will be returned during [In-session Authentication](#in-session). -Although the typical use case for requesting attributes is to obtain information about the user, you can request an attribute with a specific value. In this case, you can configure the optional **Attribute value that must be returned**. +Although the typical use case for requesting attributes is to obtain information about the user, you can request an attribute with a specific value. In this case, you can configure the optional Attribute value that must be returned. -When using using a [Easy Default Flow](/appstore/modules/saml/#easy-flow), disable both initial and in-session login options. +When using an [Easy Default Flow](/appstore/modules/saml/#easy-flow), disable both initial and in-session login options. Requesting user attributes at the SAML IdP is only available in the following versions of the module (depending on which Mendix version you are using) * v3.3.0/v3.3.1 and above for Mendix 9 and 10 * v2.3.0 and above for Mendix 8 -### Encryption Settings{#encryption-settings} +## Encryption Settings{#encryption-settings} * **Enable better security for app** (or *Use encryption*) – This setting controls the encryption and signing of messages being exchanged between your app (as an SP) and the IdP. This is in addition to the encryption provided by using a secure HTTPS connection. For security and privacy reasons it is enabled by default. When using the POST binding ensure the security/encryption settings remain enabled. When using the artifact binding on the responses, or if there are limitations in your IdP, it is possible to disable the security/encryption setting but we do not recommend this. @@ -64,21 +69,21 @@ Requesting user attributes at the SAML IdP is only available in the following ve * **What algorithm do you want to use to sign messages** (or *Encryption method*) – `SHA1 - RSA` or `SHA256 - RSA` * **Encryption key length** – 1024 or 2048 bits - When using using a [Easy Default Flow](/appstore/modules/saml/#easy-flow), default values are `SHA256 - RSA` and 2048 bits + When using an [Easy Default Flow](/appstore/modules/saml/#easy-flow), default values are `SHA256 - RSA` and 2048 bits Enabling encryption has the following effects on messages being exchanged: - * all the messages between your app and the IdP will be encrypted, this requires the IdP’s metadata to contain a KeyDescriptor having ‘use’ value ‘encryption’ or empty. - * all the messages between your app and the IdP will be signed. The SP metadata exported from your app will have `AuthnRequestSigned` with value `true`. This corresponds to IdPs whose metadata have `WantAuthnRequestSigned` with value `true` - * in SAML SSO module versions 1.17.3 and above, 2.3.0 and above, and 3.3.0 and above, your IdP is expected to sign all SAML assertions sent to your app. The SP metadata will have `WantAssertionsSigned` with value `true`. Any assertions that are not properly signed will be rejected. SAML’s signature inheritance is supported as well; if the SAML response message is signed by the IdP, it is not necessary for the assertion to be signed as well + * All the messages between your app and the IdP will be encrypted, this requires the IdP’s metadata to contain a KeyDescriptor having ‘use’ value ‘encryption’ or empty. + * All the messages between your app and the IdP will be signed. The SP metadata exported from your app will have `AuthnRequestSigned` with value `true`. This corresponds to IdPs whose metadata have `WantAuthnRequestSigned` with value `true` + * In the SAML SSO module versions 1.17.3 and above, 2.3.0 and above, and 3.3.0 and above, your IdP is expected to sign all SAML assertions sent to your app. The SP metadata will have `WantAssertionsSigned` with the value `true`. Any assertions that are not properly signed will be rejected. SAML’s signature inheritance is supported as well; if the SAML response message is signed by the IdP, the assertion does not need to be signed as well. See [Managing the Keys and Key Store](#keystore), below, for additional information and options related to encryption and signing keys. -#### Managing the Keys and Key Store{#keystore} +### Managing the Keys and Key Store{#keystore} SAML implements encryption and signing using asymmetric keys. If encryption is enabled, all the certificates required for encryption are stored in the key store. When you choose **Enable better security for app** (or **Use encryption**) a key store is automatically created using the URL of the application, or the custom EntityID. Below version 3.5.0 it is shown as the **Key store alias**. -The key-pair (or pairs) for your app (as an SP) can be self-generated by the SAML module or you can upload keypair certificate (or certificates) provided by your IdP. +The key-pair (or pairs) for your app (as an SP) can be self-generated by the SAML module or you can upload a keypair certificate (or certificates) provided by your IdP. {{% alert color="warning" %}} For version 3.5.0 and above, there are separate key pairs generated for each IdP, for versions below that, the self-generated key pairs are used for all IdPs, if your app is configured to use multiple IdPs. @@ -96,7 +101,7 @@ However, there may be a requirement to use a specific key store. If you want to For versions below 3.5.0 only: * Resetting the key store or uploading another key store will require you to export the SP metadata and import it to all applicable IdPs. -* Click **Reset** to return the key store settings to their defaults +* Click **Reset** to return the key store settings to their defaults. * Click **Download** to download the key store file and use it when configuring other SAML SPs. {{% /alert %}} @@ -104,9 +109,9 @@ For versions below 3.5.0 only: Remember to set the new key store password in the `KeystorePassword` constant of your app. {{% /alert %}} -### Identity Provider Metadata +## Identity Provider Metadata -#### Read IDP metadata from URL +### Read IDP Metadata from URL You can set up the module to re-import all IdP metadata files on a daily basis. Alternatively, you can import the metadata from a file, manually. @@ -115,28 +120,28 @@ If you want to manually import the IdP metadata files from a URL, do the followi * Set **Read IDP metadata from URL** to *Yes.* * Set the **URL:** to the location where the IdP metadata is available. * Click **Refresh Metadata** - **The following metadata has been fetched** will show an overview of all the information that has been found in the IdP metadata information. It is usually not necessary to do anything here, but it can be useful in order to review the possible IdP and SP configuration options. + **The following metadata has been fetched** and will show an overview of all the information that has been found in the IdP metadata information. It is usually not necessary to do anything here, but it can be useful to review the possible IdP and SP configuration options. If you want to automatically synchronize the IdP metadata, make sure the **SE_SynchronizeIdPMetadata** [scheduled event](/refguide/scheduled-events/) is enabled. This is in the **_USE ME** > **Scheduled Events** folder of the SAML module. If you need to change your identity provider metadata you can find more information in the [Response Protocol Binding](#saml-binding) section. -### Request Authentication Context +## Request Authentication Context On the **Request Authn Context** tab, the following settings can be used to specify the authentication context: -#### Allow IdP Initiated Authentication +### Allow IdP Initiated Authentication By default, the module does not allow for unsolicited requests. That means that every login has to be initiated from the Mendix application, and all the messages have to be exchanged using the same RequestID and RelayState. Some IdPs do not allow for the RelayState to be passed, or the authentication could be initiated by the IdP instead of at the SP. For all situations where the RelayState is not being generated or passed from the original login action at Mendix, this option should be enabled. By default, The SAML module does not allow for unsolicited requests, because that would be considered less secure. -#### Enable Force Authentication +### Enable Force Authentication Checking this box will force the SAML IdP to (re)authenticate end-users, even if they are already signed in at the SAML IdP. Only check this box if stronger security for your app is more important than the convenience of having single sign-on for your end-users. -#### Enable Mobile Authentication Token +### Enable Mobile Authentication Token If you are using a [hybrid mobile](/refguide9/mobile/introduction-to-mobile-technologies/hybrid-mobile/) app and you enable this, you can sign in to your Mendix hybrid mobile app after the app is closed, using an authentication token cookie. Only check this if you are using SAML on a hybrid mobile app. Note that this functionality also requires changes to the hybrid app package as described in [How To Implement SSO on a Hybrid App with Mendix and SAML](/howto8/mobile/implement-sso-on-a-hybrid-app-with-mendix-and-saml/). -#### ⚠ Enable Delegated Authentication {#delegated-auth} +### ⚠ Enable Delegated Authentication {#delegated-auth} {{% alert color="warning" %}} This feature is deprecated. @@ -144,18 +149,18 @@ This feature is deprecated. When you use the SAML SSO module in your app, your app will typically be a front-end app that redirects the user to their IdP via the browser for login. Using SAML protocols to secure the APIs of your back-end app is more challenging. We advise you to use OAuth access tokens by installing the [OIDC SSO](https://marketplace.mendix.com/link/component/120371) module instead of the SAML module. This is a common, and a best, practice. -The SAML module currently allows you to use multi-tier delegation (which makes use of the SAML ECP profile) if you need it. Your front-end app can request a token during login that has the right characteristics so it can be shared with a back-end app. This is an advanced scenario which requires in-depth knowledge of the SAML protocol and the configuration of all integrating systems to get it working. -In the SAML module, you can enable this by checking “Enable delegated authentication” on the provisioning tab. By checking this box you are able to access the authorized SAML token, the module will automatically keep the token alive. Only enable this functionality if you are actually using multi-tier delegated authentication. +The SAML module currently allows you to use multi-tier delegation (which makes use of the SAML ECP profile) if you need it. Your front-end app can request a token during login that has the right characteristics so it can be shared with a back-end app. This is an advanced scenario that requires in-depth knowledge of the SAML protocol and the configuration of all integrating systems to get it working. +In the SAML module, you can enable this by checking “Enable delegated authentication” on the provisioning tab. By checking this box you can access the authorized SAML token, the module will automatically keep the token alive. Only enable this functionality if you are using multi-tier delegated authentication. If you enable this, you will need to enter the **Delegated Auth URL**. -#### In-session Authentication {#in-session} +### In-session Authentication {#in-session} -In-session authentication is a process that takes place within a session that was initiated by a (primary) end-user that signed in to your app or from within an anonymous session. This can be useful in the following situations: +In-session authentication is a process that takes place within a session that was initiated by a (primary) end-user who signed in to your app or from within an anonymous session. This can be useful in the following situations: -* to require the primary end-user to re-authenticate shortly before they are allowed to do a critical transaction in your app -* to have a second end-user add their authentication (for example, for electronic signing) but leave the primary end-user associated with the overall session -* to let the user interact anonymously with your app at first, but ask them to identify and authenticate themselves during that session +* To require the primary end-user to re-authenticate shortly before they are allowed to do a critical transaction in your app +* To have a second end-user add their authentication (for example, for electronic signing) but leave the primary end-user associated with the overall session +* To let the user interact anonymously with your app at first, but ask them to identify and authenticate themselves during that session In-session authentication at the SAML IdP is only available in the following versions of the module (depending on which Mendix version you are using) @@ -168,37 +173,37 @@ This flow can be initiated by using the URL `https://{app-url}/sso/login?action= To enable in-session authentication, you need to use the `OpenConfiguration` microflow to configure two microflows in the SAML SSO module: -#### Custom Prepare In-Session Authentication Microflow +### Custom Prepare In-session Authentication Microflow Set **Custom Prepare In-Session Authentication microflow** to `CustomPrepareInSessionAuthentication`. The `CustomPrepareInSessionAuthentication` microflow sets up specific data in the current user session so that it can be recovered after the SAML in-session authentication flow returns to the app. The microflow can use the context information that is passed via the `on` query parameter. -#### Custom Evaluate In-Session Authentication Microflow +### Custom Evaluate In-Session Authentication Microflow Set **Custom Evaluate In-Session Authentication microflow** to `CustomEvaluateInSessionAuthentication`. The `CustomEvaluateInSessionAuthentication` microflow implements the logic that handles the authentication details of the in-session authentication. The SAML SSO module comes with an empty default `EvaluateInSessionAuthentication` flow, which can be enhanced to combine information from the original session with information received in the assertion from the in-session authentication. -#### Disable NameID Policy +### Disable NameID Policy **Disable Name ID Policy** – Check this box to disable the use of a name ID policy. This means you will use another attribute or claim to identify users. -If you check this box, you will not be able to set **Preferred name id**. +If you check this box, you will not be able to set the **Preferred name id**. -#### Authentication Context Comparison +### Authentication Context Comparison You can configure the comparison method used to evaluate the requested context classes or statements, one of "exact", "minimum", "maximum", or "better". See section 3.3.2.2.1 of the [Core SAML specifications](https://www.oasis-open.org/committees/download.php/56776/sstc-saml-core-errata-2.0-wd-07.pdf). -#### Authentication Context Classes +### Authentication Context Classes This passes the allowed authentication methods. This has to be whatever the IdP requests, as there are no requirements within this module and all options are available. You should only pass the options which are needed as passing all options leads to significantly bigger (and slower) message exchange. -### User Provisioning +## User Provisioning For information, see the [User Provisioning](/appstore/modules/saml/#user-provisioning) section of the *SAML* document. ## Read More * [SAML](/appstore/modules/saml/) -* [Advanced configuration for SAML](/appstore/modules/saml/advanced-configuration/) \ No newline at end of file +* [Advanced configuration for SAML](/appstore/modules/saml/advanced-configuration/) diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/aws/amazon-bedrock.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/aws/amazon-bedrock.md index a2f96ef3c50..83ba05a0cd1 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/aws/amazon-bedrock.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/aws/amazon-bedrock.md @@ -25,9 +25,11 @@ Amazon Bedrock is a fully managed service that makes foundation models (FMs) fro The Amazon Bedrock connector requires Mendix Studio Pro version 9.24.2 or above. -To authenticate with Amazon Web Service (AWS), you must also install and configure the [AWS Authentication connector version 3.0.0 or higher](https://marketplace.mendix.com/link/component/120333). It is crucial for the Amazon Bedrock connector to function correctly. For more information about installing and configuring the AWS Authentication connector, see [AWS Authentication](/appstore/modules/aws/aws-authentication/). +To authenticate with Amazon Web Service (AWS), you must install and configure the [AWS Authentication connector version 3.0.0 or higher](https://marketplace.mendix.com/link/component/120333). It is crucial for the Amazon Bedrock connector to function correctly. For more information about installing and configuring the AWS Authentication connector, see [AWS Authentication](/appstore/modules/aws/aws-authentication/). -You must also install the [GenAI Commons version 2.0.0 or higher](/appstore/modules/genai/commons/). To make integration of generative AI capabilities as easy as possible, the Amazon Bedrock connector depends on the generic domain model and operations provided by the GenAI Commons module. +You must have the latest [GenAI Commons](/appstore/modules/genai/commons/) version, available in the [GenAI for Mendix](https://marketplace.mendix.com/link/component/227931) bundle. To make integration of generative AI capabilities as easy as possible, the Amazon Bedrock connector depends on the generic domain model and operations provided by the GenAI Commons module. + +To ensure that your app can connect to Bedrock, you must also install and configure the [Encryption module](/appstore/modules/encryption/#configuration). ### Licensing and Cost @@ -105,7 +107,7 @@ You can follow a similar approach to implement any of the other operations in ** ### Chatting with Large Language Models using the ChatCompletions Operation -A common use case of the Amazon Bedrock Connector is the development of chatbots and chat solutions. The **ChatCompletions (without history / with history)** operations offer an easy way to connect to most of the text-generation models available on Amazon Bedrock. The ChatCompletions operations are built on top of Bedrock's Converse API, allowing you to talk to different models without the need of a model-specific implementation. For more information on the ChatCompletion operations, see [GenAI Commons: Chat Completions](/appstore/modules/genai/commons/#text-files-operations). +A common use case of the Amazon Bedrock Connector is the development of chatbots and chat solutions. The **ChatCompletions (without history / with history)** operations offer an easy way to connect to most of the text-generation models available on Amazon Bedrock. The ChatCompletions operations are built on top of Bedrock's Converse API, allowing you to talk to different models without the need of a model-specific implementation. For more information on the ChatCompletion operations, see [GenAI Commons: Chat Completions](/appstore/modules/genai/commons/#genai-generate). For an overview of supported models and model-specific capabilities and limitations, see [Amazon Bedrock Converse API](https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference.html#conversation-inference-supported-models-features) in the AWS documentation. @@ -115,7 +117,7 @@ To build a simple microflow that uses the ChatCompletions operation to send a si 2. Create a new microflow and name it, for example, *AmazonBedrockChatCompletions*. 3. Add a **Microflow call** from the **Toolbox** and choose microflow *AmazonBedrockConnector.BedrockDeployedModel_Get* 4. Double-click it to configure its parameters. - 1. For the **ModelID** parameter, enter the model id of the LLM you want to send a message to. The model id of Claude 3.5 Sonnet is *anthropic.claude-3-5-sonnet-20240620-v1:0*. + 1. For the **ModelID** parameter, enter the model id of the LLM you want to send a message to. The model id of Claude 3.5 Sonnet is *anthropic.claude-3-5-sonnet-20240620-v1:0*. 2. Click **OK**. 5. In the **Toolbox**, search for the **Chat Completions (without history)** activity in the *GenAI (Generate)* and drag it onto your microflow. 6. Double click on the activity to see its parameters. diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/aws/aws-authentication.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/aws/aws-authentication.md index 221c45e52e7..ffba3056abe 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/aws/aws-authentication.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/aws/aws-authentication.md @@ -218,7 +218,7 @@ To help you work with signature version 4 headers, the following sections of thi #### Domain Model {#domain-model} -The domain model is a data model that describes the information in your application domain in an abstract way. For more information, see [Domain Model](/refguide/domain-model/). +The domain model is a data model that describes the information in your application domain in an abstract way. For more information, see [Data in the Domain Model](/refguide/domain-model/). You can view the domain model in the **App Explorer** in the **AWS Authentication** > **Domain model** section. The following entities are relevant for signature version 4 headers authentication: @@ -311,7 +311,7 @@ It takes the following parameters as input: * A `Credentials` object * A `ENUM_Region` enumeration value -The output is a boolean indicating whether the credentials are valid. +The output is a Boolean indicating whether the credentials are valid. ## Read More diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/database-connector-mx10.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/database-connector-mx10.md index 3a16eac2a52..85e2f523020 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/database-connector-mx10.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/database-connector-mx10.md @@ -31,6 +31,12 @@ If you need to connect to other database types, check out the [Database Connecto ### Features {#features} +{{% alert color="info" %}} + +From [Studio Pro 10.19](/releasenotes/studio-pro/10.19/), you can connect to any database by using the Java dependency specified by the user for the respective database. For more information, see the [Configure for Any Database](#byod) section below. + +{{}} + This connector supports connections to the following database types: * Microsoft SQL @@ -39,8 +45,6 @@ This connector supports connections to the following database types: * Oracle * Snowflake – GA support from [Studio Pro 10.12](/releasenotes/studio-pro/10.12/) (Beta versions are available from [Studio Pro 10.10](/releasenotes/studio-pro/10.10/)). For more information, see [Configure the External Database Connector for Snowflake](/appstore/modules/snowflake/external-database-connector/) -If you are looking for another database type, follow the prompt to request support your database when you open the database connection wizard. - This connector supports the following statements: * `SELECT` @@ -210,3 +214,45 @@ To connect to PostgreSQL when the application is running in Mendix Cloud, follow 1. To configure SSL-based authentication in Mendix Cloud, add a CA certificate and client certificate for server configuration and the selected SSL mode. For more details, see the [Running in the Cloud](/howto/integration/use-a-client-certificate/#running-in-the-cloud) section of *Use a Client Certificate*. 2. After the client certificate has been added, double-click the client certificate and add the value `ClientCertificateIdentifier` to `Use Client Certificate for specific services`. This must match the value provided for the constant `ClientCertificateIdentifier`. 3. Add the required values to the constants created for DBSource, DBUsername, DBPassword, and ClientCertificateIdentifier. + +## Configure for Any Database {#byod} + +### Prerequisites + +* Ensure you have the appropriate Java Database Connectivity (JDBC) JAR file for the specific database. +* Gather the external connection details, including login credentials and the JDBC connection string. + +### Connect to the Database + +1. Open the module settings and add the JDBC JAR File. + + * Alternatively, place the downloaded JAR file in the userlib folder of your application. + +2. Run the app with the latest version of the External Database Connector. + +3. Create a New External Database Connection. +4. Open the connection settings and under Database Type, select **Other**. +5. Enter the login credentials and JDBC connection string. +6. Click **Test Connection** to ensure the database connection is successful. +7. Click **Save** to save the connection details. + +### Configure Database Schema Information + +The Browse Database Schema tab might not display a comprehensive overview of all available schemas for certain databases. You can customize this behavior using the Configure option. To do so, follow these steps: + +1. Open the **App** menu and select **Deploy for Eclipse**. +2. Extend the class MxQueryBasedSchemaInfoProvider. +3. Override the following methods based on your requirements: + * getTableMetaDataQuery + * getViewMetaDataQuery + * getProcedureMetaDataQuery + * getFunctionMetaDataQuery +4. Use the provided example, MxDb2SchemaInfoProvider for IBM Db2, for a better understanding of how to customize the schema information. + +### Running Queries and Handling Query Responses + +Execute queries as you would with supported databases, and retrieve responses in the associated entity. Refer to the documentation of your specific JDBC library for detailed syntax and execution options. + +{{% alert color="info" %}} +By default, autocommit is set to false for design time queries. +{{% /alert %}} diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/encryption.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/encryption.md index ee0aadd20ab..9f1963e0981 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/encryption.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/encryption.md @@ -32,7 +32,9 @@ Set the `EncryptionKey` constant in your application, which can be found in the For versions below 2.2.0, ensure the key is 16 characters long to support the 128 bits key length. -When running the application locally, set the **Value** for the `EncryptionKey` constant in the **App Settings** > **Configurations** tab. +When running the application locally, add a random 32-character string **Value** for the `EncryptionKey` constant in the **App Settings** > **Configurations** tab. For more information, see the [Constants](/refguide/configuration/#constants) section of *Configurations*. + +{{< figure src="/attachments/appstore/platform-supported-content/modules/encryption/encryption-constant.png" class="no-border" >}} #### EncryptionPrefix Constant diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/_index.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/_index.md index e78341c8246..739069766cd 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/_index.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/_index.md @@ -10,7 +10,7 @@ description: "Describes the general properties and common concepts of generative With the Mendix GenAI capabilities, you can create engaging, intelligent experiences with a variety of AI models and your own data. {{% alert color="info" %}} -These pages cover modules that integrate with third-party generative AI tools. For running pre-trained Machine Learning (ML) models using the Mendix Runtime, please see the [Machine Learning Kit](/refguide/machine-learning-kit/). +These pages cover modules that integrate with generative AI tools. For running pre-trained Machine Learning (ML) models using the Mendix Runtime, please see the [Machine Learning Kit](/refguide/machine-learning-kit/). {{% /alert %}} ### Typical Use Cases @@ -47,14 +47,15 @@ To help you get started, the following sections list the available GenAI compone |-------------------|---------------------------------------------------|----------------------------------|------------| | [AI Bot Starter App](https://marketplace.mendix.com/link/component/227926) | Lets you kick-start the development of enterprise-grade AI chatbot experiences. For example, you can use it to create your own private enterprise-ready ChatGPT-like app. | Starter App | 10.12 | | [Blank GenAI App](https://marketplace.mendix.com/link/component/227934) | Start from scratch to create a new application with GenAI capabilities and without any dependencies. | Starter App | 10.12 | -| [GenAI Showcase App](https://marketplace.mendix.com/link/component/220475) | Understand what you can build with generative AI. Understand how to implement the OpenAI and Amazon Bedrock connectors and how to integrate them with the Conversational UI module. |Showcase App | 9.24.2 | +| [GenAI Showcase App](https://marketplace.mendix.com/link/component/220475) | Understand what you can build with generative AI. Understand how to implement the Mendix Cloud GenAI, OpenAI, and Amazon Bedrock connectors and how to integrate them with the Conversational UI module. |Showcase App | 9.24.2 | | [RFP Assistant Starter App / Questionnaire Assistant Starter App](https://marketplace.mendix.com/link/component/235917) | The RFP Assistant Starter App and the Questionnaire Assistant Starter App leverage historical RFPs (or question-answer pairs) and a continuously updated knowledge base to generate and assist in editing responses to RFPs, offering a time-saving alternative to manually finding similar responses and enhancing the knowledge management process. | Starter App | 9.24.2 | -| [Support Assistant Starter App](https://marketplace.mendix.com/link/component/231035) | Learn how to combine common GenAI patterns, such as function calling and RAG to build your support assistant. Connect it to a model like Anthropic Claude or Amazon Titan via Amazon Bedrock or use an (Azure) OpenAI subscription. | Starter App | 10.12 | -| [Conversational UI](/appstore/modules/genai/conversational-ui/) | Create a Conversational UI for a new or existing app. | UI Module | 9.24.2 | -| [OpenAI Connector](/appstore/modules/genai/openai/) | Connect to Azure OpenAI. | Connector Module | 9.24.2 | -| [Amazon Bedrock Connector](/appstore/modules/genai/bedrock/) | Connect to Amazon Bedrock. Use Retrieve & Generate or Bedrock agents. | Connector Module | 9.24.2 | +| [Support Assistant Starter App](https://marketplace.mendix.com/link/component/231035) | Learn how to combine common GenAI patterns, such as function calling and RAG to build your support assistant. Connect it to a model like Anthropic Claude via Mendix Cloud GenAI or Amazon Bedrock or use an (Azure) OpenAI subscription. | Starter App | 10.12 | +| [GenAI For Mendix](https://marketplace.mendix.com/link/component/227931) |[GenAI Commons](/appstore/modules/genai/commons/): Common capabilities that allow all GenAI connectors to be integrated with the other modules. You can also implement your own connector based on this. | Common Module | 9.24.2 | +| |[Conversational UI](/appstore/modules/genai/conversational-ui/): Create a Conversational UI for a new or existing app. | UI Module | 9.24.2 | +| |[Mendix Cloud GenAI Connector](/appstore/modules/genai/MxGenAI/): Connect to Mendix Cloud and utilize Mendix Cloud GenAI resource packs directly within your Mendix application. | Connector Module | 9.24.2 | +| [OpenAI Connector](/appstore/modules/genai/openai/) | Connect to (Azure) OpenAI. | Connector Module | 9.24.2 | +| [Amazon Bedrock Connector](/appstore/modules/aws/amazon-bedrock/) | Connect to Amazon Bedrock. Use Retrieve and Generate or Bedrock agents. | Connector Module | 9.24.2 | | [PgVector Knowledge Base](/appstore/modules/genai/pgvector/) | Manage and interact with a PostgreSQL *pgvector* Knowledge Base. | Connector Module | 9.24.2 | -| [GenAI Commons](/appstore/modules/genai/commons/) | Common capabilities that allow all GenAI connectors to be integrated with the other modules. You can also implement your connector based on this. | Common Module | 9.24.2 | | [Snowflake Showcase App](https://marketplace.mendix.com/link/component/225845) | Learn how to implement the Cortex functionalities in your app. | Showcase App | 10.12 | ### Available Models {#models} @@ -63,32 +64,31 @@ Mendix connectors offer direct support for the following models: | Architecture | Models | Category | Input | Output | Additional capabilities | |--------------|---------------------|---------------------|-------------------|-----------|-------------------------| +| Mendix Cloud GenAI | Anthropic Claude 3.5 Sonnet | Chat Completions | text, image, document | text | Function calling | +| | Cohere Embed English, Cohere Embed Multilingual | Embeddings | text | embeddings | | | Azure / OpenAI | gpt-3.5-turbo | Chat completions | text | text | Function calling | | | gpt-4, gpt-4-turbo, gpt-4o, gpt-4o mini | Chat completions | text, image | text | Function calling | | | DALL·E 2, DALL·E 3 | Image generation | text | image | | | | text-embedding-ada-002, text-embedding-3-small, text-embedding-3-large | Embeddings | text | embeddings| | -| Amazon Bedrock | Amazon Titan Text G1 - Express, Amazon Titan Text G1 - Lite, Amazon Titan Text G1 - Premier | Chat Completions | text | text | Document Chat (except Titan Premier) | +| Amazon Bedrock | Amazon Titan Text G1 - Express, Amazon Titan Text G1 - Lite, Amazon Titan Text G1 - Premier | Chat Completions | text, document (except Titan Premier) | text | | | | AI21 Jamba-Instruct | Chat Completions | text | text | | | | AI21 Labs Jurassic-2 (Text) | Chat Completions | text | text | | -| | Amazon Nova Pro, Amazon Nova Lite | Chat Completion | text | text | Function calling, Document Chat | +| | Amazon Nova Pro, Amazon Nova Lite | Chat Completion | text, image, document | text | Function calling | | | Amazon Titan Image Generator G1 | Image generation | text | image | | | | Amazon Titan Embeddings Text v2 | Embeddings | text | embeddings| | -| | Anthropic Claude v2.0, Anthropic Claude v2.1| Chat Completions | text | text | Document Chat | -| | Anthropic Claude v3 Sonnet, Anthropic Claude v3 Haiku, Anthropic Claude v3 Opus | Chat Completions | text, image | text | Function calling, Document Chat | -| | Anthropic Claude v3.5 Sonnet, Anthropic Claude v3.5 Sonnet v2 | Chat Completions | text, image | text | Function calling, Document Chat | -| | Cohere Command | Chat Completions | text | text | Document Chat | +| | Anthropic Claude 2.0, Anthropic Claude 2.1| Chat Completions | text, document | text | | +| | Anthropic Claude 3 Sonnet, Anthropic Claude 3.5 Sonnet, Anthropic Claude 3.5 Sonnet v2, Anthropic Claude 3 Haiku, Anthropic Claude 3 Opus | Chat Completions | text, image, document | text | Function calling | +| | Cohere Command | Chat Completions | text, document | text | | | | Cohere Command Light | Chat Completions | text | text | | -| | Cohere Command R, Cohere Command R+ | Chat Completions | text | text | Function calling, Document Chat | +| | Cohere Command R, Cohere Command R+ | Chat Completions | text, document | text | Function calling | | | Cohere Embed English, Cohere Embed Multilingual | Embeddings | text | embeddings | | -| | Meta Llama 2, MetaLlama 3| Chat Completions | text | text | Document Chat | -| | Meta Llama 3.1| Chat Completions | text | text | Function calling, Document Chat | -| | Mistral AI Instruct | Chat Completions | text | text | Document Chat | -| | Mistral Large, Mistral Large 2 | Chat Completions | text | text | Function calling, Document Chat | +| | Meta Llama 2, MetaLlama 3| Chat Completions | text, document | text | | +| | Meta Llama 3.1| Chat Completions | text, document | text | Function calling | +| | Mistral AI Instruct | Chat Completions | text. document | text | | +| | Mistral Large, Mistral Large 2 | Chat Completions | text, document | text | Function calling | | | Mistral Small | Chat Completions | text | text | Function calling | -| Mendix Cloud GenAI | Anthropic Claude v3.5 Sonnet | Chat Completions | text, image | text | Function calling, Document Chat | -| | Cohere Embed English, Cohere Embed Multilingual | Embeddings | text | embeddings | | -For more details on limitations and supported model capabilities for the Bedrock Converse API used in the ChatCompletions operations, see [Supported models and model features](https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference.html#conversation-inference-supported-models-features) in the AWS documentation. +For more details on limitations and supported model capabilities for the Bedrock Converse API used in the ChatCompletions operations, see [Supported models and model features](https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference-supported-models-features.html) in the AWS documentation. The available showcase applications offer implementation inspiration for many of the listed models. diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/mendix-cloud-genai/Mx GenAI Connector.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/mendix-cloud-genai/Mx GenAI Connector.md index 8496edd69a9..6e0b1e9ec9b 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/mendix-cloud-genai/Mx GenAI Connector.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/mendix-cloud-genai/Mx GenAI Connector.md @@ -10,7 +10,7 @@ aliases: ## Introduction -The Mendix Cloud GenAI connector (delivered as part of [GenAI for Mendix](https://marketplace.mendix.com/link/component/227931)) lets you utilize Mendix Cloud GenAI resource packs directly within your Mendix application. It allows you to integrate generative AI by dragging and dropping common operations from its toolbox. +The Mendix Cloud GenAI connector (delivered as part of [GenAI for Mendix](https://marketplace.mendix.com/link/component/227931)) lets you utilize Mendix Cloud GenAI resource packs directly within your Mendix application. It allows you to integrate generative AI by dragging and dropping common operations from its toolbox. Feel free to contact [genai-resource-packs@mendix.com](mailto:genai-resource-packs@mendix.com) to learn more. ### Typical Use Cases @@ -76,7 +76,7 @@ To use this connector, you need configuration keys to authenticate to the Mendix ## Installation -Add the [Dependencies](#dependencies) listed above from the Marketplace. On the Marketplace, the Mendix Cloud GenAI connector is bundled inside of [GenAI for Mendix](https://marketplace.mendix.com/link/component/227931) which also contains GenAI commons operations and logic. To import this module into your app, follow the instructions in the [Use Marketplace Content](/appstore/use-content/). +Add the [dependencies](#dependencies) listed above from the Marketplace. On the Marketplace, the Mendix Cloud GenAI connector is bundled inside of the [GenAI for Mendix](https://marketplace.mendix.com/link/component/227931) which also contains GenAI commons operations and logic. To import this module into your app, follow the instructions in the [Use Marketplace Content](/appstore/use-content/). ## Configuration {#configuration} @@ -256,6 +256,28 @@ The **Documentation** pane displays the documentation for the currently selected For more inspiration or guidance on how to use microflows in your logic, Mendix recommends downloading the [GenAI Showcase App](https://marketplace.mendix.com/link/component/220475), which demonstrates a variety of example use cases and applies almost all of the Mendix Cloud GenAI operations. The starter apps in the [Mendix Components](/appstore/modules/genai/#mendix-components) list can also be used as inspiration or simply adapted for a specific use case. +## Troubleshooting {#troubleshooting} + +### Outdated JDK Version Causing Errors while Calling a REST API {#outdated-jdk-version} + +The Java Development Kit (JDK) is a framework needed by Mendix Studio Pro to deploy and run applications. For more information, see [Studio Pro System Requirements](/refguide/system-requirements/). Usually, the correct JDK version is installed during the installation of Studio Pro, but in some cases, it may be outdated. An outdated version can cause exceptions when calling REST-based services with large data volumes, like for example embeddings operations or chat completions with vision. + +Mendix has seen the following two exceptions when using JDK versions below `jdk-11.0.5.0-hotspot`: +`java.net.SocketException - Connection reset` or +`javax.net.ssl.SSLException - Received fatal alert: record_overflow`. + +To check your JDK version and update it if necessary, follow these steps: + +1. Check your JDK version – In Studio Pro, go to **Edit** > **Preferences** > **Deployment** > **JDK directory**. If the path points to a version below `jdk-11.0.5.0-hotspot`, you need to update the JDK by following the next steps. +2. Go to [Eclipse Temurin JDK 11](https://adoptium.net/en-GB/temurin/releases/?variant=openjdk11&os=windows&package=jdk) and download the `.msi` file of the latest release of **JDK 11**. +3. Open the downloaded file and follow the installation steps. Remember the installation path. Usually, this should be something like `C:/Program Files/Eclipse Adoptium/jdk-11.0.22.7-hotspot`. +4. After the installation has finished, restart your computer if prompted. +5. Open Studio Pro and go to **Edit** > **Preferences** > **Deployment** > **JDK directory**. Click **Browse** and select the folder with the new JDK version you just installed. This should be the folder containing the *bin* folder. Save your settings by clicking **OK**. +6. Run the project and execute the action that threw the above-mentioned exception earlier. + 1. You might get an error saying `FAILURE: Build failed with an exception. The supplied javaHome seems to be invalid. I cannot find the java executable.` In this case, verify that you have selected the correct JDK directory containing the updated JDK version. + 2. You may also need to update Gradle. To do this, go to **Edit** > **Preferences** > **Deployment** > **Gradle directory**. Click **Browse** and select the appropriate Gradle version from the Mendix folder. For Mendix 10.10 and above, use Gradle 8.5. For Mendix 10 versions below 10.10, use Gradle 7.6.3. Then save your settings by clicking **OK**. + 3. Rerun the project. + ## Read More{#readmore} For Anthropic Claude-specific documentation, refer to: diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/openai.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/openai.md index 84b8af256f4..adddc956420 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/openai.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/openai.md @@ -121,11 +121,11 @@ The following inputs are required for the Azure OpenAI configuration: | Parameter | Value | | -------------- | ------------------------------------------------------------ | -| Display name | This is the name identifier of a configuration (for example, *MyConfiguration*). | -| API type | Select `AzureOpenAI`. | -| Endpoint | This is the API endpoint (for example, `https://your-resource-name.openai.azure.com/openai/deployments/`).
      For details on how to obtain `your-resource-name`, see the [Obtaining Azure OpenAI Resource Name](#azure-resource-name) section below. | -| Azure key type | This is the type of token that is entered in the API key field. For Azure OpenAI, two types of keys are currently supported: Microsoft Entra token and API key.
      For details on how to generate a Microsoft Entra access token, see [How to Configure Azure OpenAI Service with Managed Identities](https://learn.microsoft.com/en-gb/azure/ai-services/openai/how-to/managed-identity). Alternatively, if your organization allows it, you could use the Azure `api-key` authentication mechanism. For details on how to obtain an API key, see the [Obtaining Azure OpenAI API keys](#azure-api-keys) section below. For more information, see the [Technical Reference](#technical-reference) section. | -| Token / API key | This is the access token to authorize your API call. | +| Display name | This is the name identifier of a configuration (for example, *MyConfiguration*). | +| API type | Select `AzureOpenAI`. | +| Endpoint | This is the API endpoint (for example, `https://your-resource-name.openai.azure.com/openai/deployments/`).
      For details on how to obtain `your-resource-name`, see the [Obtaining Azure OpenAI Resource Name](#azure-resource-name) section below. | +| Azure key type | This is the type of token that is entered in the API key field. For Azure OpenAI, two types of keys are currently supported: Microsoft Entra token and API key.
      For details on how to generate a Microsoft Entra access token, see [How to Configure Azure OpenAI Service with Managed Identities](https://learn.microsoft.com/en-gb/azure/ai-services/openai/how-to/managed-identity). Alternatively, if your organization allows it, you could use the Azure `api-key` authentication mechanism. For details on how to obtain an API key, see the [Obtaining Azure OpenAI API keys](#azure-api-keys) section below. For more information, see the [Technical Reference](#technical-reference) section. | +| Token / API key | This is the access token to authorize your API call. | ##### Obtaining the Azure OpenAI Resource Name {#azure-resource-name} @@ -150,12 +150,12 @@ A [Deployed Model](/appstore/modules/genai/commons/#deployed-model) represents a 1. If needed, click the three dots for an OpenAI configuration to open the "Manage Deployed Models" pop-up. 2. For every additional model, add a record. The following fields are required: -| Field | Description | -| -------------- | ------------------------------------------------------------ | -| Display name | This is the reference to the model for app users in case they have to select which one is to be used. | -| Deployment name / Model name | This is the technical reference for the model. For OpenAI this is equal to the [model aliases](https://platform.openai.com/docs/models#current-model-aliases). For Azure OpenAI this is the deployment name from the [Azure Portal](https://oai.azure.com/resource/deployments). -| Output modality| Describes what the output of the model is. This connector currently supports Text, Embedding, and Image. -| Azure API version | Azure OpenAI only. This is the API version to use for this operation. It follows the `yyyy-MM-dd` format. For supported versions, see [Azure OpenAI documentation](https://learn.microsoft.com/en-us/azure/ai-services/openai/reference). The supported versions can vary depending on the type of model, so make sure to look for the right section (such as Chat Completions, Image Generation, or Embeddings) on that page. | + | Field | Description | + | -------------- | ------------------------------------------------------------ | + | Display name | This is the reference to the model for app users in case they have to select which one is to be used. | + | Deployment name / Model name | This is the technical reference for the model. For OpenAI this is equal to the [model aliases](https://platform.openai.com/docs/models#current-model-aliases). For Azure OpenAI this is the deployment name from the [Azure Portal](https://oai.azure.com/resource/deployments). + | Output modality| Describes what the output of the model is. This connector currently supports Text, Embedding, and Image. + | Azure API version | Azure OpenAI only. This is the API version to use for this operation. It follows the `yyyy-MM-dd` format. For supported versions, see [Azure OpenAI documentation](https://learn.microsoft.com/en-us/azure/ai-services/openai/reference). The supported versions can vary depending on the type of model, so make sure to look for the right section (such as Chat Completions, Image Generation, or Embeddings) on that page. | 3. Close the popup and test the configuration with the newly created deployed models. @@ -169,12 +169,12 @@ For more inspiration or guidance on how to use the microflow actions in your log Operations for chat completions focus on the generation of text based on a certain input. In this context, system prompts and user prompts are two key components that help guide the language model in generating relevant and contextually appropriate responses. For more information on the type of prompts and message roles, see the [ENUM_MessageRole](/appstore/modules/genai/commons/#enum-messagerole) enumeration. To learn more about how to create the right prompts for your use case, see the prompt engineering links in the [Read More](#read-more) section. -The `OpenAIDeployedModel` is compatible with the two [Chat Completions operations from GenAI Commons](/appstore/modules/genai/commons/#text-files-operations). While developing your custom microflow, you can drag and drop the following operations from the toolbox in Studio Pro, see category **GenAI (Generate)**: +The `OpenAIDeployedModel` is compatible with the two [Chat Completions operations from GenAI Commons](/appstore/modules/genai/commons/#genai-generate). While developing your custom microflow, you can drag and drop the following operations from the toolbox in Studio Pro, see category **GenAI (Generate)**: * Chat Completions (with history) * Chat Completions (without history) -You can use the GenAI Commons toolbox actions to [create the required Request](/appstore/modules/genai/commons/#text-files-request) and [handle the Response](/appstore/modules/genai/commons/#text-files-response) for your use case. +You can use the GenAI Commons toolbox actions to [create the required Request](/appstore/modules/genai/commons/#genai-request-building) and [handle the Response](/appstore/modules/genai/commons/#genai-response-handling) for your use case. The internal chat completion logic within the OpenAI connector supports [JSON mode](#chatcompletions-json-mode), [function calling](#chatcompletions-functioncalling), and [vision](#chatcompletions-vision). Make sure to check the actual compatibility of the available models with these functionalities, as this changes over time. Any specific OpenAI microflow actions from the toolbox are listed below. @@ -232,7 +232,7 @@ A generated image needs to be stored in a custom entity that inherits from the ` #### Embeddings Generation {#embeddings-configuration} -OpenAI also provides vector embedding generation capabilities which can be invoked using this connector module. The `OpenAIDeployedModel` entity is compatible with the [embeddings generation operations from GenAI Commons](/appstore/modules/genai/commons/#knowledge-bases-embeddings-operations). +OpenAI also provides vector embedding generation capabilities which can be invoked using this connector module. The `OpenAIDeployedModel` entity is compatible with the [knowledge base operations](/appstore/modules/genai/commons/#genai-knowledgebase-content) from the GenAI Commons. In order to implement embeddings generation into your Mendix application, you can use the Embedding generation microflow actions from GenAI Commons directly. When developing your microflow, you can drag and drop the one you need from the toolbox: find it under the **GenAI (Generate)** category in the **Toolbox** in Mendix Studio Pro: @@ -250,7 +250,7 @@ Note that currently, the OpenAI connector does not support knowledge base intera ### Exposed Microflow Actions for (Azure) OpenAI {#exposed-microflows} -OpenAI-specific exposed microflow actions to construct requests via drag-and-drop are listed below. These microflows can be found in the **Toolbox** in Studio Pro. Note that using these flows is only required if you need to add options to the request that are specific to OpenAI. For the generic part can use the GenAI Commons toolbox actions to [create the required Request](/appstore/modules/genai/commons/#text-files-request) and [handle the Response](/appstore/modules/genai/commons/#text-files-response), which can be found under the **GenAI (Request Building)** and **GenAI (Response Handling)** categories in the Toolbox. +OpenAI-specific exposed microflow actions to construct requests via drag-and-drop are listed below. These microflows can be found in the **Toolbox** in Studio Pro. Note that using these flows is only required if you need to add options to the request that are specific to OpenAI. For the generic part can use the GenAI Commons toolbox actions to [create the required Request](/appstore/modules/genai/commons/#genai-request-building) and [handle the Response](/appstore/modules/genai/commons/#genai-response-handling), which can be found under the **GenAI (Request Building)** and **GenAI (Response Handling)** categories in the Toolbox. #### Set Response Format {#set-responseformat-chat} @@ -289,25 +289,25 @@ Some examples demonstrate knowledge base interaction and require a connection to ## Troubleshooting {#troubleshooting} -### Outdated JDK Version Causing Errors while Calling the Embeddings API {#outdated-jdk-version} +### Outdated JDK Version Causing Errors while Calling a REST API {#outdated-jdk-version} -The Java Development Kit (JDK) is a framework needed by Mendix Studio Pro to deploy and run applications. For more information, see [Studio Pro System Requirements](/refguide/system-requirements/). Usually, the correct JDK version is installed during the installation of Studio Pro, but in some cases, it may be outdated. An outdated version can cause exceptions when calling the Embeddings API or other REST-based services with large data volumes. +The Java Development Kit (JDK) is a framework needed by Mendix Studio Pro to deploy and run applications. For more information, see [Studio Pro System Requirements](/refguide/system-requirements/). Usually, the correct JDK version is installed during the installation of Studio Pro, but in some cases, it may be outdated. An outdated version can cause exceptions when calling REST-based services with large data volumes, like for example embeddings operations or chat completions with vision. -Mendix has seen the following two exceptions when using JDK version `jdk-11.0.3.7-hotspot`: +Mendix has seen the following two exceptions when using JDK versions below `jdk-11.0.5.0-hotspot`: `java.net.SocketException - Connection reset` or `javax.net.ssl.SSLException - Received fatal alert: record_overflow`. To check your JDK version and update it if necessary, follow these steps: -1. Check your JDK version – In Studio Pro, go to **Edit** > **Preferences** > **Deployment** > **JDK directory**. If the path points to `jdk-11.0.3.7-hotspot`, you need to update the JDK by following the next steps. +1. Check your JDK version – In Studio Pro, go to **Edit** > **Preferences** > **Deployment** > **JDK directory**. If the path points to a version below `jdk-11.0.5.0-hotspot`, you need to update the JDK by following the next steps. 2. Go to [Eclipse Temurin JDK 11](https://adoptium.net/en-GB/temurin/releases/?variant=openjdk11&os=windows&package=jdk) and download the `.msi` file of the latest release of **JDK 11**. 3. Open the downloaded file and follow the installation steps. Remember the installation path. Usually, this should be something like `C:/Program Files/Eclipse Adoptium/jdk-11.0.22.7-hotspot`. 4. After the installation has finished, restart your computer if prompted. 5. Open Studio Pro and go to **Edit** > **Preferences** > **Deployment** > **JDK directory**. Click **Browse** and select the folder with the new JDK version you just installed. This should be the folder containing the *bin* folder. Save your settings by clicking **OK**. 6. Run the project and execute the action that threw the above-mentioned exception earlier. - 1. You might get an error saying `FAILURE: Build failed with an exception. The supplied javaHome seems to be invalid. I cannot find the java executable.`. In this case, verify that you have selected the correct JDK directory containing the updated JDK version. - 1. You may also need to update Gradle. To do this, go to **Edit** > **Preferences** > **Deployment** > **Gradle directory**. Click **Browse** and select the appropriate Gradle version from the Mendix folder. For Mendix 10.10 and above, use Gradle 8.5. For Mendix 10 versions below 10.10, use Gradle 7.6.3. Then save your settings by clicking **OK**. - 1. Rerun the project. + 1. You might get an error saying `FAILURE: Build failed with an exception. The supplied javaHome seems to be invalid. I cannot find the java executable.` In this case, verify that you have selected the correct JDK directory containing the updated JDK version. + 2. You may also need to update Gradle. To do this, go to **Edit** > **Preferences** > **Deployment** > **Gradle directory**. Click **Browse** and select the appropriate Gradle version from the Mendix folder. For Mendix 10.10 and above, use Gradle 8.5. For Mendix 10 versions below 10.10, use Gradle 7.6.3. Then save your settings by clicking **OK**. + 3. Rerun the project. ### Chat Completions with Vision and JSON Mode (Azure OpenAI) diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/pg-vector-knowledge-base/_index.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/pg-vector-knowledge-base/_index.md index 8e95c01e544..c62f31e2a32 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/pg-vector-knowledge-base/_index.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/pg-vector-knowledge-base/_index.md @@ -47,7 +47,7 @@ You should have access to your own (remote) PostgreSQL database server with the * [Encryption](https://marketplace.mendix.com/link/component/1011) module * [Community Commons](https://marketplace.mendix.com/link/component/170) module * [Database Connector](https://marketplace.mendix.com/link/component/2888) module -* [GenAI Commons](https://marketplace.mendix.com/link/component/227933) module +* GenAI Commons module in the [GenAI For Mendix](https://marketplace.mendix.com/link/component/227931) bundle ## Installation {#installation} diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/snowflake-cortex.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/snowflake-cortex.md index b4d7a70228d..b43b431e173 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/snowflake-cortex.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/external-platforms/snowflake-cortex.md @@ -47,23 +47,24 @@ The [Snowflake showcase app](https://marketplace.mendix.com/link/component/22584 For more information, see [How to Use Marketplace Content](/appstore/use-content/). -2. In Studio Pro, in the [App Explorer](https://docs.mendix.com/refguide/app-explorer/), go to **Showcase_AI_RESTQLAPI** > **Pages**. +2. In Studio Pro, in the [App Explorer](https://docs.mendix.com/refguide/app-explorer/), go to **Showcase_AI_RESTSQLAPI** > **Pages**. - This section contains the following pages: + This section contains the following pages: 1. Introduction - 2. ANOMALY DETECTION (Machine Learning) - 3. COMPLETE and TRANSLATE (Large Language Models) - 4. Analyst (Cortex Analyst) + 2. ML functions + 3. Cortex LLM Functions + 4. Cortex Analyst + -3. To see how a Snowflake function is called, right-click on the corresponding **SQLStatement** field, and then click **Go to data source microflow**. +3. To see how a Snowflake Cortex Analyst action is called, use the **Explorer** search box to find and open the *EXAMPLE_CortexAnalyst_GenerateResponseMessage** microflow. - {{< figure src="/attachments/appstore/platform-supported-content/modules/genai/snowflake/statement.png" alt="" >}} + {{< figure src="/attachments/appstore/platform-supported-content/modules/snowflake-rest-sql/CortexAnalystRequestExample.png" >}} - This opens the microflow that calls the Snowflake function. + This microflow calls the Snowflake Cortex Analyst function. -4. To modify the call, edit the **Statement_SetUp** step. +4. To see how you can modify the statement, refer to the *DS_Statement_ML_CreateView_Analyze* example microflow and check how the parameters are set at the **Statement_SetUp** step. - {{< figure src="/attachments/appstore/platform-supported-content/modules/genai/snowflake/setup.png" alt="" >}} + {{< figure src="/attachments/appstore/platform-supported-content/modules/genai/snowflake/StatementSetup.png" alt="" >}} - For information about the parameters required by each functionality, refer to Snowflake documentation. + For information about the parameters required by each functionality, refer to Snowflake documentation. diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/genai-for-mendix.md/genai-commons.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/genai-for-mendix.md/genai-commons.md index 68a0126d381..3d97224febd 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/genai-for-mendix.md/genai-commons.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/reference-guide/genai-for-mendix.md/genai-commons.md @@ -11,7 +11,7 @@ aliases: ## Introduction {#introduction} -The [GenAI Commons](https://marketplace.mendix.com/link/component/227933) module combines common GenAI patterns found in a variety of generative AI models on the market. Platform-supported GenAI-connectors use the underlying data structures and their operations. This makes it easier to develop vendor-agnostic AI-enhanced apps with Mendix, for example by using one of the connectors or the [Conversational UI](/appstore/modules/genai/conversational-ui/) module. +The GenAI Commons module, included in the [GenAI For Mendix](https://marketplace.mendix.com/link/component/227931) bundle, combines common generative AI patterns found across various models on the market. Platform-supported GenAI-connectors use the underlying data structures and their operations. This makes it easier to develop vendor-agnostic AI-enhanced apps with Mendix, for example by using one of the connectors or the [Conversational UI](/appstore/modules/genai/conversational-ui/) module. If two different connectors both adhere to the GenAI Commons module, they can be easily swapped, which reduces dependency on the model providers. In addition, the initial implementation of AI capabilities using the connectors becomes a drag-and-drop experience, so that developers can quickly get started. The module exposes useful operations which developers can use to build a request to a large language model (LLM) and to handle the response. @@ -31,11 +31,11 @@ You must also download the [Community Commons](/appstore/modules/community-commo If you are starting from the [Blank GenAI app](https://marketplace.mendix.com/link/component/227934), or the [AI Bot Starter App](https://marketplace.mendix.com/link/component/227926), the GenAI Commons module is already included and does not need to be downloaded manually. -If you start from a blank app, or have an existing project where you want to include a connector for which the GenAI Commons module is required, you must install GenAI Commons manually. First, install the [Community Commons](/appstore/modules/community-commons-function-library/) module, and then follow the instructions in [How to Use Marketplace Content](/appstore/use-content/) to import the GenAI Commons module into your app. +If you start from a blank app, or have an existing project where you want to include a connector for which the GenAI Commons module is required, you must install GenAI Commons manually. First, install the [Community Commons](/appstore/modules/community-commons-function-library/) module, and then follow the instructions in [How to Use Marketplace Content](/appstore/use-content/) to install the [GenAI For Mendix](https://marketplace.mendix.com/link/component/227931) bundle that includes the GenAI Commons, Conversational UI and Mendix Cloud GenAI Connector modules. ## Implementation {#implementation} -GenAI Commons is the foundation of large language model implementations within the [Mx GenAI connector](/appstore/modules/genai/MxGenAI/), [OpenAI connector](/appstore/modules/genai/openai/), and the [Amazon Bedrock connector](/appstore/modules/genai/bedrock/), but may also be used to build other GenAI service implementations on top of it by reusing the provided domain model and exposed actions. +GenAI Commons is the foundation of large language model implementations within the [Mendix Cloud GenAI Connector](/appstore/modules/genai/MxGenAI/), [OpenAI connector](/appstore/modules/genai/openai/), and the [Amazon Bedrock connector](/appstore/modules/genai/bedrock/), but may also be used to build other GenAI service implementations on top of it by reusing the provided domain model and exposed actions. Although GenAI Commons technically defines additional capabilities typically found in chat completion APIs, such as image processing (vision) and tools (function calling), it depends on the connector module of choice for whether these are actually implemented and supported by the LLM. To learn which additional capabilities a connector supports and for which models these can be used, refer to the documentation of that connector. @@ -55,7 +55,7 @@ The technical purpose of the GenAI Commons module is to define a common domain m ### Domain Model {#domain-model} -The domain model in Mendix is a data model that describes the information in your application domain in an abstract way. For more general information, see the [Domain Model](/refguide/domain-model/) documentation. To learn about where the entities from the domain model are used and relevant during implementation, see the [Microflows](#microflows) section below. +The domain model in Mendix is a data model that describes the information in your application domain in an abstract way. For more general information, see the [Data in the Domain Model](/refguide/domain-model/) documentation. To learn about where the entities from the domain model are used and relevant during implementation, see the [Microflows](#microflows) section below. {{< figure src="/attachments/appstore/platform-supported-content/modules/genai/genaicommons/demain-model.png" alt="" >}} @@ -71,6 +71,7 @@ The `DeployedModel` entity replaces the capabilities that were covered by the `C | `Architecture` | The architecture of the deployed model; e.g. OpenAI or Amazon Bedrock. | | `Model` | The model identifier of the LLM provider. | | `OutputModality` | The type of information the model returns. | +| `Microflow` | The microflow to execute for the specified model and modality. | | `SupportsSystemPrompt` | An enum to specify if the model supports system prompts. | | `SupportsConversationsWithHistory` | An enum to specify if the model supports conversation with history. | | `SupportsFunctionCalling` | An enum to specify if the model supports function calling. | @@ -282,6 +283,7 @@ The response returned by the model contains token usage metrics. Not all connect | --- | --- | | `PromptTokens` | Number of tokens in the prompt. | | `TotalTokens` | Total number of tokens used in the request. | +| `DurationMilliseconds` | Duration in milliseconds for the call to be finished. | #### `ImageOptions` {#imageoptions-entity} @@ -296,17 +298,34 @@ An optional input object for the image generation operations to set optional req | `CfgScale` | This can be used to influence the randomness of the generation. Adjusts the balance between adherence to the prompt and creative randomness in the image generation process. | | `ImageGenerationType` | This describes the type of image generation. Currently, only text to image is supported. For more information, see [ENUM_ImageGenerationType](#enum-imagegenerationtype). | -### Microflows activities {#microflows} +### Microflow Activities {#microflows} -Use the exposed microflows and Java Actions to map the required information for GenAI operations from your custom app implementation to the GenAI model and vice versa. Two sets of operations are provided: one for text and files, plus a second one for embeddings and knowledge bases. +Use the exposed microflows and Java Actions to map the required information for GenAI operations from your custom app implementation to the GenAI model and vice versa. -#### Text and Files: Operations {#text-files-operations} +#### GenAI (Generate) {#genai-generate} -Chat completions and image generation operations can be used by passing a [DeployedModel](#deployed-model) object of the desired connector. The action calls the internally assigned microflow of the connector and returns the response. Operations from different connectors can be exchanged very easily without much additional development effort. +Chat completions, embeddings, and image generation operations can be used by passing a [DeployedModel](#deployed-model) object of the desired connector. The action calls the internally assigned microflow of the connector and returns the response. Operations from different connectors can be exchanged very easily without much additional development effort. It is recommended that you adapt to the same interface when developing custom chat completions or image generation operations, such as integration with different AI providers. The generic interfaces are described below. For more detailed information, refer to the documentation of the connector that you want to use, since it may expect specializations of the generic GenAI common entities as an input. -##### Chat Completions (without History) {#chat-completions-without-history} +##### Chat Completions (with history) {#chat-completions-with-history} + +The `Chat Completions (with history)` operation supports more complex use cases where a list of (historical) messages (for example, comprising the conversation or context so far) is sent as part of the request to the LLM. + +###### Input Parameters + +| Name | Type | Notes | Description | +| --- | --- | --- |--- | +| `DeployedModel` | [DeployedModel](#deployed-model) | mandatory | The DeployedModel entity replaces the Connection entity. It contains the name of the microflow to be executed for the specified model and other information relevant to connect to a model. The OutputModality of the DeployedModel needs to be Text. | +| `Request` | [Request](#request) | mandatory | This is an object that contains messages, optional attribute, and an optional [ToolCollection](#toolcollection). | + +###### Return Value + +| Name | Type | Description | +| --- | --- | --- | +| `Response` | [Response](#response) | A `Response` object that contains the assistant's response. | + +##### Chat Completions (without history) {#chat-completions-without-history} The `Chat Completions (without history)` operation supports scenarios where there is no need to send a list of (historic) messages comprising the conversation so far as part of the request. @@ -325,63 +344,63 @@ The `Chat Completions (without history)` operation supports scenarios where ther | --- | --- | --- | | `Response` | [Response](#response) | A `Response` object that contains the assistant's response.| -##### Chat Completions (with History) {#chat-completions-with-history} +##### Generate Embeddings (Chunk Collection) {#embeddings-chunk-collection} -The `Chat Completions (with history)` operation supports more complex use cases where a list of (historical) messages (for example, comprising the conversation or context so far) is sent as part of the request to the LLM. +The `Generate Embeddings (Chunk Collection)` operation allows the invocation of an embeddings API with a [ChunkCollection](#chunkcollection) and returns an [EmbeddingsResponse](#embeddingsresponse-entity) object with token usage statistics, if applicable. The response object is associated with the original [ChunkCollection](#chunkcollection) used as an input, and the [Chunk](#chunk-entity) (or [KnowledgeBaseChunk](#knowledgebasechunk-entity)) objects will be updated with their corresponding embedding vector retrieved from the Embeddings API within this microflow. ###### Input Parameters | Name | Type | Notes | Description | -| --- | --- | --- |--- | -| `DeployedModel` | [DeployedModel](#deployed-model) | mandatory | The DeployedModel entity replaces the Connection entity. It contains the name of the microflow to be executed for the specified model and other information relevant to connect to a model. The OutputModality of the DeployedModel needs to be Text. | -| `Request` | [Request](#request) | mandatory | This is an object that contains messages, optional attribute, and an optional [ToolCollection](#toolcollection). | +| --- | --- | ---| --- | +| `ChunkCollection` | [ChunkCollection](#chunkcollection) | mandatory | A ChunkCollection with Chunks for which an embedding vector should be generated. Use operations from GenAI commons to create a ChunkCollection and add Chunks or KnowledgeBaseChunks to it. | +| `DeployedModel` | [DeployedModel](#deployed-model) | mandatory | The DeployedModel entity replaces the Connection entity. It contains the name of the microflow to be executed for the specified model and other information relevant to connecting to a model. The OutputModality needs to be Embeddings. | +| `EmbeddingOptions` | [EmbeddingsOptions](#embeddingsoptions-entity) | optional | Can be used to pass optional request attributes. | ###### Return Value | Name | Type | Description | | --- | --- | --- | -| `Response` | [Response](#response) | A `Response` object that contains the assistant's response. | +| `EmbeddingsResponse` | [EmbeddingsResponse](#embeddingsresponse-entity) | An response object that contains the token usage statistics and the corresponding embedding vector as part of a ChunkCollection. | -##### Text and Files: Generate Image {#generate-image} +##### Generate Embeddings (String) {#embeddings-string} -The `Generate Image` operation supports the generation of images based on a `UserPrompt` passed as a string. The returned `Response` contains a `FileContent` via `FileCollection` and `Message`. See microflows in the `Handle Response` folder to get the image (list). +The `Generate Embeddings (String)` operation allows the invocation of the embeddings API with a String input and returns an `EmbeddingsResponse` object with token usage statistics, if applicable. The `EmbeddingsResponse_GetFirstVector` microflow from GenAI Commons can be used to retrieve the corresponding embedding vector in a String representation. This operation supports scenarios where the vector embedding of a single string must be generated, e.g. to perform a nearest neighbor search across an existing knowledge base. ###### Input Parameters | Name | Type | Notes | Description | -| --- | --- | --- |--- | -| `DeployedModel` | [DeployedModel](#deployed-model) | mandatory | The DeployedModel entity replaces the Connection entity. It contains the name of the microflow to be executed for the specified model and other information relevant to connect to a model. The OutputModality needs to be Image. | -| `UserPrompt` | String | mandatory | This is the description the image will be based on. | -| `ImageOptions` | [ImageOptions](#imageoptions-entity) | optional | This can be used to pass optional request attributes. | +| --- | --- | ---| --- | +| `InputText` | String | mandatory | Input text to create the embedding vector. | +| `DeployedModel` | [DeployedModel](#deployed-model) | mandatory | The DeployedModel entity replaces the Connection entity. It contains the name of the microflow to be executed for the specified model and other information relevant to connecting to a model. The OutputModality needs to be Embeddings. | +| `EmbeddingOptions` | [EmbeddingsOptions](#embeddingsoptions-entity) | optional | Can be used to pass optional request attributes.| ###### Return Value | Name | Type | Description | | --- | --- | --- | -| `Response` | [Response](#response) | A `Response` object that contains the assistant's response including a `FileContent` which needs to be used in [Get Generated Image (Single)](#image-get-single) or [Get Generated Images (List)](#image-get-list).| - -#### Text and Files: Build Request {#text-files-request} - -The following microflows help you construct the input request structures for the operations for text and files defined in GenAI Commons. +| `EmbeddingsResponse` | [EmbeddingsResponse](#embeddingsresponse-entity) | A response object that contains the token usage statistics and the corresponding embedding vector as part of a ChunkCollection | -##### Create Request {#chat-create-request} +##### Generate Image {#generate-image} -This microflow can be used to create a request for a chat completion operation. This is the request object that contains the top-level functional input for the language model to generate a response. +The `Generate Image` operation supports the generation of images based on a `UserPrompt` passed as a string. The returned `Response` contains a `FileContent` via `FileCollection` and `Message`. See microflows in the `Handle Response` folder to get the image (list). ###### Input Parameters | Name | Type | Notes | Description | -|--- |--- |--- |--- | -| `SystemPrompt` | String | optional | A system message can specify the assistant persona or give the model more guidance, context, or instructions. This attribute is optional. | -| `Temperature` | Decimal | optional | This is the sampling temperature. Higher values will make the output more random, while lower values make it more focused and deterministic. This attribute is optional. | -| `MaxTokens` | Integer/Long | Depends on AI provider or model | This is the maximum number of tokens to generate in the chat completion. The total length of input tokens and generated tokens is limited by the model's context length. This attribute is optional. | -| `TopP` | Decimal | optional | This is an alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with Top_p probability mass. Mendix generally recommends altering Top_p or Temperature but not both. This attribute is optional. | +| --- | --- | --- |--- | +| `DeployedModel` | [DeployedModel](#deployed-model) | mandatory | The DeployedModel entity replaces the Connection entity. It contains the name of the microflow to be executed for the specified model and other information relevant to connect to a model. The OutputModality needs to be Image. | +| `UserPrompt` | String | mandatory | This is the description the image will be based on. | +| `ImageOptions` | [ImageOptions](#imageoptions-entity) | optional | This can be used to pass optional request attributes. | ###### Return Value | Name | Type | Description | -|--- |--- |--- | -| `Request` |[Request](#request) | This is the created request object. | +| --- | --- | --- | +| `Response` | [Response](#response) | A `Response` object that contains the assistant's response including a `FileContent` which needs to be used in [Get Generated Image (Single)](#image-get-single) or [Get Generated Images (List)](#image-get-list).| + +#### GenAI (Request Building) {#genai-request-building} + +The following microflows help you construct the input request structures for the operations defined in the GenAI Commons. ##### Add Message to Request {#chat-add-message-to-request} @@ -400,39 +419,24 @@ This microflow can add a new [Message](#message) to the [Request](#request) obje This microflow does not have a return value. -##### Configure Stop Sequence {#chat-add-stop-sequence} - -This microflow can be used to add an optional [StopSequence](#stopsequence) to the request. It can be used after the request has been created. If available for the connector and model of choice, stop sequences let models know when to stop generating text. - -###### Input Parameters - -| Name | Type | Notes | Description | -|---|---|---|---| -| `Request` | [Request](#request) | mandatory | This is the request object that contains the functional input for the model to generate a response. | -| `StopSequence` | String | mandatory | This is the stop sequence string, which is used to make the model stop generating tokens at a desired point. | - -###### Return Value - -This microflow does not have a return value. - -##### Files: Initialize Collection with File {#initialize-filecollection} +##### Create Request {#chat-create-request} -To include files within a message, you must provide them in the form of a file collection. This helper microflow creates the file collection and adds the first file. The File Collection is an optional part of a [Message](#message) object. +This microflow can be used to create a request for a chat completion operation. This is the request object that contains the top-level functional input for the language model to generate a response. ###### Input Parameters | Name | Type | Notes | Description | -|---|---|---|---| -| `URL` | String | Either URL or FileDocument is required. | This is the URL of the file. | -| `FileDocument` | `System.FileDocument` | Either URL or FileDocument is required. | The file for which the contents are part of a message. | -| `ENUM_FileType` | [ENUM_FileType](#enum-filetype) | mandatory | This is the type of the file. | -| `TextContent` | String | optional | An optional text content describing the file content or giving it a specific name. | +|--- |--- |--- |--- | +| `SystemPrompt` | String | optional | A system message can specify the assistant persona or give the model more guidance, context, or instructions. This attribute is optional. | +| `Temperature` | Decimal | optional | This is the sampling temperature. Higher values will make the output more random, while lower values make it more focused and deterministic. This attribute is optional. | +| `MaxTokens` | Integer/Long | Depends on AI provider or model | This is the maximum number of tokens to generate in the chat completion. The total length of input tokens and generated tokens is limited by the model's context length. This attribute is optional. | +| `TopP` | Decimal | optional | This is an alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with Top_p probability mass. Mendix generally recommends altering Top_p or Temperature but not both. This attribute is optional. | ###### Return Value | Name | Type | Description | -|--- |---|---| -| `FileCollection` | [FileCollection](#filecollection) | This is the created file collection with the new file associated with it. | +|--- |--- |--- | +| `Request` |[Request](#request) | This is the created request object. | ##### Files: Add File to Collection {#add-file-to-collection} @@ -452,23 +456,24 @@ Use this microflow to add a file to an existing [FileCollection](#filecollection This microflow does not have a return value. -##### Image Generation: Create ImageOptions {#imageoptions-create} +##### Files: Initialize Collection with File {#initialize-filecollection} -This microflow creates new [ImageOptions](#imageoptions-entity). +To include files within a message, you must provide them in the form of a file collection. This helper microflow creates the file collection and adds the first file. The File Collection is an optional part of a [Message](#message) object. ###### Input Parameters | Name | Type | Notes | Description | -|--- |--- |--- |--- | -| `Height` | Integer/Long | optional | To set Width. | -| `Width` | Integer/Long | optional | To set Height. | -| `NumberOfImages` | Integer/Long | optional | To set NumberOfImages to create. | +|---|---|---|---| +| `URL` | String | Either URL or FileDocument is required. | This is the URL of the file. | +| `FileDocument` | `System.FileDocument` | Either URL or FileDocument is required. | The file for which the contents are part of a message. | +| `ENUM_FileType` | [ENUM_FileType](#enum-filetype) | mandatory | This is the type of the file. | +| `TextContent` | String | optional | An optional text content describing the file content or giving it a specific name. | ###### Return Value | Name | Type | Description | -|--- |--- |--- | -| `ImageOptions` | [ImageOptions](#imageoptions-entity) | The newly created ImageOptions object. | +|--- |---|---| +| `FileCollection` | [FileCollection](#filecollection) | This is the created file collection with the new file associated with it. | ##### Tools: Add Function to Request {#add-function-to-request} @@ -476,7 +481,7 @@ Adds a new Function to a [ToolCollection](#toolcollection) that is part of a Req ###### Input Parameters - Name | Type | Notes | Description | +| Name | Type | Notes | Description | |---|---|---|---| | `Request` | [Request](#request) | mandatory | The request to add the function to. | | `ToolName` | String | mandatory | The name of the tool to use/call. | @@ -509,135 +514,116 @@ Use this microflow to control how the model should determine which function to l This microflow does not have a return value. -#### Text and Files: Handle Response {#text-files-response} +#### GenAI (Response Handling) {#genai-response-handling} The following microflows handle the response processing. -##### Get Response Text {#chat-get-model-response-text} +##### Get Generated Image (List) {#image-get-list} -This microflow can get the content from the latest assistant message over association `Response_Message`. Use this microflow to get the response text from the latest assistant response message. In many cases, this is the main value needed for further logic after the operation or is displayed to the end user. Note that the content can be directly extracted from the [Response's](#response) attribute `ResponseText`. +This operation processes a response that was created by an image generation operation. A return entity can be specified using ResponseImageEntity (needs to be of type `System.Image` or its specialization). A list of images of that type will be created and returned. ###### Input Parameters | Name | Type | Notes | Description | |---|---|---|---| -| `Response` | [Response](#response) | mandatory | The response object. | +| `ResponseImageEntity` | Entity | mandatory | This is to specify the entity of the returned image. Must be of type `System.Image` or its specializations. | +| `Response` | [Response](#response) | mandatory | This is the response that was returned by an image generation operation. It points to a message with the FileContent to create the image. | ###### Return Value | Name | Type | Description | |---|---|---| -| `ResponseText` | String | This is the string `Content` of the message with role `assistant` that was generated by the model as a response to a user message. | +| `GeneratedImageList` | List of type determined by `ResponseImageEntity` | The list of generated images. | -##### Get References {#chat-get-references} +##### Get Generated Image (Single) {#image-get-single} -Use this microflow to get the list of references that may be included in the model response. These can be used to display source information, content, and citations on which the model response text was based according to the language model. References are only available if they were specifically requested from the LLM and mapped from the LLM response into the GenAI Commons [domain model](#domain-model). +This operation processes a response that was created by an image generation operation. A return entity can be specified using ResponseImageEntity (needs to be of type `System.Image` or its specialization). An image of that type will be created and returned. ###### Input Parameters | Name | Type | Notes | Description | |---|---|---|---| -| `Response` | [Response](#response) | mandatory | The response object. | +| `ResponseImageEntity` | Entity | mandatory | This is to specify the entity of the returned image. Must be of type `System.Image` or its specializations. | +| `Response` | [Response](#response) | mandatory | This is the response that was returned by an image generation operation. It points to a message with the FileContent to create the image. | ###### Return Value | Name | Type | Description | |---|---|---| -| `ReferenceList` | List of [Reference](#reference) | The references with optional citations were part of the response message. | +| `GeneratedImage` | Object of type determined by `ResponseImageEntity` | The generated image. | -##### Get Generated Image (Single) {#image-get-single} +##### Get References {#chat-get-references} -This operation processes a response that was created by an image generation operation. A return entity can be specified using ResponseImageEntity (needs to be of type `System.Image` or its specialization). An image of that type will be created and returned. +Use this microflow to get the list of references that may be included in the model response. These can be used to display source information, content, and citations on which the model response text was based according to the language model. References are only available if they were specifically requested from the LLM and mapped from the LLM response into the GenAI Commons [domain model](#domain-model). ###### Input Parameters | Name | Type | Notes | Description | |---|---|---|---| -| `ResponseImageEntity` | Entity | mandatory | This is to specify the entity of the returned image. Must be of type `System.Image` or its specializations. | -| `Response` | [Response](#response) | mandatory | This is the response that was returned by an image generation operation. It points to a message with the FileContent to create the image. | +| `Response` | [Response](#response) | mandatory | The response object. | ###### Return Value | Name | Type | Description | |---|---|---| -| `GeneratedImage` | Object of type determined by `ResponseImageEntity` | The generated image. | +| `ReferenceList` | List of [Reference](#reference) | The references with optional citations were part of the response message. | -##### Get Generated Images (List) {#image-get-list} +##### Get Response Text {#chat-get-model-response-text} -This operation processes a response that was created by an image generation operation. A return entity can be specified using ResponseImageEntity (needs to be of type `System.Image` or its specialization). A list of images of that type will be created and returned. +This microflow can get the content from the latest assistant message over association `Response_Message`. Use this microflow to get the response text from the latest assistant response message. In many cases, this is the main value needed for further logic after the operation or is displayed to the end user. Note that the content can be directly extracted from the [Response's](#response) attribute `ResponseText`. ###### Input Parameters | Name | Type | Notes | Description | |---|---|---|---| -| `ResponseImageEntity` | Entity | mandatory | This is to specify the entity of the returned image. Must be of type `System.Image` or its specializations. | -| `Response` | [Response](#response) | mandatory | This is the response that was returned by an image generation operation. It points to a message with the FileContent to create the image. | +| `Response` | [Response](#response) | mandatory | The response object. | ###### Return Value | Name | Type | Description | |---|---|---| -| `GeneratedImageList` | List of type determined by `ResponseImageEntity` | The list of generated images. | - -#### Knowledge Bases and Embeddings Operations {#knowledge-bases-embeddings-operations} +| `ResponseText` | String | This is the string `Content` of the message with role `assistant` that was generated by the model as a response to a user message. | -Embedding operations can be used by passing a [DeployedModel](#deployed-model) object of the desired connector. The action calls the internally assigned microflow of the connector and returns the response. Operations from different connectors can be exchanged very easily without much additional development effort. +#### GenAI (Request Building, Expert) -##### Generate Embeddings (String) {#embeddings-string} +##### Configure Stop Sequence {#chat-add-stop-sequence} -The `Generate Embeddings (String)` operation allows the invocation of the embeddings API with a String input and returns an `EmbeddingsResponse` object with token usage statistics, if applicable. The `EmbeddingsResponse_GetFirstVector` microflow from GenAI Commons can be used to retrieve the corresponding embedding vector in a String representation. This operation supports scenarios where the vector embedding of a single string must be generated, e.g. to perform a nearest neighbor search across an existing knowledge base. +This microflow can be used to add an optional [StopSequence](#stopsequence) to the request. It can be used after the request has been created. If available for the connector and model of choice, stop sequences let models know when to stop generating text. ###### Input Parameters | Name | Type | Notes | Description | -| --- | --- | ---| --- | -| `InputText` | String | mandatory | Input text to create the embedding vector. | -| `DeployedModel` | [DeployedModel](#deployed-model) | mandatory | The DeployedModel entity replaces the Connection entity. It contains the name of the microflow to be executed for the specified model and other information relevant to connecting to a model. The OutputModality needs to be Embeddings. | -| `EmbeddingOptions` | [EmbeddingsOptions](#embeddingsoptions-entity) | optional | Can be used to pass optional request attributes.| +|---|---|---|---| +| `Request` | [Request](#request) | mandatory | This is the request object that contains the functional input for the model to generate a response. | +| `StopSequence` | String | mandatory | This is the stop sequence string, which is used to make the model stop generating tokens at a desired point. | ###### Return Value -| Name | Type | Description | -| --- | --- | --- | -| `EmbeddingsResponse` | [EmbeddingsResponse](#embeddingsresponse-entity) | A response object that contains the token usage statistics and the corresponding embedding vector as part of a ChunkCollection | +This microflow does not have a return value. -##### Generate Embeddings (Chunk Collection) {#embeddings-chunk-collection} +##### Image Generation: Create ImageOptions {#imageoptions-create} -The `Generate Embeddings (Chunk Collection)` operation allows the invocation of an embeddings API with a [ChunkCollection](#chunkcollection) and returns an [EmbeddingsResponse](#embeddingsresponse-entity) object with token usage statistics, if applicable. The response object is associated with the original [ChunkCollection](#chunkcollection) used as an input, and the [Chunk](#chunk-entity) (or [KnowledgeBaseChunk](#knowledgebasechunk-entity)) objects will be updated with their corresponding embedding vector retrieved from the Embeddings API within this microflow. +This microflow creates new [ImageOptions](#imageoptions-entity). ###### Input Parameters | Name | Type | Notes | Description | -| --- | --- | ---| --- | -| `ChunkCollection` | [ChunkCollection](#chunkcollection) | mandatory | A ChunkCollection with Chunks for which an embedding vector should be generated. Use operations from GenAI commons to create a ChunkCollection and add Chunks or KnowledgeBaseChunks to it. | -| `DeployedModel` | [DeployedModel](#deployed-model) | mandatory | The DeployedModel entity replaces the Connection entity. It contains the name of the microflow to be executed for the specified model and other information relevant to connecting to a model. The OutputModality needs to be Embeddings. | -| `EmbeddingOptions` | [EmbeddingsOptions](#embeddingsoptions-entity) | optional | Can be used to pass optional request attributes. | +|--- |--- |--- |--- | +| `Height` | Integer/Long | optional | To set Width. | +| `Width` | Integer/Long | optional | To set Height. | +| `NumberOfImages` | Integer/Long | optional | To set NumberOfImages to create. | ###### Return Value | Name | Type | Description | -| --- | --- | --- | -| `EmbeddingsResponse` | [EmbeddingsResponse](#embeddingsresponse-entity) | An response object that contains the token usage statistics and the corresponding embedding vector as part of a ChunkCollection. | +|--- |--- |--- | +| `ImageOptions` | [ImageOptions](#imageoptions-entity) | The newly created ImageOptions object. | -#### Knowledge Bases and Embeddings: Build Request {#knowledge-bases-embeddings-request} +#### GenAI Knowledge Base (Content) {#genai-knowledgebase-content} The following microflows and Java actions help you construct the input structures for the operations for knowledge bases and embeddings as defined in GenAI Commons. -##### Chunks: Initialize ChunkCollection{#chunkcollection-create} - -This microflow creates a new [ChunkCollection](#chunkcollection) and returns it. - -###### Input Parameters - -This microflow has no input parameters. - -###### Return Value - -| Name | Type | Description | -|--- |--- |--- | -| `ChunkCollection` | [ChunkCollection](#chunkcollection) | The newly created ChunkCollection object. | - -##### Chunk: Add Chunk to ChunkCollection{#chunkcollection-add-chunk} +##### Chunks: Add Chunk to ChunkCollection{#chunkcollection-add-chunk} This microflow adds a new [Chunk](#chunk-entity) to the [ChunkCollection](#chunkcollection). @@ -654,7 +640,7 @@ This microflow adds a new [Chunk](#chunk-entity) to the [ChunkCollection](#chunk |--- |--- |--- | | `Chunk` | [Chunk](#chunk-entity) | The added Chunk object. | -##### Chunk: Add KnowledgeBaseChunk to ChunkCollection{#chunkcollection-add-knowledgebasechunk} +##### Chunks: Add KnowledgeBaseChunk to ChunkCollection{#chunkcollection-add-knowledgebasechunk} This Java action adds a new [KnowledgeBaseChunk](#knowledgebasechunk-entity) to the ChunkCollection to create the input for embeddings or knowledge base operations. Optionally, a MetadataCollection can be added for more advanced filtering. Use [Initialize MetadataCollection with Metadata](#knowledgebase-initialize-metadatacollection) to instantiate a MetadataCollection first, if needed. @@ -666,7 +652,7 @@ This Java action adds a new [KnowledgeBaseChunk](#knowledgebasechunk-entity) to | `InputText` | String | mandatory | Input text to generate an embedding vector. | | `HumanReadableID` | String | mandatory | This is a front-end identifier that can be used for showing or retrieving sources in a custom way. If it is not relevant, "empty" must be passed explicitly here. | | `MxObject` | Type parameter | optional | This parameter is used to capture the Mendix object to which the chunk refers. This can be used for finding the record in the Mendix database later on after the retrieval step. | -| `MetadataCollection` | [MetadataCollection](#metadatacollection-entity) | optional | This is an optional MetadataCollection that contains extra information about the KnowledgeBaaseChunk. Any key-value pairs can be stored. In the retrieval operations, it is possible to filter on one or multiple metadata key-value pairs. | +| `MetadataCollection` | [MetadataCollection](#metadatacollection-entity) | optional | This is an optional MetadataCollection that contains extra information about the KnowledgeBaseChunk. Any key-value pairs can be stored. In the retrieval operations, it is possible to filter on one or multiple metadata key-value pairs. | ###### Return Value @@ -674,6 +660,20 @@ This Java action adds a new [KnowledgeBaseChunk](#knowledgebasechunk-entity) to |--- |--- |--- | | `KnowledgeBaseChunk` | [KnowledgeBaseChunk](#knowledgebasechunk-entity) | The added KnowledgeBaseChunk object. | +##### Chunks: Initialize ChunkCollection {#chunkcollection-create} + +This microflow creates a new [ChunkCollection](#chunkcollection) and returns it. + +###### Input Parameters + +This microflow has no input parameters. + +###### Return Value + +| Name | Type | Description | +|--- |--- |--- | +| `ChunkCollection` | [ChunkCollection](#chunkcollection) | The newly created ChunkCollection object. | + ##### Embeddings: Create EmbeddingsOptions {#embeddingsoptions-create} This microflow creates new [EmbeddingsOptions](#embeddingsoptions-entity). @@ -690,22 +690,21 @@ This microflow creates new [EmbeddingsOptions](#embeddingsoptions-entity). |--- |--- |--- | | `EmbeddingsOptions` | [EmbeddingsOptions](#embeddingsoptions-entity) | The newly created EmbeddingsOptions object. | -##### Knowledge Base: Initialize MetadataCollection with Metadata {#knowledgebase-initialize-metadatacollection} +##### Embeddings: Get First Vector from Response {#embeddings-get-first-vector} -This microflow creates a new [MetadataCollection](#metadatacollection-entity) and adds a new [Metadata](#metadatacollection-entity). The [MetadataCollection](#metadatacollection-entity) will be returned. To add additional Metadata, use [Add Metadata to MetadataCollection](#knowledgebase-add-metadata). +This microflow gets the first embedding vector from the response of an embedding operation. ###### Input Parameters | Name | Type | Notes | Description | |--- |--- |--- |--- | -| `Key` | String | mandatory | This is the name of the metadata and typically tells how the value should be interpreted. | -| `Value` | String | mandatory | This is the value of the metadata that provides additional information about the chunk in the context of the given key. | +| `EmbeddingsResponse` | [EmbeddingsResponse](#embeddingsresponse-entity) | mandatory | Response object that gets returned by the embeddings operations. | ###### Return Value | Name | Type | Description | |--- |--- |--- | -| `MetadataCollection` | [MetadataCollection](#metadatacollection-entity) | The newly created MetadataCollection object. | +| `Vector` | String | The first vector from the response. | ##### Knowledge Base: Add Metadata to MetadataCollection {#knowledgebase-add-metadata} @@ -723,25 +722,22 @@ This microflow adds a new [Metadata](#metadatacollection-entity) object to a giv This microflow does not have a return value. -#### Knowledge Bases and Embeddings: Handle Response {#knowledge-bases-embeddings-response} - -The following microflows and Java actions help you handle the response object for the operations for embeddings as defined in GenAI Commons. - -##### Embeddings: Get the First Vector from Response {#embeddings-get-first-vector} +##### Knowledge Base: Initialize MetadataCollection with Metadata {#knowledgebase-initialize-metadatacollection} -This microflow gets the first embedding vector from the response of an embedding operation. +This microflow creates a new [MetadataCollection](#metadatacollection-entity) and adds a new [Metadata](#metadatacollection-entity). The [MetadataCollection](#metadatacollection-entity) will be returned. To add additional Metadata, use [Add Metadata to MetadataCollection](#knowledgebase-add-metadata). ###### Input Parameters | Name | Type | Notes | Description | |--- |--- |--- |--- | -| `EmbeddingsResponse` | [EmbeddingsResponse](#embeddingsresponse-entity) | mandatory | Response object that gets returned by the embeddings operations. | +| `Key` | String | mandatory | This is the name of the metadata and typically tells how the value should be interpreted. | +| `Value` | String | mandatory | This is the value of the metadata that provides additional information about the chunk in the context of the given key. | ###### Return Value | Name | Type | Description | |--- |--- |--- | -| `Vector` | String | The first vector from the response. | +| `MetadataCollection` | [MetadataCollection](#metadatacollection-entity) | The newly created MetadataCollection object. | ### Enumerations {#enumerations} @@ -810,6 +806,30 @@ This microflow gets the first embedding vector from the response of an embedding | --- | --- | --- | | `TEXT_TO_IMAGE` | **TEXT_TO_IMAGE** | The LLM will generate an image (or multiple images) based on a text description. | +#### `ENUM_ModelModality` {#enum-modalmodality} + +`ENUM_ModelModality` describes the modalities that the model supports input or output. + +| Name | Caption | Description | +| --- | --- | --- | +| `Text` | **Text** | The model supports text. | +| `Embeddings` | **Embeddings** | The model supports embeddings. | +| `Image` | **Image** | The model supports image. | +| `File` | **File** | The model supports file. | +| `Audio` | **Audio** | The model supports audio. | +| `Video` | **Video** | The model supports video. | +| `Other` | **Other** | The model supports another modality. | + +#### `ENUM_ModelSupport` {#enum-modalsupport} + +`ENUM_ModelSupport` describes if the model supports certain functionality. + +| Name | Caption | Description | +| --- | --- | --- | +| `_True` | **True** | The model supports the functionality. | +| `_False` | **False** | The model does not support the functionality. | +| `Unknown` | **Unknown** | The support is currently unknown. | + ## Troubleshooting This section lists possible solutions to known issues. @@ -825,3 +845,24 @@ The Java actions from the [CommunityCommons](https://marketplace.mendix.com/link #### Solution Update the [CommunityCommons](https://marketplace.mendix.com/link/component/170) module to the latest version. + +### Outdated JDK Version Causing Errors while Calling a REST API {#outdated-jdk-version} + +The Java Development Kit (JDK) is a framework needed by Mendix Studio Pro to deploy and run applications. For more information, see [Studio Pro System Requirements](/refguide/system-requirements/). Usually, the correct JDK version is installed during the installation of Studio Pro, but in some cases, it may be outdated. An outdated version can cause exceptions when calling REST-based services with large data volumes, like for example embeddings operations or chat completions with vision. + +Mendix has seen the following two exceptions when using JDK versions below `jdk-11.0.5.0-hotspot`: +`java.net.SocketException - Connection reset` or +`javax.net.ssl.SSLException - Received fatal alert: record_overflow`. + +To check your JDK version and update it if necessary, follow these steps: + +1. Check your JDK version – In Studio Pro, go to **Edit** > **Preferences** > **Deployment** > **JDK directory**. If the path points to a version below `jdk-11.0.5.0-hotspot`, you need to update the JDK by following the next steps. +2. Go to [Eclipse Temurin JDK 11](https://adoptium.net/en-GB/temurin/releases/?variant=openjdk11&os=windows&package=jdk) and download the `.msi` file of the latest release of **JDK 11**. +3. Open the downloaded file and follow the installation steps. Remember the installation path. Usually, this should be something like `C:/Program Files/Eclipse Adoptium/jdk-11.0.22.7-hotspot`. +4. After the installation has finished, restart your computer if prompted. +5. Open Studio Pro and go to **Edit** > **Preferences** > **Deployment** > **JDK directory**. Click **Browse** and select the folder with the new JDK version you just installed. This should be the folder containing the *bin* folder. Save your settings by clicking **OK**. +6. Run the project and execute the action that threw the above-mentioned exception earlier. + 1. You might get an error saying `FAILURE: Build failed with an exception. The supplied javaHome seems to be invalid. I cannot find the java executable.` In this case, verify that you have selected the correct JDK directory containing the updated JDK version. + 2. You may also need to update Gradle. To do this, go to **Edit** > **Preferences** > **Deployment** > **Gradle directory**. Click **Browse** and select the appropriate Gradle version from the Mendix folder. For Mendix 10.10 and above, use Gradle 8.5. For Mendix 10 versions below 10.10, use Gradle 7.6.3. Then save your settings by clicking **OK**. + 3. Rerun the project. + \ No newline at end of file diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/start_from_blank_app.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/start_from_blank_app.md index b98c44ab903..961eba20252 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/start_from_blank_app.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/genai/using_genai/start_from_blank_app.md @@ -38,7 +38,11 @@ To start building your smart app with a blank GenAI App template, download the [ ### Important Modules +<<<<<<< HEAD The [Blank GenAI App Starter App](https://marketplace.mendix.com/link/component/227934) includes an essential pre-installed bundle called the [GenAI For Mendix](https://marketplace.mendix.com/link/component/227931), which are beneficial to familiarize yourself with, as it includes: +======= +The [Blank GenAI App Template](https://marketplace.mendix.com/link/component/227934) includes an essential pre-installed bundle called [GenAI For Mendix](https://marketplace.mendix.com/link/component/227931), which is beneficial to familiarize yourself with the GenAI functionalities Mendix can offer, as it includes: +>>>>>>> 09dbd55b24f467815f34d9cf11e36801caae1aa5 * The [GenAI Commons](/appstore/modules/genai/commons/) module: provides pre-built operations and data structures for seamless integration with platform-supported GenAI connectors, such as the Mendix Cloud GenAI, OpenAI, or Amazon Bedrock. @@ -50,10 +54,16 @@ The [Blank GenAI App Starter App](https://marketplace.mendix.com/link/component/ Selecting the infrastructure for integrating GenAI into your Mendix application is the first step. Depending on your use case and preferences, you can choose from the following options: -* [Mendix Cloud GenAI Resources Packs](/appstore/modules/genai/MxGenAI/): Part of the [GenAI For Mendix](https://marketplace.mendix.com/link/component/227931), integrates LLMs by dragging and dropping common operations from its toolbox in Studio Pro. - +* [Mendix Cloud GenAI Resources Packs](/appstore/modules/genai/MxGenAI/): Part of [GenAI For Mendix](https://marketplace.mendix.com/link/component/227931), integrates LLMs by dragging and dropping common operations from its toolbox in Studio Pro. * [OpenAI](/appstore/modules/genai/openai/): The [OpenAI Connector](https://marketplace.mendix.com/link/component/220472) supports both OpenAI’s platform and Azure’s OpenAI service. +<<<<<<< HEAD +======= +{{% alert color="info" %}} +To start, you can sign up for a free trial with OpenAI and receive credits valid for three months from the account creation date. For more details, see [OpenAI API reference](https://platform.openai.com/docs/api-reference/authentication). +{{% /alert %}} + +>>>>>>> 09dbd55b24f467815f34d9cf11e36801caae1aa5 * [Amazon Bedrock](/appstore/modules/genai/bedrock/): The [Amazon Bedrock Connector](https://marketplace.mendix.com/link/component/215042) allows you to leverage Amazon Bedrock’s fully managed service to integrate foundation models from Amazon and leading AI providers. * Your Own Connector: Optionally, if you prefer a custom connector, you can integrate your chosen infrastructure. However, this document focuses on the OpenAI and Bedrock connectors, as they offer comprehensive support and ease of use to get started. @@ -64,7 +74,7 @@ In this section, you can set up a conversational interface for your application #### Creating a Page -Copy the `ConversationalUI_FullScreenChat` page from the **ConversationalUI > USE_ME > > Conversational UI > Pages** into your module, which can be named `MyFirstBot` module. Alternatively, if you do not plan to make any changes to the page, you can use it directly without copying. +Copy the `ConversationalUI_FullScreenChat` page from the **ConversationalUI > USE_ME > Conversational UI > Pages** into your module, which can be named `MyFirstBot` module. Alternatively, if you do not plan to make any changes to the page, you can use it directly without copying. #### Configuring the Page Parameter and Chat Box Settings diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/mendix-sso.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/mendix-sso.md index 4cfab4a127e..48f59b4d8b8 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/mendix-sso.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/mendix-sso.md @@ -22,14 +22,14 @@ For Mendix 9.20 and above, you need to use v4.0.1 or above of the Mendix SSO mod ### Typical Usage Scenarios{#typical-usage} -The Mendix SSO module is typically used when you are collaborating in a small team to prepare the functionality of your app for production. During such an interactive development process, this brings two benefits: +The Mendix SSO module is typically used when you are collaborating with a small team to prepare the functionality of your app for production. During such an interactive development process, this brings two benefits: -* The end-users get a single sign-on experience using their Mendix account and are not burdened with yet another set of credentials -* You do not have to connect your app immediately to the identity provider (IdP) for your target group of end-users +* The end-users get a single sign-on experience using their Mendix account and are not burdened with yet another set of credentials. +* You do not have to connect your app immediately to the identity provider (IdP) for your target group of end-users. Once your app is ready to be released into production with a wider group of end-users, you may want to switch from using Mendix SSO to another authentication method, such as [OIDC SSO](/appstore/modules/oidc/) or [SAML](/appstore/modules/saml/). -Mendix SSO is also a good choice when you develop a Mendix app that is targeted at Mendix developers, since those end-users already have a Mendix account. +Mendix SSO is also a good choice when you develop a Mendix app that is targeted at Mendix developers since those end-users already have a Mendix account. ### Features @@ -59,7 +59,7 @@ When you run your app locally, you will need to use local credentials. If it is ## Installation and Configuration -Where the Mendix SSO module has been added to a Mendix app templates, all you have to do is set your security level to **Production** and your end-users will be able to sign in. You can see if your app has the Mendix SSO module, and which version it has, by looking in the **Marketplace modules** section in the **App Explorer** for your app. The version number is recorded in the **Version** constant within the module. +Where the Mendix SSO module has been added to a Mendix app template, all you have to do is set your security level to **Production** and your end-users will be able to sign in. You can see if your app has the Mendix SSO module, and which version it has, by looking in the **Marketplace modules** section in the **App Explorer** for your app. The version number is recorded in the **Version** constant within the module. {{< figure src="/attachments/appstore/platform-supported-content/modules/mendix-sso/mxsso-app-store-module.png" class="no-border" >}} @@ -71,14 +71,14 @@ If you need a newer version of the Mendix SSO module (for example, to use a new For Mendix 9.20 and above, you need to use v4.0.1 or above of the Mendix SSO module. {{% /alert %}} -In addition, the Mendix SSO module has a default implementation for user administration. This can be used in any Mendix app, but if you want to implement customized user administration, this is also possible. For more information, see [Customizing Mendix SSO](#customizing)section below. +In addition, the Mendix SSO module has a default implementation for user administration. This can be used in any Mendix app, but if you want to implement customized user administration, this is also possible. For more information, see the [Customizing Mendix SSO](#customizing) section below. ## Setting Up Mendix Single Sign-On{#setting-up} -These instructions are for apps which did not originally have the Mendix SSO module. For example, if you have an existing app which did not have the Mendix SSO Marketplace module. +These instructions are for apps that did not originally have the Mendix SSO module. For example, if you have an existing app that did not have the Mendix SSO Marketplace module. {{% alert color="info" %}} -You do not have to follow these steps for apps (for example, app templates) which already have Mendix SSO, or if you are upgrading an existing Mendix SSO module to a newer version. +You do not have to follow these steps for apps (for example, app templates) that already have Mendix SSO, or if you are upgrading an existing Mendix SSO module to a newer version. {{% /alert %}} To enable Mendix SSO in your app, follow these steps: @@ -95,13 +95,13 @@ To enable Mendix SSO in your app, follow these steps: 5. Click **OK** to close the app **Settings**. - {{% alert color="info" %}}If there is already an **After startup** microflow, you should not replace it, but rather add the MendixSSO_AfterStartup microflow as an action in the existing microflow.{{% /alert %}} + {{% alert color="info" %}}If there is already an **After startup** microflow, you should not replace it but rather add the MendixSSO_AfterStartup microflow as an action in the existing microflow.{{% /alert %}} 3. Add your own administration pages to monitor usage, if required. {{% alert color="info" %}}If you are using Mendix SSO v2, you can use the *default* user administration pages. For more information, see the [Customizing Mendix SSO](#customizing) section below.{{% /alert %}} -4. Turn on **Production** security level and configure **User roles** *User* and *Administrator* to have access to the appropriate **MendixSSO** module roles by performing the following steps: +4. Turn on the **Production** security level and configure **User roles** *User* and *Administrator* to have access to the appropriate **MendixSSO** module roles by performing the following steps: 1. Open app **Security** from the **App Explorer**. 2. Set **Security level** to **Production**. 3. Switch to the **User roles** tab. @@ -112,7 +112,7 @@ To enable Mendix SSO in your app, follow these steps: 7. Click **OK** twice to return to app **Security**. 8. Repeat the steps above to add the **MendixSSO.User** module role to the **User** User roles. - The app **Security** settings now contains these two additional module roles: + The app **Security** settings now contain these two additional module roles: {{< figure src="/attachments/appstore/platform-supported-content/modules/mendix-sso/module-user-roles.png" alt="Confirmation of user roles" class="no-border" >}} @@ -128,22 +128,19 @@ To enable Mendix SSO in your app, follow these steps: 5. Change the page that Mendix uses to sign you in (`login.html`) to allow for signing in using SSO. To do this, perform the following steps: 1. Go to **App** > **Show App Directory in Explorer** in Studio Pro to open the app directory in your file explorer. - 2. Go to the **theme/web** folder (for Mendix versions below 9.0.0, this is the **theme** folder). - 3. Rename *login.html* to *login-without-sso.html*. - 4. Rename *login-with-mendixsso-button.html* or *login-with-mendixsso-automatically.html* to *login.html*. The differences between the two versions of the files which you can use to replace *login.html* are as follows: - * *login-with-mendixsso-button.html* – adds a button to the standard sign-in page which the end-user can click to initiate the single sign-on process; this gives the end-user the possibility to sign in using a user name and password if desired - * *login-with-mendixsso-automatically.html* – automatically initiates the single sign-on process without needing to click a button + 2. Go to the **theme/web** folder (for Mendix versions below 9.0.0, this is the **theme** folder) and rename *login.html* to *login-without-sso.html*. + 3. Copy the `login-with-mendixsso-automatically.html` file from the **resources** > **mendixsso** > **templates** folder to the **theme/web** folder and rename it to `login.html`. This will automatically initiates the single sign-on process without needing to click a button. -Your app is now configured to use Mendix single sign-on when it is deployed to Mendix Cloud. +Your app is now configured to use Mendix single sign-on when deployed to Mendix Cloud. ## Removing Mendix Single Sign-On -{{% alert color="info" %}}By default, the Mendix SSO is not enabled for new apps or apps which do not have Mendix SSO module. In such scenarios, follow the instructions in the [Setting Up Mendix Single Sign-On](#setting-up) section below.{{% /alert %}} -If you have an app which already has Mendix SSO activated, you can remove it using one of the methods below. +{{% alert color="info" %}}By default, the Mendix SSO is not enabled for new apps or apps which do not have the Mendix SSO module. In such scenarios, follow the instructions in the [Setting Up Mendix Single Sign-On](#setting-up) section below.{{% /alert %}} +If you have an app that already has Mendix SSO activated, you can remove it using one of the methods below. ### Deactivating Mendix Single Sign-On{#deactivating} -You can deactivate Mendix SSO in two simple steps. This will remove the end-user's ability to sign in with their Mendix account, but will leave the local user administration functions of the Mendix SSO module intact. +You can deactivate Mendix SSO in two simple steps. This will remove the end-user's ability to sign in with their Mendix account but will leave the local user administration functions of the Mendix SSO module intact. To deactivate Mendix SSO, follow these two steps: @@ -164,38 +161,38 @@ To deactivate Mendix SSO, follow these two steps: {{< figure src="/attachments/appstore/platform-supported-content/modules/mendix-sso/after-startup-remove-updated.png" alt="Setting after startup microflow to none" class="no-border" >}} 5. Click **OK** to close the app **Settings**. - {{% alert color="info" %}}If there is a different **After startup** microflow, you should not remove it. Instead remove the AfterStartup_MendixSSO microflow which is an action in the existing microflow.{{% /alert %}} + {{% alert color="info" %}}If there is a different **After startup** microflow, you should not remove it. Instead, remove the `AfterStartup_MendixSSO` microflow which is an action in the existing microflow.{{% /alert %}} Mendix SSO will be deactivated the next time you deploy your app. You can still use Mendix SSO for local end-user administration. ### Removing Mendix SSO Module -You can completely remove Mendix SSO from your app if you want to use a different method for end-user administration. However, in most cases you can just leave the module in your app and deactivate it as described above. +You can completely remove Mendix SSO from your app if you want to use a different method for end-user administration. However, in most cases, you can just leave the module in your app and deactivate it as described above. To completely remove Mendix SSO, do the following: 1. Perform the two steps described in the [Deactivating Mendix Single Sign-On](#deactivating) section above. 2. Remove any references to the Mendix SSO module in the navigation profiles, accessed through the **Navigation** page of the **App Explorer**. -3. Delete the **MendixSSO** module from **Marketplace modules**. -4. Review the **Errors** pane for any other references to **MendixSSO**—there will only be additional errors if the Mendix SSO module been modified. +3. Delete the **MendixSSO** module from the **Marketplace modules**. +4. Review the **Errors** pane for any other references to **MendixSSO**—there will only be additional errors if the Mendix SSO module has been modified. ### Removing Mendix SSO Java Libraries -The steps above will not remove any of the Java libraries associated with Mendix SSO. +The steps above will not remove any Java libraries associated with Mendix SSO. All files installed by Mendix SSO are marked with *.MendixSSO.RequiredLib*. Once you have removed Mendix SSO from your app, files marked with *.MendixSSO.RequiredLib* can be removed safely, provided you have not created new dependencies on them by using them in your custom code. ## Customizing Mendix SSO {#customizing} {{% alert color="info" %}} -In v2 of the [Mendix SSO module](/appstore/modules/mendix-sso/), there was a default implementation of end-user administration. This had dependencies on specific versions of [Atlas UI](/howto8/front-end/atlas-ui/) and was removed so that Mendix SSO v3.0 and above retains compatibility with all Mendix apps, whichever UI they are using. +In v2 of the [Mendix SSO module](/appstore/modules/mendix-sso/), there was a default implementation of end-user administration. This had dependencies on specific versions of [Atlas UI](/howto8/front-end/atlas-ui/) and was removed so that Mendix SSO v3.0 and above retain compatibility with all Mendix apps, whichever UI they are using. {{% /alert %}} This section explains how to customize Mendix SSO in your apps and how to base your own user administration module on this section if you want to do things in a different way. -There are three ways you can modify the Mendix SSO module. You can use snippets from the Mendix SSO Marketplace module in your pages; you can modify the Mendix SSO module in any way you like to support your end-user administration requirements, or you can use the microflows available in the [Administration](/appstore/modules/administration/) module. +There are five ways you can modify the Mendix SSO module. You can use snippets from the Mendix SSO Marketplace module in your pages; you can modify the Mendix SSO module in any way you like to support your end-user administration requirements, use the microflows available in the [Administration](/appstore/modules/administration/) module, or configuring timeout values for the JWKS endpoint. -These three ways are described below. +The customization options are described in the sections below: ### Using Snippets @@ -203,7 +200,7 @@ These three ways are described below. This section only applies to v2 of Mendix SSO. The administration functionality is removed and the domain model has changed in Mendix SSO v3.0 and above. {{% /alert %}} -The default Mendix SSO implementation is based on snippets. You can use these snippets in your own pages to customize the administration of the end-users. If you look at how they are used in the default implementation, you can see how to use them in your own pages. The snippets are: +The default Mendix SSO implementation is based on snippets. You can use these snippets in your own pages to customize the administration of the end-users. If you look at how they are used in the default implementation, you can see how to use them on your own pages. The snippets are: {{< figure src="/attachments/appstore/platform-supported-content/modules/mendix-sso/snippets.png" alt="List of snippets in Mendix SSO" class="no-border" >}} @@ -215,7 +212,7 @@ The default Mendix SSO implementation is based on snippets. You can use these sn * **AccountDetailsNotEditableSnippet** – text explaining that details of SSO end-users come from Mendix and are not editable in the app * **EnvironmentCredentialsSecurityWarningSnippet** – text warning that sharing credentials is a security risk * **TokensAreExpiredPeriodicallySnippet** – text explaining that expired tokens are deleted automatically after a period of time - * **TokenSecurityWarningSnippet** – text explaining that tokens give access to the app for SSO end-users, and that local end-users will not have tokens + * **TokenSecurityWarningSnippet** – text explaining that tokens give access to the app for SSO end-users and that local end-users will not have tokens * **TokenViewSnippet** – displays details of a token * In the **User** folder * **MyAccountDetailsSnippet** – a page where details of an end-user can be seen—similar to **UserViewEditSnippet** but without the additional administration capabilities @@ -224,7 +221,7 @@ The default Mendix SSO implementation is based on snippets. You can use these sn ### Modifying Mendix SSO {{% alert color="warning" %}} -Mendix recommends that you do not modify the version of Mendix SSO which is in the Marketplace modules section of your app. In future, you may wish to import a newer version of the module and this will overwrite any changes you make. +Mendix recommends that you do not modify the version of Mendix SSO which is in the Marketplace modules section of your app. In the future, you may wish to import a newer version of the module and this will overwrite any changes you make. {{% /alert %}} The Mendix SSO module is written so that you can create a user entity in another module and use this entity to store the user information. You can also use this entity as the basis of a new [Administration](/appstore/modules/administration/) module. @@ -233,17 +230,17 @@ The Mendix SSO module is written so that you can create a user entity in another To make a copy of the module, do the following: -1. Add a new module to your app. In these examples it is called **CustomMendixSSO**. +1. Add a new module to your app. In these examples, it is called **CustomMendixSSO**. 2. Create the **Module roles** *User* and *Administrator* for the new module. -3. Copy the **MendixSSOUser** entity from the **MendixSSO** module domain model, to the domain model of your new module. In these examples, this is called *CustomMendixSSOUser*. +3. Copy the **MendixSSOUser** entity from the **MendixSSO** module domain model to the domain model of your new module. In these examples, this is called *CustomMendixSSOUser*. {{% alert color="info" %}}You can also create an entity from scratch, provided it uses **System.User** as its generalization.{{% /alert %}} 4. Set the entity **Access rules** for the **User** and **Administrator** module roles. -5. Move the **MOVE_THIS** folder from **MendixSSO** to existing module containing your customized user administration entity. +5. Move the **MOVE_THIS** folder from **MendixSSO** to the existing module containing your customized user administration entity. This will move the following microflows: @@ -280,10 +277,10 @@ You need to tell the Mendix SSO Module to use your new entity, instead of the de Mendix SSO will now use your new entity to administer the users. You can edit the domain model and write your own user administration pages and microflows to customize your user administration completely. If you need inspiration or help in designing user administration, you can refer to the default implementation in the Mendix SSO module. {{% alert color="info" %}} -Remember that data which comes from the end-user's Mendix ID via SSO (for example, **EmailAddress**) overwrites any changes you make within your app. +Remember that data that comes from the end-user's Mendix ID via SSO (for example, **EmailAddress**) overwrites any changes you make within your app. {{% /alert %}} -### Using the Administration module +### Using the Administration Module The [Administration](https://marketplace.mendix.com/link/component/23513) module v1.3.X (for example 1.3.2) and 2.1.X (for example 2.1.2) contain a set of microflows to configure Mendix SSO to use **Administration.Account** as the user entity. Follow the instructions in [Using the Administration Module with Mendix SSO](/appstore/modules/administration/#use-with-mendix-sso) to use the Administration module with Mendix SSO. @@ -295,19 +292,25 @@ The URL, `{myURL}` is added as the `continuation={myURL}` parameter to the endpo For example, if your app "myapp" contains a profile page (`myprofile`) which has a deeplink to it, you could redirect the end-user to their profile page after login like this: `https://myapp.mendixcloud.com/openid/login?continuation=https://myapp.mendixcloud.com/link/myprofile` +For Studio Pro 10.6 and above, ensure you use Mendix SSO module version 10.1 or above, as the DeepLink module has been deprecated and replaced with page URLs. Specify the continuation URL accordingly, as described in the [URL](/refguide/page-properties/#url) section of the *Page Properties*. + +{{% alert color="info" %}} +When using the Page URL or upgrading the module to the latest version, it is mandatory to replace the content of the `theme/web/login.html` file with that of the `resources/mendixsso/templates/login-with-mendixsso-automatically.html` file. For more details, refer to the [Setting Up Mendix Single Sign-On](/appstore/modules/mendix-sso/#setting-up) section above. +{{% /alert %}} + #### Continuation URL Validation {{% alert color="info" %}} Validation of continuation URLs was introduced in version 4.2.0 of the Mendix SSO module. {{% /alert %}} -To protect against bad actors, the Mendix SSO module validates the continuation url and ensures the end-user will only be redirected to an approved location. By default the approved locations include only the default app Url, which can be found on the [Environment Details](/developerportal/deploy/environments-details/) page of your app environment. +To protect against bad actors, the Mendix SSO module validates the continuation URL and ensures the end-user will only be redirected to an approved location. By default, the approved locations include only the default app Url, which can be found on the [Environment Details](/developerportal/deploy/environments-details/) page of your app environment. If your Mendix application has registered any custom domains, or if you want to redirect the end-user to a different application, the host names need to be specifically supplemented for your deployed application. This can be configured in the **Runtime** settings tab of the Mendix Portal as described below. ##### Supplementing Allowed Continuation URLs{#supplements} -On the **Runtime** tab of your app environment's [Environment Details](/developerportal/deploy/environments-details/#runtime-tab) you can set Custom Environment Variables. Here you can specify a comma-separated list of URLs that can be used as continuation URLs in your Mendix application. +On the **Runtime** tab of your app environment's [Environment Details](/developerportal/deploy/environments-details/#runtime-tab), you can set Custom Environment Variables. Here you can specify a comma-separated list of URLs that can be used as continuation URLs in your Mendix application. To add a list of allowed continuation URLs, do the following: @@ -325,6 +328,10 @@ Only exact host names are accepted in the validation, any sub-domains need to be For example, if your application is running on `https://myapp.mendixcloud.com`, the sub-domain `sub.myapp.mendixcloud.com` will not be approved, unless the environment variable `MendixSSO_AllowedContinuationURLs` contains `https://sub.myapp.mendixcloud.com`. {{% /alert %}} +### Using Timeout Values for the JWKS Endpoint + +Additionally, Mendix SSO now supports configuring timeout values for the JWKS endpoint. You can set custom timeout values using the environment variables `MendixSSO_RemoteJWKSHttpConnectTimeout` and `MendixSSO_RemoteJWKSHttpReadTime`. These values, specified in milliseconds, read and connect timeouts for the JWKS endpoint. Note that timeout values must not be negative. + ## Tokens Mendix SSO works by providing end-users with tokens when they are authenticated. If end-users have issues with Mendix SSO it can be useful to see the tokens, either for your own debugging or to provide information to [Mendix Support](/support/). @@ -339,7 +346,7 @@ Local users do not have tokens as they do not sign in via SSO. ### Tokens in Mendix SSO v3 and Above -Tokens are held in encrypted form in the `Token` entity, and are associated with the end-user via the `Token_User` association. +Tokens are held in encrypted form in the `Token` entity and are associated with the end-user via the `Token_User` association. {{< figure src="/attachments/appstore/platform-supported-content/modules/mendix-sso/domain-model-token.png" class="no-border" >}} @@ -367,13 +374,13 @@ Individual end-users can see their tokens on the MendixSSO.MyTokensOverview page {{< figure src="/attachments/appstore/platform-supported-content/modules/mendix-sso/token-pages.png" alt="List of pages which show tokens in Mendix SSO" class="no-border" >}} -If you want administrators or end-users to be able to see tokens, it is recommended that you add these to the navigation of the app. This avoids them being included in the main process flows of the app. +If you want administrators or end-users to be able to see tokens, it is recommended that you add these to the navigation of the app. This prevents them from being included in the main process flows of the app. {{< figure src="/attachments/appstore/platform-supported-content/modules/mendix-sso/token-navigation.png" alt="How to add navigation to the tokens overview pages in Mendix SSO" class="no-border" >}} ##### TokensOverview Page -The TokensOverview page allows administrators to see all tokens which have been issued to end-users of the app. +The TokensOverview page allows administrators to see all tokens that have been issued to end-users of the app. {{< figure src="/attachments/appstore/platform-supported-content/modules/mendix-sso/token-administration.png" alt="List of all Mendix SSO tokens issued to the app" class="no-border" >}} @@ -381,7 +388,7 @@ The page can be used for troubleshooting — you can see the creation and expiry The **ID Token** is held in *JWT* format, so you can paste it into a [JWT decoder](https://jwt.io) to confirm what information it holds. -The page can also be used for administration. You can delete tokens which are expired and you can also delete current tokens if they are causing unwanted issues. +The page can also be used for administration. You can delete tokens that are expired and you can also delete current tokens if they are causing unwanted issues. Deleting tokens from the **TokensOverview** page will cause end-users to lose access to the app. However, they will be able to sign in again if they are still end-users of the app. @@ -393,7 +400,7 @@ The **MyTokensOverview** page allows end-users to see their own access tokens. The page can be used for troubleshooting — the end-user can see the creation and expiry dates of the tokens, and by clicking **View**, they can view the values held in the tokens. This can be useful for troubleshooting if the end-user is having difficulty getting proper access to the app. -#### Displaying Tokens using Snippets +#### Displaying Tokens Using Snippets The default tokens pages in the MendixSSO module are created using snippets. diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/oidc.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/oidc.md index 465ac207213..cc7f4946d59 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/oidc.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/oidc.md @@ -195,11 +195,15 @@ This section provides an overview of updates for the OIDC SSO module across diff | Mendix Version | OIDC SSO Module Version | Important Migration Changes | Additional Information| | --- | --- | --- | --- | -| 10.12.10 and above | 4.0.0 | Set `OIDC.ASU_OIDC_Startup` microflow as part of the after-startup microflow | -From UserCommons 2.0.0, new users without IdP-specified time zone or language will use default App settings; existing users retain their previously set values.
      -Deprecated Mx Model Reflection module; maintained for compatibility but will be removed in future versions.
      -Default user roles in UserProvisioning will be assigned along with roles from the access token.| +| 10.12.10 and above | 4.0.0 | Set `OIDC.ASU_OIDC_Startup` microflow as part of the after-startup microflow | From UserCommons 2.0.0, new users without IdP-specified time zone or language will use default App settings; existing users retain their previously set values. | +| | | | Deprecated Mx Model Reflection module; maintained for compatibility but will be removed in future versions. | +| | | | Default user roles in UserProvisioning will be assigned along with roles from the access token. | +| | | | The `OIDC.ACT_Account_RetrieveAccount` microflow, located in the **USE_ME** folder, has been removed as it is no longer required. | | 9.24.18 and above | 3.2.0 | Select and refresh the Administration and System modules manually in the `MxModelReflection.MxObjects_Overview` page| Added a new heading for selected scopes: *Your app will request the following scopes at IdP*. | | 9.24.2 and above | 3.1.0 | Set `OIDC.ASU_OIDC_Startup` microflow as part of the after-startup microflow | `OIDC.Startup` microflow renamed to `OIDC.ASU_OIDC_Startup` | | 9.24.2 and above | 3.0.1 | Use `Snip_Login_Button` snippet instead of `Snip_Login_Automatic` | `Snip_Login_Automatic` snippet removed from the module | -| 9.24.2 and above | 3.0.0 (migrating to 3.0.0 and above) | -Include [UserCommons](https://marketplace.mendix.com/link/component/223053) module as a dependency
      -Set `OIDC.Startup` microflow as part of the after-startup microflow | -New UserCommons module
      -Assign UserProvisioning for existing IdP configurations | +| 9.24.2 and above | 3.0.0 (migrating to 3.0.0 and above) | Include [UserCommons](https://marketplace.mendix.com/link/component/223053) module as a dependency. | New UserCommons module | +| | | Set `OIDC.Startup` microflow as part of the after-startup microflow. | Assign UserProvisioning for existing IdP configurations. | ## Design-time App Configuration{#app-configuration} @@ -248,6 +252,9 @@ If you are configuring navigation for web/responsive apps and want to allow your In addition, administrators will need to have access to configure OIDC and also manage end-users. You can do this by including the pages `Administration.Account_Overview` and `OIDC.OIDC_Client_Overview` into the app navigation, or a separate administration page. +If you are testing phone web and phone web offline locally, use the URLs `http://localhost:8080/?profile=Phone` and +`http://localhost:8080/?profile=PhoneOffline`, respectively. For more information, see the [Example of profile selection](/refguide/mobile/introduction-to-mobile-technologies/progressive-web-app/#example-of-profile-selection) section of *Progressive Web App*. + ### Setting Encryption Key Follow the instructions to [set an encryption key in the Encryption module](/appstore/modules/encryption/#configuration). The constant to set is called `Encryption.EncryptionKey` and should be a random value 32 characters long. This key will be used to encrypt and decrypt values. @@ -532,8 +539,8 @@ You can set up custom user provisioning by setting the following constants. You | PrincipalEntityAttribute | the attribute holding the unique identifier of an authenticated user | | `Name` | | PrincipalIdPAttribute | the IdP claim which is the unique identifier of an authenticated user | | `sub` | | AllowcreateUsers | allow to create users in the application | *optional* | `True` | -| Userrole | the role which will be assigned to newly created users | *optional* - Default Userrole is assigned only at user creation
      - User updates do not change the default role
      - No bulk update for existing users when the default userrole changes | `User` | -| UserType | assign usertype to the created users | *optional* | `Internal` | +| Userrole | the role which will be assigned to newly created users | *optional* - The Userrole is assigned only at user creation and remains unchanged even when the user's details are updated
      - No bulk update for existing users when the default userrole changes | `User` | +| UserType | assign user type to the created users | *optional* | `Internal` | | CustomUserProvisioning | a custom microflow to use for user provisioning | *optional* – in the form `modulename.microflowname` – the microflow name must begin with the string `UC_CustomProvisioning` | `Mymodule.UC_CustomProvisioning` | #### Custom User Provisioning at Runtime{#custom-provisioning-rt} @@ -553,8 +560,8 @@ You can set up custom user provisioning once your app is running using the `OIDC * **The attribute where the user principal is stored** – unique identifier associated with an authenticated user. * **Allow the module to create users** – this enables the module to create users based on user provisioning and attribute mapping configurations. When disabled, it will still update existing users. However, for new users, it will display an exception message stating that the login action was successful but no user has been configured. * By default, the value is set to ***Yes***. - * **User role** – the role which will be assigned to newly created users. You can select one default user role. If you need additional user roles, use Access Token Parsing microflow to assign multiple roles. - * **User Type** – this allows you to configure end-users of your application as internal or external. + * **Default Userrole** – the role assigned to newly created users and remains unchanged even when the user's details are updated. You can select one default user role. To assign additional roles, use the Access Token Parsing Microflow. If the Access Token Processing Microflow is selected, OIDC verifies the updated default role configuration and applies any changes to the user's role. Note that, bulk updates for existing users are not automated when the default role configuration is changed. + * **User Type** – this allows you to configure end-users of your application as internal or external. It is created upon the creation of the user and updated each time the user logs in. * By default, the value is set to ***Internal***. 5. Under **Attribute Mapping**, for each piece of information you want to add to your custom user entity, select an **IdP Attribute** (claim) and specify the **Configured Entity Attribute** where you want to store the information. diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/sap/sap-event-mesh-connector.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/sap/sap-event-mesh-connector.md index 53e9a6eb951..7dbc725f929 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/sap/sap-event-mesh-connector.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/sap/sap-event-mesh-connector.md @@ -65,7 +65,7 @@ To help you work with the SAP Event Mesh connector, the following sections of th ### Domain Model {#domain-model} -The domain model is a data model that describes the information in your application domain in an abstract way. For more information, see [Domain Model](/refguide/domain-model/). +The domain model is a data model that describes the information in your application domain in an abstract way. For more information, see [Data in the Domain Model](/refguide/domain-model/). The entities in the table below describe all generalizations. These are reused by the different models for the specific microflow activities or for storing connection details. diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/sap/sap-odata-connector.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/sap/sap-odata-connector.md index 49bf02ef923..ffcd47ca274 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/sap/sap-odata-connector.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/sap/sap-odata-connector.md @@ -778,7 +778,7 @@ This documentation describes two different domain models. 2. The OData Connector for SAP solutions Domain Model – this contains entities which are used by the OData Connector for SAP solutions itself: for example, to construct the request which needs to be sent to the OData service. A description of this domain model is included for completeness in the section [OData Connector for SAP Solutions Domain Model](#ConnectorDM) -For more information on domain models, see [Domain Model](/refguide/domain-model/). +For more information on domain models, see [Data in the Domain Model](/refguide/domain-model/). #### SAP Service Domain Model @@ -868,7 +868,7 @@ This domain model is part of the OData Connector for SAP solutions module and ca * [Attributes](/refguide/attributes/) * [Data Types](/refguide/data-types/) -* [Domain Model](/refguide/domain-model/) +* [Data in the Domain Model](/refguide/domain-model/) * [Entities](/refguide/entities/) * [SAP Cloud Connector](/developerportal/deploy/sap-cloud-platform/sap-cloud-connector/) * [SAP Help Portal](https://help.sap.com) diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/scim.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/scim.md index 79888b256c7..adfa10283ec 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/scim.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/scim.md @@ -8,9 +8,9 @@ description: "Describes the configuration and usage of the SCIM module, which is ## Introduction -The [SCIM](https://marketplace.mendix.com/link/component/229630) module facilitates integration with your IdP to create (pre-provision) selected users in your application as soon as they are created in the IdP, and deactivates them when they are removed or deactivated in the IdP. +The [SCIM](https://marketplace.mendix.com/link/component/229630) module facilitates integration with your IdP to create (pre-provision) selected users in your application as soon as they are created in the IdP. It deactivates them when they are removed or deactivated in the IdP. -SCIM is an abbreviation for System for Cross-domain Identity Management; a protocol that is supported by most major IdP technologies, such as Entra ID (formerly known as Azure AD), Okta, Auth0, etc. For more information, see the [SCIM protocol](https://scim.cloud/). +SCIM is an abbreviation for System for Cross-domain Identity Management; a protocol supported by most major IdP technologies, such as Entra ID (formerly known as Azure AD), Okta, Auth0, etc. For more information, see the [SCIM protocol](https://scim.cloud/). The SCIM module allows you to integrate your app with the Joiner, Mover, Leaver (JML) process in your organization. It enables the assignment of tasks to users before their first login to the app. Additionally, based on the information in your IdP (for example, user groups), the SCIM module automatically creates and deactivates users in your app. This functionality helps you to control Mendix user licensing costs. @@ -26,7 +26,7 @@ Before you include the SCIM module in your app, you need to check if your IdP su * **Use user groups to control access to your app:** Entra ID helps you organize various groups based on their jobs and roles. To manage app access based on these groups, you can use the SCIM module. If someone changes their job or role and is no longer part of a group that allows access to the app, the SCIM module automatically deactivates the user in the app. Even if the user still has an active Entra ID account, it becomes inactive in your app. This way, you can also save on licensing costs. -* **Update local user profile:** Changes in personal details of your employees, such as email address or username modifications due to life events like marriage, are synchronized between the local user profile and Entra ID through the SCIM module. +* **Update local user profile:** Changes in the personal details of your employees, such as email address or username modifications due to life events like marriage, are synchronized between the local user profile and Entra ID through the SCIM module. * **B2E vs. B2C apps:** Many organizations use a common Identity Provider, such as Entra ID in Microsoft’s Office 365 suite, to centralize employee accounts. If you are building apps for employees (Business-to-Employee or B2E), connecting them with Entra ID is a common and easy choice. As an app developer, you can use OIDC SSO or SAML for Single Sign-On and the SCIM module for managing users. For apps designed for customers (Business-to-Customer or B2C), the use of the SCIM module may not be as obvious. If your organization uses a third-party solution, such as Entra ID to handle customer accounts, you can also use the SCIM module for that. @@ -74,7 +74,7 @@ This section provides clarity on the extent to which the SCIM module supports th * The SCIM module is based on version 2.0 of the SCIM protocol, as specified in [RFC 7642](https://datatracker.ietf.org/doc/html/rfc7642), [7643](https://datatracker.ietf.org/doc/html/rfc7643), and [7644](https://datatracker.ietf.org/doc/html/rfc7644). -* The SCIM module is a server-side implementation of the SCIM protocol; external systems act as a SCIM client when interacting with your app. +* The SCIM module is a server-side implementation of the SCIM protocol; external systems act as SCIM clients when interacting with your app. * The supported features align with the requirements for integration with Entra ID. @@ -118,9 +118,22 @@ It is necessary to include the following Marketplace modules in your app: * [Community Commons](https://marketplace.mendix.com/link/component/170) – see [Community Commons](/appstore/modules/community-commons-function-library/) documentation -* [User Commons](https://marketplace.mendix.com/link/component/223053) module - Install and configure the User Commons module to support user provisioning and deactivation of user +* [User Commons](https://marketplace.mendix.com/link/component/223053) module - install and configure the User Commons module to support user provisioning and deactivation of user -* [Mx Model Reflection](https://marketplace.mendix.com/link/component/69) module - Install and configure the [Mx Model Reflection](/appstore/modules/model-reflection/) module +* [Mx Model Reflection](https://marketplace.mendix.com/link/component/69) module - install and configure the [Mx Model Reflection](/appstore/modules/model-reflection/) module + +## Upgrading the SCIM Module + +This section provides an overview of updates for the SCIM and UserCommons modules across different versions. It includes several key updates to ensure a smooth transition while migrating to higher module versions. + +{{% alert color="info" %}} +When upgrading to version 2.0.0 of the SCIM module, ensure you are also using version 2.0.0 of the UserCommons module. +{{% /alert %}} + +| Mendix Version | SCIM Module Version | UserCommons Version | SCIM Information| +| --- | --- | --- | --- | +| 10.12.10 and above | 2.0.0 | 2.0.0 | SCIM module is ready for the React client. | +| 9.24.2 and above | 1.0.2 | 1.0.2 | – | ## Configuration @@ -169,13 +182,13 @@ Ideally, both SCIM and SSO modules should utilize the same immutable user identi This section provides reference information about the attribute mapping applied by the default user provisioning flow in the SCIM module. User-identifying attributes in SCIM are compared with those in SSO modules. -If you wish to deviate from this default attribute mapping, you can create your mapping. To do this, select an **IdP Attribute** (claim) and specify the **Configured Entity Attribute**. Ensure that the same configured entity attribute should not be mapped with another IdP attribute. +If you wish to deviate from this default attribute mapping, you can create your own mapping. To do this, select an **IdP Attribute** (claim) and specify the **Configured Entity Attribute**. Ensure that the same configured entity attribute should not be mapped with another IdP attribute. For reference, the table below gives an overview of attribute mapping when using the defaults in both Entra ID and the default microflow in the SCIM module. This information may be helpful to see where a custom user provisioning flow differs from the defaults. | **SCIM payload** (IdP Attribute) | **Configured Entity Attribute** | **Typical value with Okta** (IdP Attribute) | **Typical value with EntraID** (IdP Attribute) | | --- | --- | --- | --- | -| externalID | Name | 00ctc4pufr85d7 | ObjectID (configured, non default) For example, `550e8400-e29b-41d4-a716-446655440000` | +| externalID | Name | 00ctc4pufr85d7 | ObjectID (configured, non-default) For example, `550e8400-e29b-41d4-a716-446655440000` | | familyName| lastname | Doe | Doe John | | givenName| firstname | John | | | emails| Email | `john.doe@companyA.com` | `johndoe@companyA.com` | @@ -183,7 +196,7 @@ For reference, the table below gives an overview of attribute mapping when using | active| Active | true | true | {{% alert color="info" %}} - In the SCIM protocol, you can configure the `object ID` to identify a user for Microsoft. It is used as the value for the `externalID` claim in SCIM payloads by default. That means, use the `oid` claim as user identifier to introduce SCIM. For more information, see the [Guidance on User Identifier](/appstore/modules/oidc/#guidance-user-identifier) section of the *OIDC SSO*. + In the SCIM protocol, you can configure the `object ID` to identify a user for Microsoft. It is used as the value for the `externalID` claim in SCIM payloads by default. That means, use the `oid` claim as a user identifier to introduce SCIM. For more information, see the [Guidance on User Identifier](/appstore/modules/oidc/#guidance-user-identifier) section of the *OIDC SSO*. {{% /alert %}} You can configure the `objectId` in SCIM using the steps below: @@ -196,10 +209,10 @@ The table below compares the primary user-identifying attribute used by SCIM (i. | **IdP** | **SSO Module** | **Remark** | | --- | --- | --- | -| Okta | OIDC SSO | SCIM.externalID and OIDC.sub contains same value. | -| EntraID | OIDC SSO | SCIM.externalID and OIDC.oid contains same value. | -| Okta | SAML | SCIM.externalID and SAML.Use Name ID contains same value.
      Note: Configure Application username to Custom with user.getInternalProperty("id"). | -| EntraID | SAML | SCIM.externalID and SAML.Use Name ID contains same value.
      Note: Map Unique User Identifier as user.objectid in SSO Configuration. | +| Okta | OIDC SSO | SCIM.externalID and OIDC.sub contain the same value. | +| EntraID | OIDC SSO | SCIM.externalID and OIDC.oid contain the same value. | +| Okta | SAML | SCIM.externalID and SAML.Use Name ID contain the same value.
      Note: Configure Application username to Custom with user.getInternalProperty("id"). | +| EntraID | SAML | SCIM.externalID and SAML.Use Name ID contain the same value.
      Note: Map Unique User Identifier as user.objectid in SSO Configuration. | ### Runtime Configuration @@ -207,7 +220,7 @@ The table below compares the primary user-identifying attribute used by SCIM (i. Ensure that only legitimate SCIM clients can interact with your app via the SCIM module. You need to enable your SCIM client to authenticate itself with your app. The SCIM module currently supports using an **API Key** (token) for the authentication. You can generate an API Key to download or upload one into your SCIM client during [Deploy Time Configuration](#deploy-time). This can be done using two options below: -1. Using SCIM module to generate API key +1. Using SCIM module to generate an API key To generate and download an API key, click **New** on the **IdPConfiguration** page and configure the fields below: @@ -221,7 +234,7 @@ Ensure that only legitimate SCIM clients can interact with your app via the SCIM Another option is to generate an API key yourself and submit it to the SCIM module via a SCIM constant. To do this, set the constant `SCIM.Default_APIKey_Value` in the **Acceptance Environment Details** of the Mendix application environment. This approach enables you to manage API security without requiring a local administrator to log in to your application. It provides the flexibility to use the same API key for multiple applications using the SCIM module. -{{% alert color="info" %}}Starting from UserCommons version 2.0.0, If the IdP does not specify the time zone and language, these settings will be set according to default **App Settings** of your app. If no default is available, they remain unset. Existing users retain their previously set values.{{% /alert %}} +{{% alert color="info" %}}Starting from UserCommons version 2.0.0, If the IdP does not specify the time zone and language, these settings will be set according to the default **App Settings** of your app. If no default is available, they remain unset. Existing users retain their previously set values.{{% /alert %}} #### User Provisioning @@ -231,8 +244,8 @@ In the **Provisioning** tab of the SCIM server configuration, you need to config * **The attribute where the user principal is stored** (primary attribute): unique identifier associated with an authenticated user. * **Allow the module to create users**: this enables the module to create users based on user provisioning and attribute mapping configurations. * By default, the value is set to ***Yes***. -* **Default Userrole**: the role that will be assigned to newly created users by default. -* **User Type**: this allows you to configure end-users of your application as internal or external. +* **Default Userrole** – the role assigned to newly created users and remains unchanged even when the user's details are updated. You can select one default user role. To assign additional roles, use the Access Token Parsing Microflow. If the Access Token Processing Microflow is selected, OIDC verifies the updated default role configuration and applies any changes to the user's role. Note that, bulk updates for existing users are not automated when the default role configuration is changed. +* **User Type**: this allows you to configure end-users of your application as internal or external. It is created when the user is created and updated whenever user details, such as name, email, or active status, are changed. * By default, the value is set to ***Internal***. * **Attribute Mapping**: under **Attribute Mapping**, select an **IdP Attribute** (claim) for each piece of information you want to add to your custom user entity. Specify the **Configured Entity Attribute** where you want to store the information. @@ -259,7 +272,7 @@ This selection can be blank if you do not want to add custom logic. Save this co Starting from version 1.0.2, you can configure the SCIM module using app [constants](https://docs.mendix.com/refguide/constants/) instead of the app administration pages. As an app developer that uses SCIM, you can set default values. These values can be overridden at deploy-time using the app constants. -To enable app constants for configuring the SCIM module, set your app to run the after startup microflow in the OIDC module (SCIM.ASU_StartUp). +To enable app constants for configuring the SCIM module, set your app to run the after-startup microflow in the OIDC module (`SCIM.ASU_StartUp`). Use the following security best practices when setting up your constants: @@ -268,7 +281,7 @@ Use the following security best practices when setting up your constants: #### Customizing Default Deploy-time Configuration -The table below lists all supported constants. Mandatory constants must be set at deploy-time, while optional constants can typically be set at design-time but, if necessary, can be overridden at deploy-time. +The table below lists all supported constants. Mandatory constants must be set at deploy-time, while optional constants can typically be set at design time but, if necessary, can be overridden at deploy-time. | Constants | Description | Mandatory/Optional | Default Value | | --- | --- | --- | --- | @@ -290,7 +303,7 @@ The table below lists all supported constants. Mandatory constants must be set a Setting up connectivity with an IdP varies depending on the vendor. The following subsection shows the configuration for the Microsoft Entra ID. -1. On the Microsoft Entra ID tenant, select **Enterprise Application** and create SCIM client in it. +1. On the Microsoft Entra ID tenant, select **Enterprise Application** and create a SCIM client in it. 2. Change the **Provisioning Mode** to **Automatic**. {{< figure src="/attachments/appstore/platform-supported-content/modules/scim/provisioning_revised.png" class="no-border" >}} @@ -321,7 +334,7 @@ Once you have your SCIM module configured, you can test it by creating, updating The test case below is defined for the scope of **Sync only assigned user and groups** and validation of provisioning status in the SCIM server. -* Create a user with the default `userPrincipalName`. Optionally, you may choose to change the user Mappings in the Microsoft Entra ID. You can change Entra ID attribute from `userPrincipalName` to another attribute. For example, `mailNickName`. +* Create a user with the default `userPrincipalName`. Optionally, you may choose to change the user Mappings in the Microsoft Entra ID. You can change the Entra ID attribute from `userPrincipalName` to another attribute. For example, `mailNickName`. * Update a user in the Microsoft Entra ID. For Example, add/update work email, last name, etc. * Delete a user in the Microsoft Entra ID. @@ -334,7 +347,7 @@ The below options provide you with the choice of user selection during on-demand * **View all users**: select users from the Entra ID {{% alert color="info" %}} -Your app may have multiple tenants in the Entra ID. Users created from any of the Entra ID tenants will have a same domain in their `user_principle_name`. This results in an active user in your app which you have not assigned in your application in Entra ID. +Your app may have multiple tenants in the Entra ID. Users created from any of the Entra ID tenants will have the same domain in their `user_principle_name`. This results in an active user in your app which you have not assigned in your application in Entra ID. {{% /alert %}} ### Troubleshooting diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/snowflake/rbac/snowflake-sso.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/snowflake/rbac/snowflake-sso.md index 8051e9a54be..b9dc799d238 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/snowflake/rbac/snowflake-sso.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/snowflake/rbac/snowflake-sso.md @@ -18,7 +18,10 @@ You can integrate between Snowflake and Mendix applications by using OAUTH provi ### Prerequisites -To enable SSO-based RBAC for your Mendix app, you must first install and configure the [OIDC SSO module](/appstore/modules/oidc/). +To enable SSO-based RBAC for your Mendix app, you must install and configure the following prerequisites: +* [OIDC SSO module](/appstore/modules/oidc/). +* [Snowflake REST SQL Connector](https://docs.mendix.com/appstore/connectors/snowflake/snowflake-rest-sql/) + ## Configuring Azure Entra ID @@ -149,5 +152,4 @@ To configure your Mendix application, perform the following steps: 11. Configure the **UserProvisioning** tab as shown in the following figure: {{< figure src="/attachments/appstore/platform-supported-content/modules/snowflake-sso/provisioning.png" >}} - -12. Run the application and log in with the user that you use in Snowflake and Azure. +12. Run the application and log in with the user that you use in Snowflake and Azure. diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/snowflake/snowflake-rest-sql.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/snowflake/snowflake-rest-sql.md index 81b0db6a2e3..438c7ce7975 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/snowflake/snowflake-rest-sql.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/snowflake/snowflake-rest-sql.md @@ -14,11 +14,22 @@ The [Snowflake REST SQL connector](https://marketplace.mendix.com/link/component The Snowflake REST SQL connector provides a way to first setup key-pair authentication with an RSA key pair according to PKCS #8 standard, and then execute SQL statements on Snowflake via a REST call from within your Mendix application. These statements allow you to perform the following tasks: -* Read data from Snowflake -* Write data to Snowflake -* Trigger [Snowflake Cortex ML functions](https://docs.snowflake.com/en/guides-overview-ml-functions) -* Use [Snowflake Cortex LLM functions](https://docs.snowflake.com/en/user-guide/snowflake-cortex/llm-functions) -* Use [Snowflake Cortex Analyst](https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-analyst) +* Read data from Snowflake. +* Write data to Snowflake. +* Trigger [Snowflake Cortex ML functions](https://docs.snowflake.com/en/guides-overview-ml-functions): + * [Forecasting](https://docs.snowflake.com/en/user-guide/ml-functions/forecasting) - Predicts future metric values from past trends in time-series data. + * [Anomaly Detection](https://docs.snowflake.com/en/user-guide/ml-functions/anomaly-detection) - Flags metric values that differ from typical expectations. + * [CLASSIFY_TEXT](https://docs.snowflake.com/en/sql-reference/functions/classify_text-snowflake-cortex) - Given a piece of text, classifies it into one of the categories that you define. + * [EXTRACT_ANSWER](https://docs.snowflake.com/en/sql-reference/functions/extract_answer-snowflake-cortex) - Given a question and unstructured data, returns the answer to the question if it can be found in the data. + * [PARSE_DOCUMENT](https://docs.snowflake.com/en/sql-reference/functions/parse_document-snowflake-cortex) - Given an internal or external stage with documents, returns an object that contains extracted text content using OCR mode, or the extracted text and layout elements using LAYOUT mode. + * [SENTIMENT](https://docs.snowflake.com/en/sql-reference/functions/sentiment-snowflake-cortex) - Returns a sentiment score, from -1 to 1, representing the detected positive or negative sentiment of the given text. + * [SUMMARIZE](https://docs.snowflake.com/en/sql-reference/functions/summarize-snowflake-cortex) - Returns a summary of the given text. + * [TRANSLATE](https://docs.snowflake.com/en/sql-reference/functions/translate-snowflake-cortex) - Translates given text from any supported language to any other. + * [EMBED_TEXT_768](https://docs.snowflake.com/en/sql-reference/functions/embed_text-snowflake-cortex) - Given a piece of text, returns a vector embedding of 768 dimensions that represents that text. + * [EMBED_TEXT_1024](https://docs.snowflake.com/en/sql-reference/functions/embed_text_1024-snowflake-cortex) - Given a piece of text, returns a vector embedding of 1024 dimensions that represents that text. +* Use [Snowflake Cortex Analyst](https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-analyst) - This Snowflake Cortex feature is used to get information/insights out of structured data sets using natural language instead of sql. + +For more use cases and examples for [Snowflake Cortex LLM functions](https://docs.snowflake.com/en/user-guide/snowflake-cortex/llm-functions), written by the Head of Snowflake Tech Consulting, see [Karthik S Raman's Medium profile](https://medium.com/@karthiksraman). The current version of the connector supports the following: @@ -36,7 +47,7 @@ To use the Snowflake REST SQL connector, you must also install and configure the * [Community Commons](https://marketplace.mendix.com/link/component/170) - This module is a required dependency for the Snowflake REST SQL connector. * [Encryption](https://marketplace.mendix.com/link/component/1011) - This module is a required dependency for the Snowflake REST SQL connector. The EncryptionKey constant must be set up in your application settings. -* [GenAI Commons](https://marketplace.mendix.com/link/component/227933)- This module is a required dependency for the Snowflake Cortex Analyst. +* GenAI Commons module from the [GenAI For Mendix](https://marketplace.mendix.com/link/component/227931) bundle - This module is a required dependency for the Snowflake Cortex Analyst. ### Licensing and Cost @@ -127,7 +138,7 @@ To help you work with the Snowflake REST SQL connector, the following sections o ### Domain Model {#domain-model} -The domain model is a data model that describes the information in your application domain in an abstract way. For more information, see [Domain Model](/refguide/domain-model/). +The domain model is a data model that describes the information in your application domain in an abstract way. For more information, see [Data in the Domain Model](/refguide/domain-model/). #### ConnectionDetails {#connection-details} diff --git a/content/en/docs/appstore/use-content/platform-supported-content/modules/teamcenter-extension.md b/content/en/docs/appstore/use-content/platform-supported-content/modules/teamcenter-extension.md index 056e2f750de..d9a3b4fd1a6 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/modules/teamcenter-extension.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/modules/teamcenter-extension.md @@ -64,19 +64,15 @@ Follow the instructions in [How to Use Marketplace Content](/appstore/use-conten ### Actions -#### Search Item Revisions from Teamcenter {#getitemrevision} +#### Search Item Revisions {#getitemrevision} The `Search Item Revisions` action allows you to generate the domain model and microflow to search for and retrieve `ItemRevisions` or its specialization. The resulting microflow implements the saved query `Item Revision...` from Teamcenter. -#### Get Item Revisions from Teamcenter {#getitemrevision} - -The `Search Item Revisions` action allows you to generate the domain model and microflow to search for and retrieve `ItemRevisions` or its specialization. The resulting microflow implements the saved query `Item Revision...` from Teamcenter. - -#### Create Item and Item Revision {#createitem-and-itemrevision} +#### Create Item With Item Revision {#createitem-and-itemrevision} The `Create Item and Item Revision` action allows you to configure and generate the domain model and microflow to create an Item with `ItemRevision` or its specializations in Teamcenter. The resulting microflow implements the `Create Object and Update Properties` actions from the Teamcenter Connector. With the `Create Object` action, the `Item` and `ItemRevision` get created in Teamcenter, setting the Teamcenter properties that need to be set upon creation. With the `Update Properties` action, the remaining properties are updated in Teamcenter. -#### Update Item and Item Revision {#updateitem-and-itemrevision} +#### Update Item With Item Revision {#updateitem-and-itemrevision} The `Update Item and Item Revision` action allows you to generate the domain model and microflow to update an `Item` with `ItemRevision` or their specializations in Teamcenter. The resulting microflows implements the `Update Properties` action from the Teamcenter Connector. @@ -88,7 +84,7 @@ The `Revise Item and Item Revision` allows you to generate the domain model and The `Search Datasets` allows you to generate the domain model and microflow to search for and retrieve `Datasets` or its specialization. The resulting microflow implements the saved query `Datasets` from Teamcenter. -#### Get Datasets from Item Revision {#getdatasetsfromitemrevision} +#### Get Datasets for Item Revision {#getdatasetsfromitemrevision} The `Get Datasets from Item Revision` action allows you to generate the domain model and microflow to retrieve datasets for an Item Revision and subsequently download files inside the dataset. @@ -96,9 +92,9 @@ The `Get Datasets from Item Revision` action allows you to generate the domain m The 'Attach Datasets to Item Revision' action allows you to generate a domain model and microflow which creates and attaches a Teamcenter dataset (or its specializations) with a file document to an Item Revision in Teamcenter. The resulting microflow implements the Upload file, Create relation, and Get properties actions from the `TcConnector` module. -#### Get Workspace Objects {#getworkspaceobjects} +#### Search Workspace Objects {#getworkspaceobjects} -The `Get Workspace Objects` action allows you to configure and generate the domain model and microflow to search for and retrieve Workspace Objects or their specialization from Teamcenter. This action implements the saved query `General..` from Teamcenter. +The `Search Workspace Objects` action allows you to configure and generate the domain model and microflow to search for and retrieve Workspace Objects or their specialization from Teamcenter. This action implements the saved query `General..` from Teamcenter. #### Get Structures diff --git a/content/en/docs/appstore/use-content/platform-supported-content/services/business-events.md b/content/en/docs/appstore/use-content/platform-supported-content/services/business-events.md index 3846c9a7496..8ecb8709669 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/services/business-events.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/services/business-events.md @@ -229,7 +229,7 @@ Within Mendix Cloud, a Mendix Event Broker is available for easy application dep Events are placed in channels, sometimes called topics. Apps subscribed to a channel will receive events published to this channel. -Events published by Free Apps are published to one shared company channel on a multi-tenant free Event Broker. Events published by apps running on licensed nodes are published to their own channels on the company Event Broker. These channels, implemented as topics on Kafka, are automatically created upon deployment of the app publishing the events. +Events published by Free Apps are published to one shared company channel on a multitenant free Event Broker. Events published by apps running on licensed nodes are published to their own channels on the company Event Broker. These channels, implemented as topics on Kafka, are automatically created upon deployment of the app publishing the events. For information on setting topics and channels for your own Kafka clusters ("Bring Your Own Kafka"), see [Configuring Deployment Constants for Own Kafka Cluster](#deployment-constants). @@ -248,7 +248,7 @@ This is implemented as follows: Business Events offers four different deployment models: * Deploying locally with the [Local Setup Tool](https://github.com/mendix/event-broker-tools) -* Free apps using a free multi-tenant event broker +* Free apps using a free multitenant event broker * Production apps using the [Mendix Event Broker](#mendix-event-broker) running in Mendix Cloud * Apps running their own Kafka cluster (bring your own Kafka) diff --git a/content/en/docs/appstore/use-content/platform-supported-content/services/event-broker.md b/content/en/docs/appstore/use-content/platform-supported-content/services/event-broker.md index 14a5a248546..1e185a8bba0 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/services/event-broker.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/services/event-broker.md @@ -57,7 +57,7 @@ See [Enabling the Mendix Event Broker Service](#enable-mx-event-broker) for more Events are placed in channels, sometimes called topics. Apps subscribed to a channel will receive events published to this channel. -Events published by Free Apps are published to one shared company channel on a multi-tenant free Event Broker. Events published by apps running on licensed nodes are published to their own channels on the company Event Broker. These channels, implemented as topics on Kafka, are automatically created upon deployment of the app publishing the events. +Events published by Free Apps are published to one shared company channel on a multitenant free Event Broker. Events published by apps running on licensed nodes are published to their own channels on the company Event Broker. These channels, implemented as topics on Kafka, are automatically created upon deployment of the app publishing the events. #### Event Access Control {#access-control} diff --git a/content/en/docs/appstore/use-content/platform-supported-content/services/use-sap-model-creator.md b/content/en/docs/appstore/use-content/platform-supported-content/services/use-sap-model-creator.md index 0313edd4290..bf7c53980ed 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/services/use-sap-model-creator.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/services/use-sap-model-creator.md @@ -37,7 +37,7 @@ The Data Model module contains up to four resources which help to consume the OD #### Domain Model -Each Mendix SAP data model has a domain model that describes the information in the OData service. The domain model consists of entities and their relations represented by associations. For more information, see [Domain Model](/refguide/domain-model/). +Each Mendix SAP data model has a domain model that describes the information in the OData service. The domain model consists of entities and their relations represented by associations. For more information, see [Domain Model]. {{< figure src="/attachments/appstore/platform-supported-content/services/sap-model-creator/sap-service-example.png" class="no-border" >}} diff --git a/content/en/docs/appstore/use-content/platform-supported-content/widgets/combobox.md b/content/en/docs/appstore/use-content/platform-supported-content/widgets/combobox.md index d648c08dd55..f9615d832a6 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/widgets/combobox.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/widgets/combobox.md @@ -35,6 +35,7 @@ Properties: * [General](#general) * [Events](#events) * [Accessibility](#accessibility) +* [Advanced](#advanced) * [Common](#common) Styling: @@ -81,7 +82,6 @@ The static source type can be used to set the value of a string attribute with m The **General** section allows you to configure general behavior and captions for the combo box. The following configurations are available: * **Placeholder text** – captions that will be displayed when there is no data being selected -* **Filter type** – allows the user to type into the input and filter displayable options on the combo box * **No options text** – captions that will be used when filter results are empty, or shown when there is no data displayed in the combo box's options * **Clearable** – if enabled, this allows selected data to be cleared all at once * **Custom content** – allows custom widgets to be displayed in the combo box instead of normal text values @@ -128,6 +128,34 @@ The following configurations are available: The **Accessibility** tab allows you to configure settings for combo box accessibility features. +### Advanced Tab {#advanced} + +The **Advanced** tab allows you to configure settings for features that is beyond the normal configurations. + +* **Performance group** + + * **Lazy loading** – allows the user to configure when to load the combo box's options data. Set it to **yes** to ensure that the data is not loaded until the user opens the options menu. + * **Loading type** – allows the user to configure the loading animation of a combo box. + +{{% alert color="info" %}} +Lazy loading always fetches 100 data items for each request. Pagination is triggered when the user scrolls to the bottom of the options menu. +{{% /alert %}} + +{{% alert color="warning" %}} +Using lazy loading with microflow or nanoflow data sources can result in performance issues if the microflow retrieves more than 100 items. Because of that, it is not currently recommended to use lazy loading with microflow or nanoflow data sources. This issue will be fixed in a future release. +{{% /alert %}} + +* **Multiple selection** + This setting is only applicable for combo boxes with multiple item selections. + + * **Selected items sorting** – allows user to configure the sorting mechanism to display the selected items. + * **Caption** - if selected, this settings displays selected items based on their captions, regardless of user's selected sequence. + * **Default** - if selected, this settings does not do any sorting on the client side. Instead, it keeps the sorting from the saved values given from datasource. + If the target attribute value is set (that is, if the multiple selection is set to **association**) the data will already sorted based on values from the API and combobox will display it as it is. Otherwise, if there is no target attribute (that is, if the multiple selection is set to **database**) the selected items are displayed based on user's selected sequence. + +* **Filter** + * **Filter type** – allows the user to type into the input and filter displayable options on the combo box. + ### Common Tab {#common} For more information, see [Common Section](/refguide/common-widget-properties/#common-properties) in *Properties Common in the Page Editor*. diff --git a/content/en/docs/appstore/use-content/platform-supported-content/widgets/popup-menu.md b/content/en/docs/appstore/use-content/platform-supported-content/widgets/popup-menu.md index 8f1e2a5fb92..61b40411fbe 100644 --- a/content/en/docs/appstore/use-content/platform-supported-content/widgets/popup-menu.md +++ b/content/en/docs/appstore/use-content/platform-supported-content/widgets/popup-menu.md @@ -44,8 +44,8 @@ Other main properties of the widget are as follows: * Default: **Click** * **Menu position** – determines the location of a visible menu relative to the trigger area * Default: **Bottom** -* **Custom visualization** – determines whether menu items can be composed of text or widgets - * Default: **No** - * Note that the on click action should still be configured on the menu items and not internal widgets +* **Clipping strategy** – determines the relative positioning of floating elements on the page. + * **Absolute** - positions the floating element relative to its nearest positioned ancestor. + * **Fixed** - positions the floating element relative to the viewport. It breaks the element out of any clipping ancestor. -If you want to use dynamic content, make sure to wrap the widget in a [data view](/refguide/data-view/) and set **Custom visualization** to **Yes**. +If you want to use dynamic content, make sure to wrap the widget in a [data view](/refguide/data-view/) and set **Enable advanced options** to **Yes**. diff --git a/content/en/docs/community-tools/contribute-to-a-github-repository.md b/content/en/docs/community-tools/contribute-to-a-github-repository.md index 149295bbbf2..a1cdd20b486 100644 --- a/content/en/docs/community-tools/contribute-to-a-github-repository.md +++ b/content/en/docs/community-tools/contribute-to-a-github-repository.md @@ -1,7 +1,7 @@ --- title: "Contribute to a GitHub Repo" url: /community-tools/contribute-to-a-github-repository/ -weight: 6 +weight: 7 description: "Describes how to contribute to a Mendix GitHub Repository according to Mendix guidelines." aliases: - /developerportal/community-tools/contribute-to-a-github-repository/ diff --git a/content/en/docs/community-tools/contribute-to-mendix-docs/_index.md b/content/en/docs/community-tools/contribute-to-mendix-docs/_index.md index bb2b3059d9b..abccf4828c5 100644 --- a/content/en/docs/community-tools/contribute-to-mendix-docs/_index.md +++ b/content/en/docs/community-tools/contribute-to-mendix-docs/_index.md @@ -1,7 +1,7 @@ --- title: "Contribute to Mendix Docs" url: /community-tools/contribute-to-mendix-docs/ -weight: 10 +weight: 70 description: "Describes how to add and edit Mendix documentation as a community member." aliases: - /developerportal/community-tools/contribute-to-mendix-docs/ diff --git a/content/en/docs/community-tools/mendix-exams/_index.md b/content/en/docs/community-tools/mendix-exams/_index.md new file mode 100644 index 00000000000..b986ae2fdac --- /dev/null +++ b/content/en/docs/community-tools/mendix-exams/_index.md @@ -0,0 +1,51 @@ +--- +title: "Purchase Mendix Exam Seats" +linktitle: "Mendix Exam Seats" +url: /community-tools/purchasing-exams/ +weight: 60 +description: "Describes how to make a bulk order for exam seats and introduces the documents in this category." +no_list: false +description_list: true +--- + +## Introduction + +In the Mendix Academy there are a number of [certifications](https://academy.mendix.com/link/certifications) you can take to demonstrate your Mendix abilities. + +### Booking Yourself a Seat + +You can register yourself for the certification exams online by following the **Get Certified** link for each certification. + +#### Free Certification + +For free certification, for example the [Rapid Developer Certification](https://academy.mendix.com/link/certifications/23/rapid), you just need to agree to the terms and you will be sent an email with instructions on how to take the exam. You will also be able to continue directly to take the exam if you want to. + +You have 30 days to start the exam. When you start, you will be able to choose one of the supported languages. + +#### Paid Certification + +For paid certification, for example the [Intermediate Developer Certification](https://academy.mendix.com/link/certifications/22/intermediate) you will need to arrange payment. Do the following: + +1. Fill in the **Billing information**. +1. Review the **Payment Summary** and enter **Voucher** information if appropriate. The voucher details may be prefilled, depending on your organization. +1. Click **Run System Test** to ensure your system is compatible with the exam platform. +1. Confirm that you understand the terms and that your system is capable of supporting the exam. +1. Click **Register**. + +You will be taken to the start page of the exam, and will also receive a confirmation email with details of the exam you have purchased. + +You have 30 days to start the exam. When you start, you will be able to choose one of the supported languages. + +### Booking for Other People + +You can also order exam seats for other people and place bulk orders for multiple Mendix certification exam seats for your organization. In this case, contact your CSM to get the order form or for more details. You can also contact Mendix Academy directly on [academy@mendix.com](mailto:academy@mendix.com). + +After receiving the order, Mendix assigns an exam admin to it. The exam admin is then responsible for overseeing the details of the order and allocating the purchased exam seats to individuals within your organization. + +{{% alert color="info" %}} +Exam admins will need to [sign up for a Mendix account](https://signup.mendix.com/link/signup) if they do not already have a Mendix account. +{{% /alert %}} + +See the documents below to learn how to manage the exam seats on your orders. + +## Documents in This Category diff --git a/content/en/docs/community-tools/mendix-exams/manage-exam-admins.md b/content/en/docs/community-tools/mendix-exams/manage-exam-admins.md new file mode 100644 index 00000000000..2dffa0c6963 --- /dev/null +++ b/content/en/docs/community-tools/mendix-exams/manage-exam-admins.md @@ -0,0 +1,52 @@ +--- +title: "Manage Exam Admins" +url: /community-tools/purchasing-exams/manage-exam-admins/ +weight: 20 +description: "Describes how to manage exam admins in an organization." +--- + +## Introduction + +Your organization can place bulk orders to purchase Mendix certification exam seats. When Mendix processes the order, an exam admin is designated for each order. + +As an exam admin, you can add exam admins to, or remove them from, an exam order. + +## Prerequisites + +All exam admins must have a Mendix account. + +To manage exam admins, you must also be an exam admin. If your name is associated with an order for exam seats, then you will be made an exam admin as part of the order fulfilment process. + +## Managing Exam Admins + +### Adding an Exam Admin + +To add an exam admin, do the following: + +1. In [Mendix Academy](https://academy.mendix.com/), go to the **Access Management** page. You can see a full list of exam admins. + + {{< figure src="/attachments/community-tools/order-exams-in-bulk/manage-exam-admins/access-management.png" >}} + +2. Click **Add Exam Admin** on the upper-right of the page. The **Add Exam Admin** dialog box opens. + +3. In the **User** field, enter the email addresses of the exam admins who you want to add. If you enter multiple email addresses, separate them by commas. + + {{< figure src="/attachments/community-tools/order-exams-in-bulk/manage-exam-admins/add-exam-admin.png" max-width=70% >}} + +4. Check any **Exam Orders** which you want to assign to the new exam admin. + +5. Click **Add**. + +The exam admins who are added will receive an email with a link that directs them to the [Overview](https://academy.mendix.com/link/examadmin) page for exam administration. + +### Removing an Exam Admin + +{{% alert color="info" %}} +You cannot remove an exam admin if they are the only admin for an order. Nor can you remove yourself as an exam admin. +{{% /alert %}} + +To remove an exam admin, do the following: + +1. In [Mendix Academy](https://academy.mendix.com/), go to the **Access Management** page. You can see a full list of exam admins. + +2. Click the remove ({{% icon name="trash-can" %}}) icon for the exam admin you want to remove. diff --git a/content/en/docs/community-tools/mendix-exams/manage-exam-seats.md b/content/en/docs/community-tools/mendix-exams/manage-exam-seats.md new file mode 100644 index 00000000000..322e0125911 --- /dev/null +++ b/content/en/docs/community-tools/mendix-exams/manage-exam-seats.md @@ -0,0 +1,70 @@ +--- +title: "Manage Exam Seats" +url: /community-tools/purchasing-exams/manage-exam-seats/ +weight: 10 +description: "Describes how an exam admin in an organization can manage exam seats." +--- + +## Introduction + +Your organization can place bulk orders to purchase Mendix certification exam seats. When Mendix processes the order, an exam admin is designated per order. + +Once the order is processed, the designated exam admin receives an email and notification to manage the order. The exam admin can oversee the details of the order and allocate the purchased exam seats to individuals within the organization. People who are allocated exam seats will be granted free access to take the exam. + +This how-to explains how you can manage exam seats as an exam admin. + +## Prerequisites + +To manage exam seats, you must have a Mendix account and be an exam admin. + +## Inviting Students to Take an Exam + +1. Go to the [Exam Administration Overview](https://academy.mendix.com/link/examadmin) page of Mendix Academy to administer exams. + + Under **Available Exams**, you can see the remaining seats for each order and exam type. + + {{< figure src="/attachments/community-tools/order-exams-in-bulk/manage-exam-seats/overview.png" >}} + +2. Click **Invite Student**. + + The **Add Student** dialog box opens. + +3. Enter the email addresses of the students you want to invite. If you enter multiple email addresses, separate them with commas. + +4. Click **Add to Invite**. + + You can add more students with the **Add More Students** button. + +5. Set an expiry date for the invitation. + + {{< figure src="/attachments/community-tools/order-exams-in-bulk/manage-exam-seats/expiry-date.png" >}} + + {{% alert color="info" %}}The student must register for the exam before the expiry date. If the student fails to register before the expiry day, the seat will added to the **Remaining Seats** and can be reassigned.{{% /alert %}} + +6. Click **Send Invites**. + + The students will receive an email with a link that redirects them to the exam registration page. + +The invitations are now visible under **Invited Students**. + +## Checking the Status of an Invitation + +In the **Invited Students** section, you can check the status of the invitations that have been sent. + +{{< figure src="/attachments/community-tools/order-exams-in-bulk/manage-exam-seats/invited-students.png" >}} + +An invitation can have one of the following statuses: + +* **NOT ACCEPTED YET**: The student has not accepted the invitation. You can still [remind the student](#remind-student) or [withdraw the invitation](#withdraw-invitation). +* **REGISTERED**: The student has registered but has not yet completed the exam. +* **UNDISCLOSED**: The student has taken the exam but has not shared the result. A student can choose not to share the result with the exam admin when they register for the exam. +* **CERTIFIED**: The student has passed the exam and is certified. +* **FAILED**: The student has taken the exam and failed. + +### Reminding Students to Accept an Invitation {#remind-student} + +If a student has not accepted the invitation, you can send a reminder email to encourage the student to register for the exam. To do so, click **Remind Student**. + +### Withdrawing an Invitation {#withdraw-invitation} + +You can withdraw an invitation that has not been accepted. To do so, click **Withdraw Invite**. diff --git a/content/en/docs/community-tools/oauth-scopes.md b/content/en/docs/community-tools/oauth-scopes.md index 7daf5f879fa..b51e68a74d0 100644 --- a/content/en/docs/community-tools/oauth-scopes.md +++ b/content/en/docs/community-tools/oauth-scopes.md @@ -1,7 +1,7 @@ --- title: "OAuth and Scopes" url: /community-tools/oauth-scopes/ -weight: 7 +weight: 8 description: "Describes OAuth, authorizations, and scopes as used by Mendix." #To update these screenshots, you can log in with credentials detailed in How to Update Screenshots Using Team Apps. aliases: diff --git a/content/en/docs/control-center/lead-mendix-implementation-your-organization.md b/content/en/docs/control-center/lead-mendix-implementation-your-organization.md index f82b49075a6..9fdcbb1f08d 100644 --- a/content/en/docs/control-center/lead-mendix-implementation-your-organization.md +++ b/content/en/docs/control-center/lead-mendix-implementation-your-organization.md @@ -617,7 +617,7 @@ Mendix applications can be deployed in different ways, mainly: 3. On-premise -**Mendix Cloud** is the default deployment option and has the advantage of being a fully integrated solution, with easy setting up and administrating. When developing your first application and if there are no specific (private) cloud constraints, it makes sense to choose the user friendly Mendix Cloud option. Within Mendix Cloud, there are options for multi-tenant cloud environments and single-tenant cloud environments. Deploying to Mendix Cloud gives you the shortest time-to-value. +**Mendix Cloud** is the default deployment option and has the advantage of being a fully integrated solution, with easy setting up and administrating. When developing your first application and if there are no specific (private) cloud constraints, it makes sense to choose the user friendly Mendix Cloud option. Within Mendix Cloud, there are options for multitenant cloud environments and single-tenant cloud environments. Deploying to Mendix Cloud gives you the shortest time-to-value. Mendix can also be deployed to any cloud platform which supports a version of Cloud Foundry. With **Mendix for Private Cloud**, you can choose the cloud provider of your preference, e.g. your own Azure or AWS infrastructures. If there already is access to an on-premise hosting environment, Mendix can also be deployed on-premise. diff --git a/content/en/docs/control-center/people/roles-permissions.md b/content/en/docs/control-center/people/roles-permissions.md index 8a203ee3960..ea3d2400ef0 100644 --- a/content/en/docs/control-center/people/roles-permissions.md +++ b/content/en/docs/control-center/people/roles-permissions.md @@ -8,63 +8,25 @@ no_list: true ## Introduction -On the **Roles & Permissions** page in Control Center, you can view and manage project roles and permissions. Additionally, you can migrate default project-level roles to centralized company-level roles. - -## Default Project Roles - -Default project roles are the default [team roles](/developerportal/general/app-roles/#team-roles) assigned for every new project created in your company. - -{{< figure src="/attachments/control-center/people/roles-permissions/roles-permissions.png" alt="Roles & Permissions page" >}} - -To create a new role, click **Create Project Role**. - -To edit a role, click **Edit Role**. - -To delete a role, click **Edit Role** and then **Delete Project Role**. - -You can not edit or delete the **SCRUM Master** role. +On the **Roles & Permissions** page in Control Center, you can view and manage centralized company-level project roles and permissions. ## Centralized Project Roles -### Migrating to Centralized Company-level Project Roles {#migrate-centralized-roles} - -#### Why Migrate? - -Previously, project roles were managed at the individual project level. This allowed Scrum Masters of a project to create custom project roles within their specific project, even though Mendix Admins could create templates for project roles at the company level. - -Mendix has now centralized project roles at the company level. To take advantage of this update, you just need to migrate all individual project roles to the new centralized project roles. This will enhance your ability to govern access across all Mendix projects and also enable the programmatic assignment of project roles via [the Mendix Projects API](/apidocs-mxsdk/apidocs/projects-api/). - -{{% alert color="warning" %}} -Mendix expects you to migrate to centralized company-level project roles by January 26, 2025. We will auto migrate all remaining companies on January 26, 2025. -{{% /alert %}} - -#### How to Migrate? - -{{% alert color="warning" %}} -Migrating to the centralized company-level project roles is a permanent action. Once it is done, it cannot be reversed. -{{% /alert %}} - -To migrate to centralized company-level project roles, click **Learn More** on the blue banner at the top of the page and follow the outlined steps to complete the migration. - -{{< figure src="/attachments/control-center/people/roles-permissions/learn-more.png" >}} - -#### After the Migration - -The results of migrating to the centralized company-level roles will be as follows: +All companies use centralized project roles. This means: * Mendix Admins will be the only ones who can create or modify project roles. * Scrum Masters and team members will only be able to view the project roles established by Mendix Admins and select the appropriate one. They will not have the ability to modify the permissions of project roles. If a custom permission set is needed, they must reach out to a Mendix Admin for assistance in creating it. -* If there were any old custom project roles before the migration, they will appear with the tag **Inherited from project** on the **Roles & Permissions** page in Control Center. Mendix Admin can review these custom project roles, keep the useful ones, and merge any duplicates. +* Some roles will appear with the tag **Inherited from project** on the **Roles & Permissions** page in Control Center. A Mendix Admin can review these custom project roles, keep the useful ones, and merge any duplicates. {{% alert color="info" %}} - When members of your company [invite someone to an project](/developerportal/general/team/#inviting), they cannot select any old custom role with the tag **Inherited from project** shown here, as these roles will not be shown to them. + When members of your company [invite someone to an project](/developerportal/general/team/#inviting), they cannot select any role with the tag **Inherited from project** shown here, as these roles will not be shown to them. {{% /alert %}} ### Project Roles Overview -On the **Roles & Permission**s page, you have an overview of all centralized project roles. Per role you see a brief summary of the permissions that the role has as well as in how many projects and by how many team members they are used. +On the **Roles & Permissions** page, you have an overview of all centralized project roles. You will see a brief summary for each role of the permissions that the role has as well as in how many projects and by how many team members they are used. Clicking the number of projects that use the role opens up a pop-up window with a list of projects where the role is used. @@ -72,7 +34,7 @@ From the overview page you can **Create**, **Edit**, or **Delete** a role. ### Creating a Role -To create a role, do as follows: +To create a role, do the following: 1. At the upper-right corner of the page, click **Create Project Role**. A wizard opens to guide you through the steps to set up the new role. @@ -93,7 +55,7 @@ To create a role, do as follows: {{< figure src="/attachments/control-center/people/roles-permissions/edit-project-role-step-3.png" alt="Project Role Step 3" >}} - Set the environment permissions for non-productive environments, such as the test or acceptance environments, as instructed below. These permissions are applied to the assigned team members on the [Permission](/developerportal/deploy/environments/#permissions) page in the Cloud Portal. + Set the environment permissions for non-productive environments, such as the test or acceptance environments, as described below. These permissions are applied to the assigned team members on the [Permissions](/developerportal/deploy/environments/#permissions) page in the Cloud Portal. 1. Set the correct access rights. 2. For **Permission Management**, you can select **Fixed** or **Custom**. @@ -104,7 +66,7 @@ To create a role, do as follows: {{< figure src="/attachments/control-center/people/roles-permissions/edit-project-role-step-4.png" alt="Project Role Step 4" >}} - Set the environment permissions for productive environments as instructed below. The permissions you set here will be fixed for this role. They cannot be altered later on the [Permission](/developerportal/deploy/environments/#permissions) page in the Cloud Portal. + Set the environment permissions for production environments as described below. The permissions you set here will be fixed for this role. They cannot be altered later on the [Permissions](/developerportal/deploy/environments/#permissions) page in the Cloud Portal. 1. Set the correct access rights. 2. For **Permission Management**, you can select **Fixed** or **Custom**. @@ -113,11 +75,11 @@ To create a role, do as follows: * If you select **Custom**, you allow anyone with Manage Permissions rights, for example, the Technical Contact, to set the permissions per environment. - {{% alert color="warning" %}}Editing and saving the productive environment permissions can only be done after a **multi-factor authentication** has taken place.{{% /alert %}} + {{% alert color="warning" %}}Editing and saving the production environment permissions can only be done after a **multi-factor authentication** has taken place.{{% /alert %}} ### Showing Details -To show the details of a role, click **Show Details**. The **Project Role Details** pop-up window opens with detailed information of the role. +To show the details of a role, click **Show Details**. The **Project Role Details** pop-up window opens with detailed information about the role. {{< figure src="/attachments/control-center/people/roles-permissions/project-role-details.png" alt="Project Role Details" >}} @@ -127,7 +89,7 @@ In the **Project Role Details** pop-up window, you can find the role ID that can ### Editing a Role -To edit a role, do as follows: +To edit a role, do the following: 1. Click **Edit Role** for the role you want to edit. 2. Make the changes. @@ -143,7 +105,7 @@ You cannot edit the Scrum Master role. This ensures that there is always someone ### Deleting a Role -To delete a role, do as follows: +To delete a role, do the following: 1. Click **Edit Role** for the role you want to delete. 2. Review the role. diff --git a/content/en/docs/control-center/security/software-composition.md b/content/en/docs/control-center/security/software-composition.md index aef7181606c..06d38b326b5 100644 --- a/content/en/docs/control-center/security/software-composition.md +++ b/content/en/docs/control-center/security/software-composition.md @@ -63,7 +63,10 @@ The list contains the following information: * **Environment** – This is the name of the environment. * **Runtime** – This shows the Mendix Runtime version. * **Technical Contact** – This shows the Technical Contact of the app. -* **Target Cloud** – This shows the type of the cloud where the deployment package is deployed. Currently, only Mendix Free Cloud and Mendix Cloud (including Mendix Cloud Dedicated) are supported. +* **Target Cloud** – This shows the type of the cloud where the deployment package is deployed. Currently, the following types of cloud are supported: + * Mendix Free Cloud + * Mendix Cloud (including Mendix Cloud Dedicated) + * Private Cloud (connected) * Column customization ({{% icon name="view" %}}) – You can customize the columns of the list by clicking the {{% icon name="view" %}} icon and adjusting the selection of the check boxes. * **View details** – Click this opens the [Component Summary](#component-summary) page, if it is available. The **View details** button is grayed out when an SBOM is not available for the selected application environment. Ensure you are on a compatible runtime version and create a new deployment package in order to get component visibility here. diff --git a/content/en/docs/deployment/general/securing-outgoing-connections-from-your-application.md b/content/en/docs/deployment/general/securing-outgoing-connections-from-your-application.md index 4f07845cdc5..de041ae7fc5 100644 --- a/content/en/docs/deployment/general/securing-outgoing-connections-from-your-application.md +++ b/content/en/docs/deployment/general/securing-outgoing-connections-from-your-application.md @@ -68,7 +68,7 @@ The following disadvantages apply: * DNS is not available * With failover data centers, VPN becomes extremely difficult to manage -* Connections are added to (virtual) machines, this makes deployment to multi-tenant public-cloud environments based on containerization a challenge +* Connections are added to (virtual) machines, this makes deployment to multitenant public-cloud environments based on containerization a challenge * VPN gateways potentially add two more single points of failure {{< figure src="/attachments/deployment/general/securing-outgoing-connections-from-your-application/19399048.png" class="no-border" >}} diff --git a/content/en/docs/deployment/mendix-cloud-deploy/_index.md b/content/en/docs/deployment/mendix-cloud-deploy/_index.md index a4b109db00f..cccc65e7f76 100644 --- a/content/en/docs/deployment/mendix-cloud-deploy/_index.md +++ b/content/en/docs/deployment/mendix-cloud-deploy/_index.md @@ -201,7 +201,7 @@ With a Premium plan, your app can be [horizontally scaled](/developerportal/depl Fallback ensures that the data in your database is automatically copied to a database in a second AZ. This ensures that all your data is still available to your app if there is an issue with the primary availability zone and app instances have to be started in the second AZ. -The connections between AZs are low latency. However, the implementation of these features means that your monitoring may indicate that apps deployed to Mendix Cloud under a Premium plan suffer an additional latency of a few milliseconds compared with apps deployed using a Standard plan. For a well-designed app, this difference is not noticeable to end-users. +The connections between AZs are low latency. However, the implementation of these features means that your monitoring may indicate that apps deployed to Mendix Cloud under a Premium plan suffer an additional latency of a few milliseconds per query compared with apps deployed using a Standard plan. For a well-designed app, this difference is not noticeable to end-users. #### Application Data Replication diff --git a/content/en/docs/deployment/mendix-cloud-deploy/backups/restore-backup.md b/content/en/docs/deployment/mendix-cloud-deploy/backups/restore-backup.md index de6178f1ce4..5aeef082306 100644 --- a/content/en/docs/deployment/mendix-cloud-deploy/backups/restore-backup.md +++ b/content/en/docs/deployment/mendix-cloud-deploy/backups/restore-backup.md @@ -163,6 +163,8 @@ This folder contains the *db.backup* file, which is a PostgreSQL dump file creat If the dump does not use the custom format, then the restore will fail. The dump must be created with `pg_dump` version 1.14 or below, which is currently bundled with PostgreSQL 13, 14, and 15. If it is created with a later version, then the upload will fail. + +You can find the exact version of PostgreSQL each environment of your application is using on the [General](/developerportal/deploy/environments-details/#general-tab) tab of each environment's **Environment Details** page. {{% /alert %}} #### tree Folder{#tree-folder} diff --git a/content/en/docs/deployment/mendix-cloud-deploy/environments-details-new.md b/content/en/docs/deployment/mendix-cloud-deploy/environments-details-new.md new file mode 100644 index 00000000000..a84fd44b41a --- /dev/null +++ b/content/en/docs/deployment/mendix-cloud-deploy/environments-details-new.md @@ -0,0 +1,571 @@ +--- +title: "Environment Details (New UI)" +url: /developerportal/deploy/environments-details-redesign/ +weight: 7 +beta: true +description: "Describes the environmental details of your app and how to manage the environment." +#To update these screenshots, you can log in with credentials detailed in How to Update Screenshots Using Team Apps. +#The anchor #connection-safelist below is mapped from the Mendix Portal (Mendix Cloud Environment Details), so it should not be removed or changed. +#The anchor #services below is mapped from the Mendix Portal (Mendix Cloud Environment Details), so it should not be removed or changed. +--- + +{{% alert color="warning" %}} +This feature is in Public Beta. For more information, see [Beta Releases](/releasenotes/beta-features/). +{{% /alert %}} + +{{% alert color="info" %}} +While this feature is in Beta, you can use the **New Theme** toggle to switch between this new UI and the [legacy UI](/developerportal/deploy/environments-details/). For apps running on Kubernetes, the new UI displays by default and cannot be toggled off. +{{% /alert %}} + +## Introduction + +To open the **Environment Details** page, go to [Apps](https://sprintr.home.mendix.com) and click **Environments** on your licensed app. Then click **Details** ({{% icon name="notes-paper-edit" %}}) by the environment you want to view. + +{{< figure src="/attachments/deployment/mendix-cloud-deploy/environments-details-beta/general.png" alt="The Details icon is on the right side of the row" >}} + +{{% alert color="info" %}}You must have permissions for **Transport Rights** or **Access to Monitoring** to view the **Environment Details** page. For details on configuring permissions, see [Node Permissions](/developerportal/deploy/node-permissions/).{{% /alert %}} + +The **Environment Details** page shows information about the selected environment. You can use this page to manage and debug several aspects of the environment. The page has eight tabs: **General**, **Model Options**, **Network**, **Log Levels**, **Runtime**, **Maintenance**, **Tags**, and **Services**. + +## Actions {#actions} + +On the top right side of the screen, there are buttons and a **More Options** menu that you can use to perform various actions. Some action buttons are visible when your app is running, some are visible when your app is stopped, and some are always visible. + +{{% alert color="info" %}}Depending on your permissions, you may see only some of the action buttons described below. You can adjust your permissions settings on the [Permissions](/developerportal/deploy/node-permissions/) tab of your app's **Environments** page.{{% /alert %}} + +{{< figure src="/attachments/deployment/mendix-cloud-deploy/environments-details-beta/actions.png" alt="The buttons and More Options menu" >}} + +When your app is running, you can perform the following actions: + +* **Deploy** – This deploys an application to the environment. +* **Restart App** – This stops the running application and starts it again. Restarting your app is required for applying new constant values or scheduled events to the environment. +* **Stop App** – This stops the application. +* **More Options**: + * **Show Logged in Users** – This shows all users who are logged in to your app. + * **Change Admin Password** – This changes the password for the built-in [administrator](/refguide/administrator/) account. The new password is applied immediately, without the need for a restart, and forces the administrator to pick up any new [roles](/refguide/administrator/#user-role) assigned in the app deployment package. + * **View Live Log** – This shows a live log for your application. It is identical to the **View Live Log** button on the [Logs](/developerportal/operate/logs/) page. + * **Show Debugger Information** – This shows the settings needed to connect the debugger in Studio Pro to your app. For more information on debugging in the cloud, see [How To Debug Microflows Remotely](/refguide/debug-microflows-remotely/). + * **Show Running Now** – You can use this to monitor all actions that are currently running in your environment. For more information, see [Running Now](/developerportal/deploy/mxcloud-runningnow/). + +When your app is stopped, you can perform this set of action buttons instead: + +* **Deploy** – This deploys an application to the environment. +* **Start App** – This starts the application. +* **Stop App** – This stops the application. +* **More Options**: + * **Clear Environment** – This allows you to empty all the data from your database and, optionally, remove the app and file storage from the environment as well. For more information, see [Clearing an Environment](#clear-environment). + * **View Live Log** – This shows a live log for your application. It is identical to the **View Live Log** button on the [Logs](/developerportal/operate/logs/) page. + +{{% alert color="info" %}} +During a [maintenance window](/developerportal/deploy/maintenance-windows/), you cannot start, restart, or stop your app. +{{% /alert %}} + +## The General Tab + +In the **Application Status** section of the **General** tab, you can find the following information about your environment: + +* **Status** + * {{% icon name="checkmark-circle-filled" color="green" %}} – The application in this environment is running. + * {{% icon name="subtract-circle-filled" color="gray" %}} – No application has been started yet in this environment, or it has been turned off. + * {{% icon name="alert-circle-filled" color="yellow" %}} – The application in this environment is experiencing some difficulties; check the alerts page or logs for more information. + * {{% icon name="remove-circle-filled" color="red" %}} – The application in this environment is unstable and probably not usable anymore. +* **Running since** – the date the app was started, if it is running +* **Name** – the type of environment (Acceptance, Production, Test, or the name of a [flexible environment](/developerportal/deploy/mendix-cloud-deploy/#flexible-environments)); for more information, see the [Naming of Environments](#naming) section below +* **Url** – the URL of the app +* **Project ID** – the unique identifier of the app +* **Environment ID** – the unique identifier of the environment +* **Custom domains** – any [custom domains](/developerportal/deploy/custom-domains/) of the app; to add a new domain, click **Add Custom Domain** +* **Java Version** – the JDK version selected for the MDA that is deployed to the environment +* **Studio Pro Target** – a **Yes** or **No** value indicating whether the environment is the designated deployment target from Studio Pro; for more information, see [Studio Pro Deployment Settings](/developerportal/deploy/studio-deployment-settings/). +* **Plan** – the type of plan covered by your license (for more information, see the [Overviews](/developerportal/deploy/environments-details/#overviews) section below) +* **Instances** – a summary of the number and memory allocation of instances of the environment (for more information, see the [Scaling](#scaling) section below) +* **Database Version** – the PostgreSQL version supporting the database +* **Region** – the region of the data center where the app is hosted (for the full list of Mendix Cloud regions, see [Outgoing IP](/developerportal/deploy/mendix-ip-addresses/#outgoing)) +* **Secondary Backup Location** – the region where the backup is stored (for more information, see [Data Location](/developerportal/operate/backups/#data-location) in the *Backups* documentation) +* **Mendix Cloud Version** – the version of Mendix Cloud where the app is hosted + +At the bottom of the page, there are three sections showing the deployment package details, plan details, and license. These are described in detail below in the [Overviews](#overviews) section. + +#### Clearing an Environment {#clear-environment} + +The **Clear Environment** button lets you clear your environment so that you can use it for another purpose. This option is only available if the environment is stopped. + +{{% alert color="info" %}} +You do not need to clear your environment if you are restoring an existing backup of the currently deployed app. The restoration process removes the current database and replaces it with the data from the backup. + +Clearing the database does not delete the database instance itself. Some disk usage, like logs and system data, will still remain. +{{% /alert %}} + +To clear your environment, follow these steps: + +1. Click **Clear Environment**. +2. Select one of the following options: + + * **Only clear the database** – This removes all data from your database tables. Ensure you have a backup of any data that you want to keep. + + After you confirm the deletion, the application is stopped, the existing data is removed from the database, and the application is restarted. Note that the database retains some information, such as logs and system data. + + * **Clear the full environment (model and database)** – This clears all data from your database and file storage. It also removes your app from this environment. Clear the full environment if you want to deploy a different app to the environment. + +3. Confirm that you want to clear your environment by typing the indicated text (*clear database* or *clear model and database*, depending on which option you selected). +4. Click **Clear Environment**. + +### Naming of Environments – Flexible Environments in Mendix Cloud {#naming} + +If you are the app's [Technical Contact](/developerportal/general/app-roles/#technical-contact), you can rename the environments. + +To rename an environment, follow these steps: + +1. Click **Change** next to the name of the environment. +2. Enter the new name, which must meet the following requirements: + * Consists of at least two characters + * Consists of only alphanumeric characters and hyphens (`a-z`, `A-Z`, `0-9`, and `-`) + * Does not begin or end with a hyphen + +{{% alert color="info" %}} +After you rename an environment, it may take up to 15 minutes before you can access an app via its URL. This is because the URL includes the name of the environment, and the old value needs to be removed from the DNS cache. It may take considerably longer for the change to be visible worldwide. +{{% /alert %}} + +### Scaling {#scaling} + +To see the options for changing scaling, scroll down to the **Instances** row of the **Application Settings** section of the **General** tab, and then click **Change scaling**. + +In the **Change scaling** dialog box, there are two sliders that you can control: + +* Use the **Instances** slider to increase or decrease the number of instances + * The instances are meant for improved resiliency and increased processing power + * The minimum amount of RAM per instance is 1 GiB; you can spread the RAM among four instances if you have more than 1 GiB of RAM +* Use the **Memory per instance** slider to increase or decrease the memory amount per instance + +The **Total Allocated Memory** is a process circle that shows how much memory is currently used for scaling. + +{{% alert color="info" %}}The maximum value for **Memory per instance** equals the **Total Allocated Memory** of your plan, but it cannot exceed 32 GiB. The maximum number of instances depends on the **Memory per instance** you have chosen; the maximum number of instances equals the total allocated memory divided by the memory per instance.{{% /alert %}} + +If you have 1 GiB RAM of total allocated memory, you have one instance available to store your memory. To scale your memory over multiple instances, you need more memory. + +For more information, see [Scaling Your Environment](/developerportal/deploy/scale-environment/). + +### Overviews {#overviews} + +At the bottom of the **General** tab, there are three sections showing the deployment package details, plan details, and license. + +#### Deployment Package Details + +In this section, you can find information about the deployment package that is loaded into the environment: + +* **Name** of the deployment package +* **Version** of the deployment package +* **Runtime** version of Mendix used to create the app +* **Size (MB)** of the deployment package +* **Upload date** of the deployment package + +#### Plan Details + +This section shows details of the plan that applies to this environment. + +#### License + +The license overview contains the following information: + +* **Company** – who owns the license +* **Is Production** – indicates if the environment is licensed as a production environment +* **Runtime mode** – Production, Acceptance, or Test + +## The Model Options Tab {#model-options} + +On this tab, you can edit the following model options: constants and scheduled events. + +{{< figure src="/attachments/deployment/mendix-cloud-deploy/environments-details-beta/model-options.png" class="no-border" >}} + +### Constants {#constants} + +In this section, you can view the configured constants. Constants are used to define configuration values that can differ per environment. + +To fill in a new value, select the constant and click **Edit** to bring up the **Edit Constant** dialog box. + +{{< figure src="/attachments/deployment/mendix-cloud-deploy/environments-details-beta/edit-constant.png" class="no-border" >}} + +In the **Edit Constant** dialog box, you can change the constant value using the **New value** field. + +You can also set **Mask** to **Yes**. This changes the display settings for **Current value** and **New value**; if masking is enabled, all screens in the Mendix Portal (and in Excel if you export the constants) conceal these values and display a string of asterisks in their place. This lets you keep your constants secret from users who do not have edit rights. + +{{% alert color="info" %}} +For the changes to take effect, you must restart your application. +{{% /alert %}} + +{{% alert color="info" %}} +When a constant is first introduced to a cloud deployment, its value is taken from the Studio Pro configuration. Any later changes to the constant value in Studio Pro will not be copied to the new deployment. +{{% /alert %}} + +For more information, see [Constants](/refguide/constants/). + +#### Comparing Constants + +You can export the constant values to an Excel file by clicking **Export to Excel**, or compare the values across different environments by clicking **Compare and Edit**. + +### Scheduled Events + +In this section, you can view your configured scheduled events. + +{{< figure src="/attachments/deployment/mendix-cloud-deploy/environments-details-beta/edit-event.png" class="no-border" >}} + +If you select a scheduled event and click **Toggle**, you can switch the scheduled event off and on. + +{{% alert color="info" %}} +For the changes to take effect, you must restart your application. +{{% /alert %}} + +With scheduled events, you can let the Mendix Runtime run a microflow at a specific moment in time. The event can also be repeated with a given interval; for example, you can set it to repeat every day. + +For more information, see [Scheduled Events](/refguide/scheduled-events/). + +## The Network Tab {#network-tab} + +On the **Network** tab, you can manage the elements described below. + +{{< figure src="/attachments/deployment/mendix-cloud-deploy/environments-details-beta/network.png" class="no-border" >}} + +### Custom Domains {#custom-domains} + +* **Domain name** +* **Certificate** +* **Expire** date + +You can perform the following actions: + +* **Add** – provide the domain name and select the certificate from a drop-down menu +* **Edit** +* **Delete** + +For more information, see [Certificates](/developerportal/deploy/certificates/) and [Custom Domains](/developerportal/deploy/custom-domains/). + +### HTTP Headers {#http-headers} + +The **HTTP Headers** section lets you set the values of selected HTTP response headers. These headers allow the server to pass additional information with the response, which the browser interprets to control the behavior of your Mendix app. + +{{% alert color="info" %}} +Earlier versions of Mendix Cloud had a setting that let you prevent embedding your app in an iframe. This setting is now replaced with support for HTTP headers, which offer more flexible options. +{{% /alert %}} + +Mendix Cloud supports the following HTTP headers in the Mendix Portal: + +| Header | Description | +| ----------------------------- | ----------- | +| `Access-Control-Allow-Origin` | Indicates whether the response can be shared with requesting code from the given origin. | +| `Content-Security-Policy` | Allows website administrators to control resources the user agent is allowed to load for a given page. Requires a string value.
      For more information, see [Content Security Policy](#csp), below. | +| `Origin-Trial` | Used to enable experimental web platform features for your environment as part of Google's [Origin Trials](https://developer.chrome.com/docs/web-platform/origin-trials/) program. | +| `Referrer-Policy` | Governs which referrer information should be included with requests made. | +| `X-Content-Type-Options` | Indicates that the MIME types advertised in the Content-Type headers should not be changed and be followed. | +| `X-Frame-Options` | Indicates whether or not a browser should be allowed to render a page in a ``, `

      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