PackagePackagetypeA library you install and call yourself.See every one →What this type is →independently maintainedindependently maintainedoriginPublished by one person or a small company outside SAP. Says nothing about quality; the readings say that.See every one →

abap-sdk-nwas-x

An ABAP client library for IBM's watsonx.ai and watsonx.ai Runtime APIs, installed into an SAP NetWeaver AS ABAP system through abapGit, generating and refreshing the IAM token from an API key.

The ABAP SDK for IBM watsonx wraps the watsonx.ai and watsonx.ai Runtime APIs as ABAP classes, ZCL_IBMX_WATSONX_AI_ML_V1 and ZCL_IBMX_WML_V4, each instantiated through zcl_ibmx_service_ext=>get_instance and assigned to package ZIBMX when the abapGit repository is set up. Token management is either the SDK's or the caller's: pass i_apikey to that method and the SDK generates the IAM bearer token under the cover and refreshes it before it expires, leave it out and the SDK user implements token management instead. Service credentials and the other parameters a wrapper class needs at instantiation can sit in table ZIBMX_CONFIG rather than in the application. It is for any SAP application run on SAP NetWeaver 7.50 and above, such as SAP Business Suite or SAP S/4HANA on-premises edition, and needs an IBM Cloud account; a separate repository, abap-sdk-btp-x, covers the SAP BTP ABAP environment. IBM calls it a community SDK, written by ABAPers for the ABAPers in the open-source community, and says a community release is not updated on the same schedule as IBM-supported SDKs.

Facts

Last pushLicenceApache-2.0

Where it sits

Lives in
Provides
LLM integrationABAPLLM integrationcapabilityCalling a language model from application code with the tenant, destination and credential handling already solved instead using an SDK call with a hand-rolled key.
Requires
abapGitabapGitartifactInstalls the SDK into the SAP system; the README's installation steps are to install abapGit and then clone the SDK repository with it.

Who is behind it

International Business MachinesInternational Business MachinesOrganisationMaintains this
In the atlas: maintains 1
@IBM
maintainerJochen RöhrigPersonContributes to this
In the atlas: contributes to 2
@jridfe
1 contributor

What it declares

Every artifact

Type
Package
Origin
Independently maintained

As a package

Where it runs
Inside its host
Distributed through
abapGit

Connections2

README

quoted from IBM/abap-sdk-nwas-x under Apache-2.0, read
IBM/abap-sdk-nwas-x/README.mdOn GitHub

ABAP SDK for IBM watsonx, using SAP NetWeaver

License

ABAP® client library to use the watsonx.ai Runtime (formerly Watson Machine Learning) and the watsonx.ai APIs.

This is a community SDK written by ABAPers for the ABAPers in the Open Source community, to provide easy usage of IBM® watsonx™ services in innovation initiatives combined with any SAP® application which is run on SAP NetWeaver® 7.50 and above, such as SAP Business Suite or SAP S/4HANA® on-premises edition. It is the choice and responsibility of application developers how this community SDK is used.

Additionally, as the ABAP SDK is a community release it is not updated with the same schedule as IBM-supported SDKs. Please see more information in Support and Feedback.

Choose ABAP SDK release for the applicable ABAP Runtime

abap-sdk-nwas-xabap-sdk-btp-x
for SAP NetWeaver® AS ABAP 7.50+for SAP BTP ABAP Environment
tested on SAP Business Suite and SAP S/4HANA on-premises editiontested with SAP BTP ABAP Environment 2405
this repository

Table of Contents

Announcements

Version 1.5.0 released

Version v1.5.0 of the SDK has been released - see what's changed in the migration guide.

Before you begin

Installation

The client library is provided as abapGit repository. Proceed as follows to clone the ABAP SDK code to your SAP system.

  1. Install abapGit, using the abapGit Docs
  2. Use abapGit to clone the ABAP SDK Git repository into your SAP system.
  3. Assign the ABAP SDK to the package ZIBMX when performing setup of the abapGit repository.

