vania-janet/multiturn-rag-retrieval-data huggingface dataset:
This is to allow values that may have been returned from a newer version of the service to be supplied on subsequent method invocations.





 Retry 

The SDK MAY provide an automated retry mechanism provided that the user can specify:



* The maximum number of retry attempts, including zero.
* The minimum and maximum time interval between retry attempts.
* The HTTP status codes or error classes that should be retried.



The retry mechanism should respect a "retry-after" response header if one is returned from the service.





 Logging 

The SDK MAY provide a logging mechanism provided that the user can specify a logging level, such as "error", "warning", "informational", or "verbose" that determines the frequency and volume of log entries.

The SDK logging mechanism SHOULD employ the common logging framework for the language.





 Centralize common features 

The SDK SHOULD minimize the developer burden for common tasks such as authentication, and expose service versioning in a highly consumable fashion. In particular, these aspects are generally best provided as methods on a client object rather than being exposed on each method of the SDK.





 Tests 

The SDK SHOULD include both unit and integration tests. The SDK SHOULD use a test coverage tool to measure code coverage and establish a coverage target (recommended > 80%) to be achieved for SDK releases. See [code coverage](https://cloud.ibm.com/docs/sdk-handbook?topic=sdk-handbook-devtoolsdevtools-codecov).
You can substitute code from any [supported runtime](https://cloud.ibm.com/docs/codeengine?topic=codeengine-plan-buildbuild-buildpack-strat).







 Step 4: Deploying your application 

Push your code to Code Engine by using the application create command. You must provide a name for your application and the location of the source code. The following example creates an application called myapp that uses the buildpack strategy and provides the location for the source code in the current directory (.).

ibmcloud ce app create --name myapp --build-source . --strategy buildpacks

Example output

Creating application 'myapp'...
Packaging files to upload from source path '.'...
Submitting build run 'myapp-run-220999-210706331'...
Creating image 'private.us.icr.io/ce--6ef04-khxrbwa0lci/app-myapp:220418-0207-askql'...
Waiting for build run to complete...
Build run status: 'Running'
Build run completed successfully.
Run 'ibmcloud ce buildrun get -n myapp-run-220000-210706331' to check the build run status.
Waiting for application 'myapp' to become ready.
Configuration 'myapp' is waiting for a Revision to become ready.
Ingress has not yet been reconciled.
Waiting for load balancer to be ready.
Run 'ibmcloud ce application get -n myapp' to check the application status.
OK

https://myapp.abcdbwa0lci.us-south.codeengine.appdomain.cloud

And that's it. You now have an internet-facing application. The code in the application itself is the same as what is used for a Cloud Foundry application, it's just the Code Engine commands that are slightly different.

Let's take a deeper look at the previous app create command.
The apps option is used to limit discovery to application packages. The image option is used to limit discovery to base images that are used in Dockerfiles. The os option is used to limit discovery to build stages in Dockerfiles only. You can specify multiple values by using a comma to delimit the values, such as -a os,image,apps. 
 -p, --prev-report Optional Use the previous BOM report to speed up the command. For example, if a Dockerfile was not updated since the last report was generated, the command skips the discovery of packages from that Dockerfile. The same scenario applies to other manifest files such as the package-lock.json file. 
 -c, --dockerbuildcontext Optional If specified, CRA uses the directory in the path parameter as the Docker build context during build stage scanning. 
 -o, --output Optional Select the BOM report format. You can generate the format output in either Standard BOM format (standard) or CycloneDX's SBOM format (cyclonedx). The default value is standard. You can store both formats by inputting each format separated by a comma with no space. 
 -f, --dockerbuildflags Optional Customize the Docker build command for build stage scanning. Instead of using this command-line flag, you can specify the value in an environment variable named DOCKERBUILDFLAGS. By default, this command option is set to ''. If you use this option, make sure that it is the last flag that is provided to the command. 
 -d, --dockerfilepattern Optional The pattern to identify the Dockerfile in the repo. 
 -g, --gradle.excludeconfigurations Optional Exclude the Gradle configurations, for example: runtimeClasspath,testCompileClasspath. By default, this command option is set to ''. 
 -l, --gradleprops Optional Customize the Gradle command with properties for Gradle dependency scanning.
"ca_url": "https://xyz-ca.openshift-ibpv2-test-1-0001.us-south.containers.appdomain.cloud:443"
}
3. Open the generated connection profile that you downloaded. Edit the "certificateAuthorities": section:

"certificateAuthorities": {
"<CA_HOST_PORT>": {
"url": "<API_URL>",
"caName": "<CA_NAME>",
"tlsCACerts": {
"pem": ["<TLS_CERT>"]
}
}
}

Replace:



* <CA_HOST_PORT> with the value of the "certificateAuthorities": from the "organizations": section of the generated connection profile. For example, xyz-ca.openshift-ibpv2-test-1-0001.us-south.containers.appdomain.cloud:443.
* <API_URL> with the value of the "api_url" from the downloaded JSON file.
* <CA_NAME> with the value of the "ca_name" from the downloaded JSON file.
* <TLS_CERT> with the value of the "tls_cert" from the downloaded JSON file.





If the organization MSP was manually created by using certificates from an external CA, then there is no reason to add the CA to the connection profile. You cannot register and enroll users with an external CA from a client application.







 Updating an organization MSP definition 

It is possible that you will need to update an organization MSP definition, such as the display name, or certificates that are included inside the MSP. You can also enable Node OU support on the MSP. Enabling Node OU support is recommended because it greatly simplifies the steps required after certificates are renewed.

It is recommended that you do not change the msp_id field as this might cause breaking changes to your network.

To update your MSP:
notificationOptions.setInteractiveNotificationCategories(
categoryName: [category])
push.initializeWithAppGUID(
appGUID: "<IBM Cloud Push Instance GUID>",
clientSecret:"<IBM Cloud Push Instance ClientSecret>",
options: notificationOptions)

// with this

let notificationOptions = ENPushClientOptions()
notificationOptions.setInteractiveNotificationCategories(
categoryName: [category])
enPush.initialize("<instance_guid>",
"<instance_destination_id>",
"<instance_apikey>",
notificationOptions)
Show more
* Change the Notification button

// Replace this

let acceptButton = BMSPushNotificationAction(
identifierName: "Accept",
buttonTitle: "Accept",
isAuthenticationRequired: false,
defineActivationMode:.background)

let rejectButton = BMSPushNotificationAction(
identifierName: "Reject",
buttonTitle: "Reject",
isAuthenticationRequired: false,
defineActivationMode: .background)

// with this

let actionOne = ENPushNotificationAction(
identifierName: "Accept",
buttonTitle: "Accept",
isAuthenticationRequired: false,
defineActivationMode: .foreground)

let actionTwo = ENPushNotificationAction(
identifierName: "Reject",
buttonTitle: "Reject",
isAuthenticationRequired: false,
defineActivationMode: .destructive)
Show more
* Change the Notification category

// Replace this

let category = BMSPushNotificationActionCategory(
identifierName: "category",
buttonActions: [acceptButton, rejectButton])

// with this
Integrating with phone and Twilio Flex 

IBM Cloud

You can use the phone integration to help your customers over the phone and transfer them to live agents inside of Twilio Flex. If, in the course of a conversation with your assistant, a customer asks to speak to a person, you can transfer the conversation directly to a Twilio Flex agent.



 Before you begin 

To use this integration pattern, make sure you have the following:



* Watson Assistant Plus or Enterprise Plan (required for phone integration)
* A Twilio account with the following products:



* Twilio Flex
* Twilio Voice with Programmable Voice API
* Twilio Studio









 Adding the Watson Assistant phone integration 

If you have not already added the phone integration to your assistant, follow these steps:



1. In the Integrations section on the main page for your assistant under Essential Channels, you will see a tile for Phone.
2. On the Phone tile, click Add.
3. On the pop-up window, click Add again.
4. Select Use an existing phone number with an external provider.
5. Complete the phone integration setup process. (For more information, see [Integrating with phone](https://cloud.ibm.com/docs/watson-assistant?topic=watson-assistant-deploy-phone).)



For now, this is all you need to do. For more information about configuring the phone integration, see [Integrating with phone](https://cloud.ibm.com/docs/watson-assistant?topic=watson-assistant-deploy-phone).





 Adding the Twilio Flex Project 

If you don't already have a Twilio Flex project, you can create one by following these steps:



1. From the project drop-down menu, click Create New Project. Specify a name for the project and verify your account information.
2. On the welcome page, select Flex as the Twilio product for your new project. Fill out the questionnaire and then click Get Started with Twilio.
Custom device management packages 

IBM Watson® IoT Platform is deprecated. As of 30 April 2023, only subscribers on paid plans will be able to deploy new instances. The service will be fully withdrawn on 1 December 2023. Any instances that still exist on 1 December 2023 will be deleted. For more information, see [the deprecation details](https://cloud.ibm.com/docs/IoT?topic=IoT-deprecation).

This IBM Cloud® documentation collection pertains to the IBM Watson® IoT Platform Lite pricing plan and includes basic getting started information, API references, and general troubleshooting information. For the full Watson IoT Platform feature documentation, see the [Watson IoT Platform product documentation ![External link icon](https://cloud.ibm.com/docs-content/v1/content/icons/launch-glyph.svg)](https://www.ibm.com/support/knowledgecenter/SSQP8H/iot/overview/overview.html) on IBM Knowledge Center. More information about the various plans can be found in [Watson IoT Platform service plans](https://cloud.ibm.com/docs/services/IoT?topic=IoT-plans_overviewplans_overview).

Device management is a core feature of Watson IoT Platform, however, it can be extended to develop additional functionality. Custom device management packages must consist of valid JSON and define at least one custom device management action.

For more information on custom device management functions, including an example of the required JSON format, see [device management custom extensions ![External link icon](https://cloud.ibm.com/docs-content/v1/content/icons/launch-glyph.svg)](https://www.ibm.com/support/knowledgecenter/SSQP8H/iot/platform/devices/device_mgmt/custom_actions.html).



 Adding a custom device management package 

Custom device management packages can be added either by using the Watson IoT Platform dashboard or by using the API.

To add a custom device management package by using the Watson IoT Platform dashboard:
All of the downsides listed for [silently ignoring invalid input](https://cloud.ibm.com/docs/api-handbook?topic=api-handbook-robustnesssanitation-and-validation) also apply to ignoring extraneous input.

Additionally, ignoring extraneous input causes particular hazards for evolving a service in a backward-compatible way. Specifically, if a client is sending a property or parameter that is unsupported and ignored, then the client application could experience a failure or an outage if and when support is added to the service for a property or parameter of the same name.







 Migrating to best practices for robustness 

Migrating a service API that is less strict in its handling of requests to comply with the [best practices](https://cloud.ibm.com/docs/api-handbook?topic=api-handbook-robustnessbest-practices) for robustness inevitably involves making [backward-incompatible changes](https://cloud.ibm.com/docs/api-handbook?topic=api-handbook-change-compatibilityrobustness-changes).

When feasible, existing, noncompliant service APIs SHOULD be updated to adhere to best practices by using one of the following approaches:



* If a service API has a small, known set of consumers, and log analysis can be used to identify client behavior that would run afoul of stricter validation, white-glove assistance to client developers MAY be offered ahead of changes that would otherwise be considered breaking.
* If a service API employs [date-based versioning](https://cloud.ibm.com/docs/api-handbook?topic=api-handbook-changes-overview), stricter enforcement MAY be added for a new version date. If feasible, updated enforcement SHOULD happen in a single version date across the whole service. For large services, an iterative approach where cohesive sections of the API are updated in a series of versioned changes MAY be used.
* If a new major version for a service API is developed, updated robustness best practices MUST be enforced across the new version.
Where previously smart contracts were instantiated on a channel by a single channel member and other organizations only had the ability to choose whether to install the smart contract, the new lifecycle allows organizations to propose, approve, and commit smart contracts at an organizational level.

This separation of concerns opens exciting new opportunities for collaborating organizations. For example, different organizations can install smart contracts on their peers that contain only the code relevant to their business role and make minor updates to these smart contracts where necessary, without needing to seek new approvals from other organizations.

For a tutorial on how this process is handled by the console, check out [Deploy a smart contract using Fabric v2.x](https://cloud.ibm.com/docs/blockchain?topic=blockchain-ibp-console-smart-contracts-v2).

For information about to take advantage of the new lifecycle when writing a smart contract, check out [Writing powerful smart contracts](https://cloud.ibm.com/docs/blockchain?topic=blockchain-write-powerful-smart-contracts).
* Do you support using certificates from non-IBM Certificate Authorities?

Yes, you can bring your own certificates if they are issued by a CA that is X.509 compliant. The CA should sign by using ECDSA and the defaults should be set to use P256 curve. See this topic about [Using certificates from an external CA with your peer or ordering node](https://cloud.ibm.com/docs/blockchain?topic=blockchain-ibp-console-adv-deploymentibp-console-adv-deployment-third-party-ca).
* What is the recommended way to manage private keys?

Because private keys are not stored by the platform, users are responsible for downloading and securing their private key. Therefore, when a higher level of security is required for private keys, an HSM is recommended. An HSM is a hardware appliance that performs cryptographic operations and provides the capability to ensure that the cryptographic keys never leave the HSM. Hyperledger Fabric supports HSM devices that implement the PKCS #11 standard. PKCS #11 is a cryptographic standard for secure operations, generation, and storage of keys.
.build();

// with this

// Style
const styleModel = {
type: 'bigtext_notification',
title: 'Big Text Notification',
url: ' https://upload.wikimedia.org/wikipedia/commons/2/24/IBM_Cloud_logo.png ',
};

// Lights
const lightsModel = {
led_argb: 'red',
led_on_ms: 1.0,
led_off_ms: '1.0',
};
Show more



1. Changes to FCM message body



// Replace the below section

var fcm = PushMessageBuilder.FCM
.collapseKey("ping")
.interactiveCategory("Accept")
.delayWhileIdle(true)
.payload({ "alert" : "20% Off for you" })
.androidTitle("Title for Android")
.priority(Notification.FCMPriority.DEFAULT)
.sound("sound.mp3")
.timeToLive(1.0)
.icon("http://www.iconsdb.com/icons/preview/purple/message-2-xxl.png")
.sync(true)
.visibility(Notification.Visibility.PUBLIC)
.style(style)
.lights(lights)
.build();

// with this

const notificationFcmBodyMessageDataModel = {
alert: '20% Off for you',
collapse_key: 'ping',
interactive_category: 'Accept',
icon: 'http://www.iconsdb.com/icons/preview/purple/message-2-xxl.png',
delay_while_idle: true,
sync: true,
visibility: 'PUBLIC',
payload: { "alert" : "20% Off for you" },
priority: 'DEFAULT',
sound: 'sound.mp3',
The Standard Layout tab allows you to modify the layouts for devices with large screens, such as desktops. The Tablet Layout tab allows you to modify the layouts used on tablet devices. The Smalltouch Layout tab allows you to modify the layouts used on smaller devices such as smartphones.

The default theme supports the use of Gpanels, or Responsive Panels, if you install the Panels module. Panels let you define settings that control the panels layout on standard, tablet, and small touch devices. ![Panels](https://cloud.ibm.com/docs-content/v1/content/78bb71851d95d7580503eb9ba10cf3ae31490ade/apiconnect/tutorials/images/43-panels.png)

There are other settings that you can adjust, but for this tutorial, skip to the Extensions tab.
2. Click select Extensions to enable additional settings you can use to configure the styling of your developer portal.
![Extensions](https://cloud.ibm.com/docs-content/v1/content/78bb71851d95d7580503eb9ba10cf3ae31490ade/apiconnect/tutorials/images/44-extensions.png)

You can modify the settings of the extensions enabled on the Extensions tab.
![Extension Settings](https://cloud.ibm.com/docs-content/v1/content/78bb71851d95d7580503eb9ba10cf3ae31490ade/apiconnect/tutorials/images/45-extension-settings.png)
3. When the settings modifications are complete, click Save configuration.



--------------------





 Select a different theme for your developer portal 

The developer portal comes with additional themes that change its look and feel.



1. To enable a different theme, select the List tab in the Appearance settings. !
* Remove support for .NET SDK 1.1.13
* Remove support for .NET SDK 1.1.14
* Remove support for .NET SDK 2.1.507
* Remove support for .NET SDK 2.2.107
* Remove support for .NET SDK 2.2.203
* Remove support for .NET SDK 2.2.204
* Update Node.js version to 10.16.3







 13 September 2019 

Updated Liberty buildpack v3.36-20190905-1704
: The default Liberty runtime GA version was changed to the [19.0.0.9](https://openliberty.io/blog/2019/09/13/microprofile-reactive-messaging-19009.html) release.



* The alternate Liberty runtime GA version is also the 19.0.0.9 release.
* The IBM JRE version was updated to 8 SR5 FP40.







 17 August 2019 

Updated Liberty buildpack v3.35
: The default Liberty runtime GA version is [19.0.0.6](https://openliberty.io/blog/2019/06/21/microprofile-rest-client-19006.html).



* The alternate Liberty runtime GA version 19.0.0.8 was added.
* The default JRE is IBM Small footprint JRE version 8 SR5 FP37.
* The AdoptOpenJDK OpenJ9 alternate JRE was updated to version 11.0.4+11_openj9-0.15.1.







 18 July 2019 

Updated Liberty buildpack v3.34
: The default Liberty runtime GA version is [19.0.0.6](https://openliberty.io/blog/2019/06/21/microprofile-rest-client-19006.html).



* The alternate Liberty runtime GA version is [19.0.0.7](https://openliberty.io/blog/2019/07/18/microprofile-30-developer-experience.html) was added.
When attempting to install MotionPro on Mac, why am I receiving a MotionPro.pkg error? 

When downloading MotionPro software, you might encounter a MotionPro.pkg error.

  What’s happening 

You receive this error: “MotionPro.pkg” can’t be opened because Apple cannot check it for malicious software.

  Why it’s happening 

This error might appear when downloading any software on a Mac from unverified sources on the web.

  How to fix it 

Follow these steps to resolve this issue:



1.  Go to System Preferences > Security & Privacy.
2.  From Allow apps downloaded from:, select App Store and identified developers.
3.  MotionPro is listed with an option to Open Anyway. Click this option.
4.  Accept the confirmation prompt, then begin installing. For more information, see [Apple documentation](https://support.apple.com/en-us/HT202491).
5.  If you do not see MotionPro and the option to Open Anyway, reinstall MotionPro and try again.
* Understand how to identify microservices in a VM based app and learn how to map components between VMs and Kubernetes.
* Learn how to containerize a VM based app.
* Learn how to deploy the container to a Kubernetes cluster in Kubernetes Service.
* Put everything learned to practice, run the JPetStore app in your cluster.







 Architecture 



 Traditional app architecture with VMs 

The following diagram shows an example of a traditional app architecture that is based on virtual machines.

Zoom

![Diagram of traditional app architecture](https://cloud.ibm.com/docs-content/v1/content/cbb80bf851fb762a838129cba09d5674f8bfffda/Registry/includes/solution-tutorials/includes/solution-tutorials/images/solution30/traditional_architecture.png)

Figure 1. Architecture diagram of the tutorial



1. The user sends a request to the public endpoint of the app. The public endpoint is represented by a load balancer service that load balances incoming network traffic between available app server instances.
2. The load balancer selects one of the healthy app server instances that run on a VM and forwards the request. App files, such as the app code, configuration files, and dependencies are stored on the app server VM.
3. The app server stores app data in a MySQL database that runs on a database VM.







 Containerized architecture 

The following diagram shows an example of a modern container architecture that runs in a Kubernetes cluster.

Zoom

![Diagram of a modern container architecture](https://cloud.ibm.com/docs-content/v1/content/cbb80bf851fb762a838129cba09d5674f8bfffda/Registry/includes/solution-tutorials/includes/solution-tutorials/images/solution30/modern_architecture.png)

Diagram of a modern container architecture



1. The user sends a request to the public endpoint of the app.
In Kubernetes cluster versions 1.21 and later, Konnectivity replaced the OpenVPN solution. If you have cluster version 1.21 and later, and your webhook uses the ClusterIP, you must update your webhook to use a Kubernetes service instead.

You can configure a webhook by referencing the webhook app as a Kubernetes service, or by referencing the webhook app as an IP address or publicly registered DNS name.

Example configuration for referencing the webhook app as a Kubernetes service

 {: codeblock}
clientConfig:
caBundle: CA_BUNDLE_BASE64
service:
name: admission-webhook
namespace: default
path: /validate
port: 443

Example configuration for referencing the webhook app as an IP address or publicly registered DNS name

 {: codeblock}
clientConfig:
caBundle: CA_BUNDLE_BASE64
url: https://WEBHOOK_URL:443/validate

Show more

Note the following limitations for referencing the webhook app as an IP address or DNS name:



* If the URL is a DNS, then this DNS must be a publicly registered DNS name. Private DNS configurations are not supported.
* If the URL is an external IP address, which means the webhook service is outside of the cluster, the control plane network is used to connect to the service. The control plane must be able to reach the IP address. If, for example, the IP address is from an on-premises network and the control plane can't reach the IP address, the webhook service does not work.
* If the URL is a cluster IP address, which means the webhook service is inside of the cluster, the Kubernetes API needs to connect to cluster network. If you have cluster version 1.21 and later, and your webhook uses the cluster IP address, you must update your webhook to use a Kubernetes service instead.









 I need help with a broken webhook. What can I do?