FAQ#

SDK ignores SIGINT/SIGTERM signals#

We use asyncio under the hood, running in its own thread to achieve maximal performance. This means signals from the main thread are not propagated; thus, SDK does not know you want to exit. To make SDK reacts to such signal, you need to call our prepared function.

Example can be found here.

Which API Endpoint should I use?#

In previous version, you were used to pass the whole URL including it’s path and version - this is not true anymore. See following examples to get it right.

Correct Example

https://bam-api.res.ibm.com

Wrong Example

https://bam-api.res.ibm.com/v1 (V1 is not supported)

https://bam-api.res.ibm.com/v2 (V2 is automatically appended)

https://bam-api.res.ibm.com/v2?version=2024-01-01 (SDK handles API versions internally)

Which endpoints version SDK uses?#

Use the following options to determine which version of a given endpoint SDK uses.

  1. From the Changelog (“API Endpoint Versions” section) under concrete release.

  2. Find it programmatically by retrieving the concrete method’s metadata (see example).

When I run multiple text generations simultaneously one is hanging, how to fix that?#

When you run a text generation task, the SDK first retrieves your maximal concurrency limit (this limit can vary from user to user, but generally, there is a default) and use it as the upper bound. This implies that the different processes may get stack or even error. To prevent such a situation, you can set your maximal limit for each execution via the execution_options parameter.

Such an example with multiple limits and processes can be found here.

Concurrency limiting without threading/multiprocessing

For a single instance of the SDK, concurrency handling is done automatically, but you can still limit the number of requests.

How to find out your current limits?

To find your limit, use the following methods client.text.generation.limit.retrieve (text) / client.text.embedding.limit.retrieve (embeddings). If your service is not mentioned, try to find the limit attribute.

How to increase your limit?

Contact administrator or your manager.

SSL_CERTIFICATE_VERIFY_FAILED on macOS#

This may be caused by the brew installer for Python not adding the correct certificates. Please create a py file from the following snippet and execute it with python3.

# install_certifi.py
#
# sample script to install or update a set of default Root Certificates
# for the ssl module.  Uses the certificates provided by the certifi package:
#       https://pypi.python.org/pypi/certifi

import os
import os.path
import ssl
import stat
import subprocess
import sys

STAT_0o775 = ( stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR
             | stat.S_IRGRP | stat.S_IWGRP | stat.S_IXGRP
             | stat.S_IROTH |                stat.S_IXOTH )


def main():
    openssl_dir, openssl_cafile = os.path.split(
        ssl.get_default_verify_paths().openssl_cafile)

    print(" -- pip install --upgrade certifi")
    subprocess.check_call([sys.executable,
        "-E", "-s", "-m", "pip", "install", "--upgrade", "certifi"])

    import certifi

    # change working directory to the default SSL directory
    os.chdir(openssl_dir)
    relpath_to_certifi_cafile = os.path.relpath(certifi.where())
    print(" -- removing any existing file or link")
    try:
        os.remove(openssl_cafile)
    except FileNotFoundError:
        pass
    print(" -- creating symlink to certifi certificate bundle")
    os.symlink(relpath_to_certifi_cafile, openssl_cafile)
    print(" -- setting permissions")
    os.chmod(openssl_cafile, STAT_0o775)
    print(" -- update complete")

if __name__ == '__main__':
    main()

Source: https://stackoverflow.com/questions/44649449/brew-installation-of-python-3-6-1-ssl-certificate-verify-failed-certificate/44649450#44649450