SAP System Configuration

SAP Profile Parameters

The following SAP profile parameter settings are recommended.

icm/HTTPS/client_sni_enabled = TRUE
ssl/ciphersuites = 135:PFS:HIGH::EC_P256:EC_HIGH
ssl/client_ciphersuites = 150:PFS:HIGH::EC_P256:EC_HIGH
Proxy configuration

The client library respects the ABAP proxy settings. If you are using a central proxy server that is not already configured in your SAP system, proceed as follows.

  1. Logon to the SAP system and call transaction SICF.
  2. Click Execute (or press F8).
  3. Select menu item Client → Proxy Settings.
  4. On tab Global Settings: Select Proxy Setting is Active and No Proxy Setting for Local Server.
  5. On tabs HTTP Protocol and HTTPS Protocol specify the proxy Host Name and Port. If the proxy server requires logon credentials, also specify User Name and Password.
  6. Click Execute (F8) and OK.
SSL Certificates

Communication between SAP and the IBM Cloud is secured by the Transport Layer Security (TLS) protocol, also known as Secure Sockets Layer (SSL). SSL requires certificates that must be stored on the SAP application server in the Personal Security Environment (PSE). Transaction STRUST is used to maintain the PSE.

Determine required certificate

If a call to an IBM Cloud service failed due to a missing SSL certificate, check the ICM trace file to find the required certificate. To do so, call transaction SMICM and select menu item Goto → Trace File → Display End. Alternatively, call transaction AL11 and navigate to file DIR_HOME/dev_icm. Find last entry in trace file that indicates error SSSLERR_PEER_CERT_UNTRUSTED, as shown in the example below.

[Thr nn] Peer not trusted
[Thr nn] Certificate:
[Thr nn]  Certificate:
[Thr nn]   Subject:                CN=*.watsonplatform.net, O=INTERNATIONAL BUSINESS MACHINES CORPORATION, L=Armonk, SP=New York, C=US
[Thr nn]   Issuer:                 CN=GeoTrust RSA CA 2018, OU=www.digicert.com, O=DigiCert Inc, C=US
[Thr nn]   Serial Number:          05:1C:46:1B:6E:C2:29:48:BD:F0:03:B3:A6:87:1A:5B
[Thr nn]  Verification result:
[...]
[Thr nn]    SignerCert:
[Thr nn]     Certificate:
[Thr nn]      Subject:                CN=GeoTrust RSA CA 2018, OU=www.digicert.com, O=DigiCert Inc, C=US
[Thr nn]      Issuer:                 CN=DigiCert Global Root CA, OU=www.digicert.com, O=DigiCert Inc, C=US
[Thr nn]      Serial Number:          05:46:FE:18:23:F7:E1:94:1D:A3:9F:CE:14:C4:61:73
[Thr nn]     Verification result:
[...]
[Thr nn]       SignerCert:
[Thr nn]        Certificate:
[Thr nn]         Subject:                CN=DigiCert Global Root CA, OU=www.digicert.com, O=DigiCert Inc, C=US
[...]
[Thr nn] << ---------- End of Secu-SSL Errorstack ----------
[Thr nn]   Target Hostname="stream.watsonplatform.net"
[Thr nn]   SSL NI-hdl 463: local=9.152.20.145:56542  peer=169.48.115.62:443
[Thr nn] <<- ERROR: SapSSLSessionStartNB(sssl_hdl=3fef0000c70)==SSSLERR_PEER_CERT_UNTRUSTED
[Thr nn] *** ERROR => SSL handshake with stream.watsonplatform.net:443 failed: SSSLERR_PEER_CERT_UNTRUSTED (-102)
[Thr nn] The peer's X.509 Certificate (chain) is untrusted

The SSL error stack shows the SSL certificate chain, which in the example above looks like follows:

Certificate Authority TypeCertificate Authority (CA)
end-user*.watsonplatform.net
intermediateGeoTrust RSA CA 2018
rootDigiCert Global Root CA

You can install any of these SSL certificates. However, it is recommended to install the root CA certificate.
Download the appropriate SSL certificate from the provider's website, for example https://www.digicert.com/digicert-root-certificates.htm. Store the certificate file on your computer.

Add an SSL certificate to the PSE

Proceed as follows to add the downloaded SSL certificate to your SAP system's Standard SSL Client PSE.

  1. Logon to the SAP system and call transaction STRUST.
  2. Switch to edit mode (press according tool bar icon).
  3. If a local PSE file does not exist already, create it by right-clicking on SSL client SSL Client (Standard) and selecting Create from context menu. Keep all default settings in next popup dialog.
  4. In Certificate section, click Import (alternatively select menu item Certificate → Import). Choose the certificate file that you have downloaded and import the certificate.
  5. Click button Add to Certificate List.
  6. Click Save (F3).
Restart the ICM (Internet Communication Manager)

It is recommended to restart the ICM after a new SSL certificate has been applied to the PSE. To do so, proceed as follows.

  1. Logon to the SAP system and start transaction SMICM.
  2. If applicable, ensure that the ICM is restarted automatically when ended: Administration → ICM → Restart → Yes.
  3. Select menu item Administration → ICM → Exit Soft → Global.

Credentials

Before you can access a specific service from your SAP system, you must create a service instance in the IBM Cloud and obtain an API key. The API key can be shared among multiple end users of the SAP system, but you must ensure that the selected plan is sufficient to support the expected number of calls or the expected data volume.

All currently supported services support IAM authentication (see below). Service credentials consist of an API key and a URL. Both the API key and the URL are character values that need to be provided as parameters i_apikey and i_url to method zcl_ibmx_service_ext=>get_instance.

You can store the values with your application, but it is suggested to do that in an encrypted format. Using cloud services usually creates costs based on usage for the owner of the service instance, and anyone with the credentials can use the service instance at the owner's expenses. If you want to distribute the costs over multiple cost centers, you need to create a service instance and provide service credentials for each cost center separately.

Configuration table

Service credentials and other parameters that must be specified at watsonx service wrapper ABAP class instantiation can also be provided in table ZIBMX_CONFIG. This table has three keys:

Table KeyDescription
SERVICEThe ABAP class name without prefix ZCL_IBMX_
INSTANCE_UIDID chosen by application developer that must be provided by application as parameter to method zcl_ibmx_service_ext=>get_instance()
PARAMThe parameter name
List of configuration parameters in table ZIBMX_CONFIG
Parameter NameDefault ValueDescription
URLservice-dependentwatsonx service url
APIKEYwatsonx service API keys
PROXY_HOSTProxy server
PROXY_PORTProxy server port
AUTH_NAMEservice-dependentAuthorization, IAM or basicAuth
SSL_IDCLIENTSSL identity, defines PSE for SSL certificates: CLIENT or ANONYM

IAM Authentication

Identity and Access Management (IAM) is a bearer-token based authentication method. Token management is either performed by the ABAP SDK or must be implemented by the SDK user.
If a value for i_apikey is provided by the caller in method zcl_ibmx_service_ext=>get_instance(), the ABAP SDK generates a bearer-token under the cover when needed and refreshes it when it is about to expire.
If i_apikey is not provided for method zcl_ibmx_service_ext=>get_instance(), the ABAP SDK user must implement an individual token management. Before a service method is called the first time, a valid bearer-token must be provided to the watsonx service wrapper ABAP class instance as follows:

  lo_service_class->set_bearer_token( i_bearer_token = '...' ).

Afterwards, service methods can be called as long as the provided token is valid. When the token has expired, the method above must be called again with a new (refreshed) bearer-token as parameter.

Usage

The client library is delivered as package ZIBMX. Once the Git repository has been cloned to the SAP system, a watsonx service instance is wrapped by an ABAP class instance.
The following watsonx services are currently supported:

ServiceABAP Class Name
watsonx.ai RuntimeZCL_IBMX_WML_V4
watsonx.aiZCL_IBMX_WATSONX_AI_ML_V1

Using the client library requires two steps:

  1. Create an instance of the watsonx service wrapper ABAP class by calling method zcl_ibmx_service_ext=>get_instance.

      data:
        lo_service_class type <ABAP Class Name>.
    
      zcl_ibmx_service_ext=>get_instance(
        exporting
          i_url      = <url>
          i_apikey   = <api key>
          ...
        importing
          eo_instance = lo_service_class ).

    Note
    Depending on the API operation, the <url> parameter may vary as described in Endpoint URLs. If you use API operations with different endpoint URLs in the same program, you need to create an instance of the watsonx service wrapper ABAP class for each endpoint URL and use the instances accordingly in your program.

  2. Call the watsonx service API endpoint by invoking the corresponding class method.

      try.
          lo_service_class->method(
            exporting
              is_input = ...
            importing
              es_output = ... ).
        catch zcx_ibmx_service_exception into data(lo_service_exception).
          ...
      endtry.
Examples
watsonx.ai Example (AI Sevices)
*  Z_WATSONX_AI_SERVICES_DEMO
*  This sample code deploys arbitrary Python code as Python AI Service on a watsonx deployment space
*    and calls the deployed function.
*    It also returns a CURL command that can be called to invoke the function endpoint url.
*
*  Copy this code into
*    - an ABAP report and remove all comment prefixes "[PRG]
*    - a Console Application (RAP) and remove all comment prefixes "[RAP]
*  Adjust credentials and run code.

constants:
  " Prerequisite: watsonx deployment space must be created and id specified here:
  c_url           type string value `https://eu-de.ml.cloud.ibm.com`,   " <- ADJUST
  c_apikey        type string value `KHds7uuH...A7892Gt6`,              " <- ADJUST
  c_space_id      type string value `c3a99662...21349082`,              " <- ADJUST
  c_function_name type string value `demo-ai-service-function`,
  c_serving_name  type string value `abapsdk_test`,
  c_version       type string value `2024-03-14`.

" convert Python function code to GZIP file (ZIP with file header 0x04034b50 is not supported)
try.
    " some Python code that bounces the received data (http method, path parameter, payload (= json request body)) as response body
    data(lx_code) = zcl_ibmx_service=>convert_string_to_utf8(
      i_string =
        `def ai_service_function(context):`                                                && cl_abap_char_utilities=>newline &&
        `  def generate(context) -> dict:`                                                 && cl_abap_char_utilities=>newline &&
        `    payload     = context.get_json()`                                             && cl_abap_char_utilities=>newline &&
        `    path_suffix = context.get_path_suffix()`                                      && cl_abap_char_utilities=>newline &&
        `    method      = context.get_method()`                                           && cl_abap_char_utilities=>newline &&
        `    return {'body': {'method': method, 'path': path_suffix, 'payload': payload}}` && cl_abap_char_utilities=>newline &&
        `  return generate`
    ).
    cl_abap_gzip=>compress_binary_with_header(
      exporting
        raw_in   = lx_code
      importing
        gzip_out = data(lx_gzipfile)
    ).
  catch cx_root into data(lo_zip_exception).
    "[RAP] out->write( lo_zip_exception->get_longtext(  ) ). exit.
    "[PRG] message lo_zip_exception type 'E'.
endtry.

" instantiate watsonx.ai wrapper class (explicit type declaration is required)
data: lo_watsonx_ai type ref to zcl_ibmx_watsonx_ai_ml_v1.
zcl_ibmx_service_ext=>get_instance(
  exporting
    i_url       = c_url
    i_apikey    = c_apikey
    i_version   = c_version
  importing
    eo_instance = lo_watsonx_ai ).

" create Python function as asset in watsonx deployment space
try.
    lo_watsonx_ai->ai_services_create(
      exporting
        i_aiservicerequest = value zcl_ibmx_watsonx_ai_ml_v1=>t_aiservice_request(
          space_id      = c_space_id
          name          = c_function_name
          description   = 'demo'
          software_spec = value zcl_ibmx_watsonx_ai_ml_v1=>t_software_spec_rel(
            name = `runtime-24.1-py3.11`
          )
        )
      importing
        e_response = data(ls_result_create)
    ).

  catch zcx_ibmx_service_exception into data(lo_create_exception).
    "[RAP] out->write( lo_create_exception->get_longtext(  ) ). exit.
    "[PRG] message lo_create_exception type 'E'.
endtry.
data(lv_aiservice_id) = ls_result_create-metadata-id.

" upload AI Service Python function code
try.
    lo_watsonx_ai->ai_services_upload_code(
      exporting
        i_id          = lv_aiservice_id
        i_space_id    = c_space_id
        i_upload_code = lx_gzipfile
        i_contenttype = 'application/gzip'
      importing
        e_response    = data(ls_result_upload)
    ).
  catch zcx_ibmx_service_exception into data(lo_upload_exception).
    "[RAP] out->write( lo_upload_exception->get_longtext(  ) ). exit.
    "[PRG] message lo_upload_exception type 'E'.
endtry.

" deploy AI Service Python function
try.
    lo_watsonx_ai->create_deployment(
      exporting
        i_deploymentresourceprototype = value zcl_ibmx_watsonx_ai_ml_v1=>t_deployment_resrc_prototype(
          space_id      = c_space_id
          name          = `Deployment for ` && c_function_name
          asset         = value zcl_ibmx_watsonx_ai_ml_v1=>t_rel(
             id         = lv_aiservice_id
          )
          hardware_spec = value zcl_ibmx_watsonx_ai_ml_v1=>t_hardware_spec(
            name       = 'S'
          )
          online        = value zcl_ibmx_watsonx_ai_ml_v1=>t_online_deployment(
            parameters = value zcl_ibmx_watsonx_ai_ml_v1=>t_online_deployment_parameters(
              serving_name = c_serving_name
            )
          )
        )
      importing
        e_response = data(ls_deployment_result)
    ).
  catch zcx_ibmx_service_exception into data(lo_deployment_exception).
    " http status 400 (bad request) -> delete existing deployment, if exists, and retry
    "[RAP] out->write( lo_deployment_exception->get_longtext(  ) ). exit.
    "[PRG] message lo_deployment_exception type 'E'.
endtry.
data(lv_deployment_id) = ls_deployment_result-metadata-id.

" wait until deployment is complete
do 20 times.
  try.
      lo_watsonx_ai->deployments_get(
        exporting
          i_space_id      = c_space_id
          i_deployment_id = lv_deployment_id
        importing
          e_response      = data(ls_deployment)
      ).
    catch zcx_ibmx_service_exception into data(lo_deployment_get_exception).
      "[RAP] out->write( lo_deployment_get_exception->get_longtext(  ) ). exit.
      "[PRG] message lo_deployment_get_exception type 'E'.
  endtry.
  if not ls_deployment-entity-status-state eq 'initializing'.
    exit.
  endif.
  wait up to 5 seconds.
enddo.


" INFERENCE

" declare structure of request response
data:
  begin of lv_response,
    begin of payload,
      message type string,
    end of payload,
    path type string,
    method type string,
  end of lv_response.

" call AI Service function endpoint and parse response
data(lv_url) = `/ml/v4/deployments/` && c_serving_name && `/ai_service/mypath`.
data(ls_request_prop) = value zcl_ibmx_service=>ts_request_prop(
  url  = value zcl_ibmx_service=>ts_url(
    path = lv_url
  )
  body = `{ "message": "This message was sent via ABAP" }`
  header_content_type = 'application/json'
).
try.
    data(lo_response) = lo_watsonx_ai->http_post( i_request_prop = ls_request_prop ).
    data(lv_json) = zcl_ibmx_service=>get_response_string( lo_response ).
    zcl_ibmx_service=>parse_json(
      exporting
        i_json       = lv_json
      changing
        c_abap       = lv_response ).
  catch zcx_ibmx_service_exception into data(lo_inference_exception).
    "[RAP] out->write( lo_inference_exception->get_longtext(  ) ). exit.
    "[PRG] message lo_inference_exception type 'E'.
endtry.

" compile CURL command to test deployment endpoint
data(lv_curl_command) =
  `curl -X POST -H "Authorization: Bearer ${IAM_ACCESS_TOKEN}" `
  && `-d '{ "message": "This message was sent via CURL" }' `
  && `"` && ls_deployment-entity-status-inference[ 1 ]-url && `/mypath"`.

" write success message
data(lv_msg) = `Received message "` && lv_response-payload-message && `" from deployed AI Service function. Try CURL command below.`.
  "[RAP] out->write( lv_msg ).
  "[RAP] out->write( lv_curl_command ).
  "[PRG] write: lv_msg.
  "[PRG] write: / lv_curl_command.
watsonx.ai Example (Text Generation)
*  Z_WATSONX_AI_DEMO
*  This sample code runs text generation with a watsonx.ai foundation model.
*
*  Copy this code into
*    - an ABAP report and remove all comment prefixes "[PRG]
*    - a Console Application (RAP) and remove all comment prefixes "[RAP]
*  Adjust credentials and run code.

" instantiate watsonx.ai wrapper class (explicit type declaration is required)
data: lo_watsonx_ai type ref to zcl_ibmx_watsonx_ai_ml_v1.
zcl_ibmx_service_ext=>get_instance(
  exporting
    i_url     = 'https://eu-de.ml.cloud.ibm.com'   " <- ADJUST
    i_apikey  = 'X7Ziqsan...FfOAtAno'              " <- ADJUST
    i_version = '2023-05-29'
  importing
    eo_instance = lo_watsonx_ai ).

" run text generation
try.
    data(lv_prompt) = `The highest mountain in Europe is`.
    lo_watsonx_ai->text_generation(
      exporting
        i_textgenrequest = value zcl_ibmx_watsonx_ai_ml_v1=>t_text_gen_request(

          " prompt
          input = lv_prompt

          " model parameters
          model_id   = 'ibm/granite-13b-chat-v2'
          parameters = value zcl_ibmx_watsonx_ai_ml_v1=>t_text_gen_parameters(
            decoding_method    = 'greedy'
            max_new_tokens     = 20
            repetition_penalty = '1.05'
            stop_sequences = value #( ( `. ` ) )  " stop after first sentence
          )

          project_id = '3e606d0c...459b7c38'       " <- ADJUST
        )
      importing
        e_response = data(ls_generated_document) ).
  catch zcx_ibmx_service_exception into data(lo_service_exception).
    "[RAP] out->write( lo_service_exception->get_longtext(  ) ). exit.
    "[PRG] message lo_service_exception type 'E'.
endtry.

" display generated text
"[RAP] out->write( lv_prompt ).
"[PRG] write lv_prompt.
loop at ls_generated_document-results into data(ls_result).
"[RAP]   out->write( ls_result-generated_text ).
"[PRG]   write / ls_result-generated_text.
endloop.

API Reference

GitHub Pages contain the ABAP Client Library for watsonx API Reference.

Support and Feedback

The ABAP SDK is a community SDK for IBM watsonx, created by the IBM watsonx development community and SAP's ABAP development community – written by ABAPers from IBM Systems. Therefore, as a community release it is not updated with the same schedule as IBM-supported SDKs and does not include support by IBM.

The code in this repository is generated from the OpenAPI specs of the supported services. Hence, pull requests must not be integrated directly into the code. If you would like to request a new feature or report a bug, please raise an issue instead of sending a pull request.

License

This library is licensed under the Apache 2.0 license.

Apache-2.0, read

History

Latest

v1.5.0

Other 4

Notes

Version 1.5.0 of the SDK includes the following features:

Supported services

Version 1.5.0 of the SDK includes the following enhancements and changes compared to version 1.4.0:

Enhanced services

watsonx.ai
  • Support for new category Notebooks

    • Methods Notebooks_Create, Notebooks_Delete, Notebooks_List, Notebooks_Revert, Notebooks_Update
  • Support for new category Notebook Versions

    • Methods Notebook_Versions_Create, Notebook_Versions_Delete, Notebook_Versions_Get, Notebook_Versions_List
  1. v1.4.0

    Other 4

    Notes

    Version 1.4.0 of the SDK includes the following features:

    Supported services

    Version 1.4.0 of the SDK includes the following enhancements and changes to version 1.3.0:

    Enhanced services

    watsonx.ai
    • Additional methods for category Prompts

      • New method Post_Prompt_Chat_Item
    • Support for new category Prompt Sessions

      • Methods Post_Prompt_Session, Patch_Prompt_Session, Get_Prompt_Session, Put_Prompt_Session_Lock, Get_Prompt_Session_Lock, Delete_Prompt_Session, Post_Prompt_Session_Entry, Get_Prompt_Session_Entries, Get_Prompt_Session_Entry, Delete_Prompt_Session_Entry, Pst_Prmpt_Sssn_Entry_Chat_Item
  2. v1.3.0

    Other 9

    Notes

    Version 1.3.0 of the SDK includes the following features:

    Supported services

    Version 1.3.0 of the SDK includes the following enhancements and changes to version 1.2.0:

    Enhanced services

    watsonx.ai
    • Additional methods for category Deployments

      • New methods Deployments_Text_Chat, Deployments_Text_Chat_Stream
    • Support for new category AI Services

      • Methods AI_Services_Create, AI_Services_List, AI_Services_Get, AI_Services_Update, AI_Services_Delete, AI_Services_Upload_Code, AI_Services_Download_Code, AI_Services_Create_Revisions, AI_Services_List_Revisions
    • Support for new category AutoAI RAG

      • Methods Create_AutoAI_Rags, List_AutoAI_Rags, Get_AutoAI_Rags, Delete_AutoAI_Rags
    • Support for new category Prompts

      • Methods Post_Prompt, Get_Prompt, Patch_Prompt, Delete_Prompt, Put_Prompt_Lock, Get_Prompt_Lock, Get_Prompt_Input
    • Support for new category Time Series

      • Method Time_Series_Forecast

    Breaking changes

    watsonx.ai
    watsonx.ai Runtime (formerly: Watson Machine Learning)
  3. v1.2.0

    Other 6

    Notes

    Version 1.2.0 of the SDK includes the following features:

    Supported services

    Version 1.2.0 of the SDK includes the following enhancements and changes to version 1.1.0:

    Enhanced services

    watsonx.ai
    • Support for new category Text chat

      • New methods Text_Chat, Text_Chat_Stream
    • Support for new category Text extraction

      • New methods Text_Extraction, List_Text_Extractions, Text_Extraction_Get, Text_Extraction_Delete
    • Support for new category Text rerank

      • New method Text_Rerank

    Other changes

    watsonx.ai Runtime (formerly: Watson Machine Learning)
    • Service Watson Machine Learning has been renamed to watsonx.ai Runtime.
      The ABAP class name remains ZCL_IBMX_WML_V4.
  4. v1.1.0

    Other 5

    Notes

    Version 1.1.0 of the SDK includes the following features:

    Supported services

    Version 1.1.0 of the SDK includes the following enhancements and changes to version 1.0.0:

    Enhanced services

    Watson Machine Learning V4
    • Enablement of methods Deployments_Update, Deployment_Job_Def_Update, Experiments_Update, Functions_Update, Models_Update, Model_Definitions_Update, Pipelines_Ppdate, Remote_Training_Systems_Update and Training_Definitions_Update for SAP NetWeaver AS ABAP 7.50+.
    watsonx.ai V1
    • New method Text_Embeddings
    • Enablement of method Deployments_Update for SAP NetWeaver AS ABAP 7.50+.
  5. v1.0.0

    Other 2

    Notes

    Version 1.0.0 of the SDK includes the following features:

    Supported services

LLM integration
  1. llm_clientABAP client with one interface to chat-completion LLM APIsfrom ABAP
  2. abap-agent-runtimeABAP-native MCP endpoint that drives opted-in abap2UI5 appsfrom ABAP
  3. abap_btocs_ollamaB-Tocs ABAP SDK plugin connecting to Ollama modelsfrom ABAP
  4. SAP AI CoreAI runtime on BTP with the Generative AI Hubfrom BTP/BAIP
  5. cap-java/cds-aiBridge from CAP Java to SAP AI Core, with Fiori field recommendationsfrom CAP
  6. @cap-js/aiValue-help recommendations and SAP AI Core as a CAP servicefrom CAP
  7. cap-llm-pluginGenerative AI in CAP with fields anonymised through SAP HANAfrom CAP
  8. @geertjanklaps/cds-toon-ai-protocol-adapterProtocol adapter serving CAP data as TOON instead of JSONfrom CAP
  9. @jerome-benoit/sap-ai-providerVercel AI SDK provider for SAP AI Corefrom CAP
  10. ui5-cap-ai-featuresCDS plugin and UI5 controls for AI text features via SAP AI Corefrom CAP
  11. Microsoft AI SDK for SAPABAP library for calling Azure OpenAI and OpenAIfrom ABAP
  12. zllmABAP framework for chaining and orchestrating LLM callsfrom ABAP
  13. ABAP AI SDKSAP reuse library for calling large language models from ABAPfrom ABAP
  14. @sap-ai-sdk/ai-apiAI Core control plane API surface of SAP's AI SDKfrom CAP
  15. @sap-ai-sdk/coreShared internals of SAP's AI SDKfrom CAP
  16. @sap-ai-sdk/foundation-modelsClient for foundation models via SAP AI Core and Generative AI Hubfrom CAP
  17. @sap-ai-sdk/orchestrationOrchestration Service client for templating, grounding and maskingfrom CAP
  18. @sap-ai-sdk/prompt-registryClient for prompts kept in SAP's prompt registryfrom CAP
  19. @saptarishi/cds-plugin-llmCAP service kind putting eleven model providers behind one APIfrom CAP
  20. @shahid.la/cds-db-nlquery-mcpMCP server answering plain-English questions against a CDS schemafrom CAP
  21. @ui5/webcomponentsSAP's UI elements as standard custom elementsfrom UI5
  22. abap-sdk-nwasAn ABAP client library for IBM Watson's Discovery, Language Translator, Natural Language Understanding, Speech to Text, Text to Speech and Assistant services, installed through abapGit.from ABAP

Details

Sources3
Added by handdiscovered herechecked
github.com/IBM/abap-sdk-nwas-xtree, pushes, contributors, CIchecked
README.mdquoted, and what the entry declareschecked

Sources are graph entities: the same page may back several entries, and an unreachable source flags every row that rests on it.

Compatibility and provenance
discovered viaAdded by hand
first seen in the atlas
ecosystem and domainabap, ai-and-agents
abaplint
issues under its own abaplint configuration13,638
lines36,041
statements25,948
objects15
files16
analysed, main
abaplint version2.120.84
Flavors1
Standard ABAP
“combined with any SAP® application which is run on SAP NetWeaver® 7.50 and above, such as SAP Business Suite or SAP S/4HANA® on-premises edition.” — IBM/abap-sdk-nwas-x — READMEchecked
Contributors1

From the repository’s contributor list, .

History in the atlas1
  1. First seen.
For your agent
Ref
artifact:ibm-abap-sdk-nwas-x
JSON
/artifacts/ibm-abap-sdk-nwas-x.json
MCP
Connecting an agent