V1 Migration Guide
==================
.. raw:: html
The new ``ibm_watsonx_ai`` Python SDK 1.0 is backward compatible in most common scenarios,
but a few minor adjustments in code might be needed.
.. raw:: html
What's new?
------------
Refactor and Cleanup
""""""""""""""""""""""
This major release marks a thorough refactoring and cleanup of the codebase.
We've diligently worked to improve code readability and enhance overall performance.
As a result, you can expect a more efficient and maintainable package.
New authorization
"""""""""""""""""
In ``ibm_watsonx_ai`` 1.0, ``Credentials``, a new class, was introduced and it replaces the credentials dictionary.
For examples and more information, see :doc:`Authentication Cloud ` and :doc:`Authentication `
✅ New approach
.. code:: python
from ibm_watsonx_ai import APIClient
from ibm_watsonx_ai import Credentials
credentials = Credentials(
url = "https://us-south.ml.cloud.ibm.com",
token = "***********",
)
client = APIClient(credentials)
❌ Old approach
.. code:: python
from ibm_watsonx_ai import APIClient
credentials = {
"url": "https://us-south.ml.cloud.ibm.com",
"token":"***********",
}
client = APIClient(credentials)
Easier project and space setup
""""""""""""""""""""""""""""""
Starting from ``ibm_watsonx_ai`` 1.0, you can set the default space
or project while initializing the APIClient object.
✅ New approach
.. code:: python
client_project = APIClient(credentials, project_id = project_id)
client_space = APIClient(credentials, space_id = space_id)
❌ Old approach
.. code:: python
client_project = APIClient(credentials)
client_project.set.default_project(project_id)
client_space = APIClient(credentials)
client_space.set.default_space(space_id)
Foundation model functions moved under APIClient
""""""""""""""""""""""""""""""""""""""""""""""""
Starting from ``ibm_watsonx_ai`` 1.0, foundation model functions (``get_model_specs``, ``get_custom_model_specs``,
``get_model_lifecycle``, ``get_model_specs_with_prompt_tuning_support``, ``get_embedding_model_specs``) are moved into the ``client.foundation_models`` object.
Old versions of the functions are not removed but will no longer work because they lack authentication.
✅ New approach - Using functions from `client.foundation_models`.
.. code:: python
client.foundation_models.get_model_specs()
client.foundation_models.get_custom_model_specs()
client.foundation_models.get_custom_model_specs(
model_id='mistralai/Mistral-7B-Instruct-v0.2'
)
client.foundation_models.get_custom_model_specs(limit=20)
client.foundation_models.get_custom_model_specs(limit=20, get_all=True)
client.foundation_models.get_model_lifecycle(
model_id="ibm/granite-13b-instruct-v2"
)
client.foundation_models.get_model_specs_with_prompt_tuning_support()
client.foundation_models.get_embeddings_model_specs()
❌ Old approach - Using functions from the `ibm_watsonx_ai.foundation_models` module.
.. code:: python
from ibm_watsonx_ai.foundation_models import (
get_model_specs,
get_custom_models_spec,
get_model_lifecycle,
get_model_specs_with_prompt_tuning_support,
get_embedding_model_specs
)
get_model_specs(
url="https://us-south.ml.cloud.ibm.com"
)
get_custom_models_spec(api_client=client)
get_custom_models_spec(credentials=credentials)
get_custom_models_spec(api_client=client, model_id='mistralai/Mistral-7B-Instruct-v0.2')
get_custom_models_spec(api_client=client, limit=20)
get_custom_models_spec(api_client=client, limit=20, get_all=True)
get_model_lifecycle(
url="https://us-south.ml.cloud.ibm.com",
model_id="ibm/granite-13b-instruct-v2"
)
get_model_specs_with_prompt_tuning_support(
url="https://us-south.ml.cloud.ibm.com"
)
get_embedding_model_specs(
url="https://us-south.ml.cloud.ibm.com"
)
Breaking changes
""""""""""""""""
* The ``client..list()`` methods don't print the table with listed assets. They return the table as ``pandas.DataFrame``. The optional parameter for the ``return_as_df`` methods was removed.
✅ New approach - Access to credential fields as class attributes.
.. code:: python
conn_list = client.connections.list() ## table not printed
❌ Old approach - Table with listed resources printed.
.. code:: python
conn_list = client.connections.list()
### Table returned as pandas.DataFrame `conn_list` object and printed output:
--------------------------- ------------------------------------ -------------------- ------------------------------------
NAME ID CREATED DATASOURCE_TYPE_ID
Connection to COS 71738a79-6585-4f33-bf4a-18907abcf06a 2024-04-25T10:42:23Z 193a97c1-4475-4a19-b90c-295c4fdc6517
--------------------------- ------------------------------------ -------------------- ------------------------------------
* Methods and parameters that were marked as deprecated in ``ibm_watsonx_ai v0`` were removed. For example:
✅ New approach - Use the method that replaced the deprecated one, for ``get_uid`` it's ``get_id``
.. code:: python
asset_id = client.data_assets.get_id(asset_details)
❌ Old approach - Deprecated ``get_uid`` method called
.. code:: python
client.data_assets.get_uid(asset_details)
* ``client.credentials`` and ``client.wml_credentials`` returns a ``Credentials`` object instead of a dictionary.
✅ New approach - Access to credential fields as class attributes.
.. code:: python
from ibm_watsonx_ai import APIClient
from ibm_watsonx_ai import Credentials
credentials = Credentials(
url = "https://us-south.ml.cloud.ibm.com",
token = "***********",
)
client = APIClient(credentials)
url = client.credentials.url
# OR
url = credentials.url
❌ Old approach - Access to credential fields as keys in a dictionary.
.. code:: python
from ibm_watsonx_ai import APIClient
credentials = {
"url": "https://us-south.ml.cloud.ibm.com",
"token":"***********",
}
client = APIClient(credentials)
url = client.wml_credentials.get('url')
* Parameter changes in ``service.score(...)`` for online deployment
``service.score(...)`` has an additional ``forecast_window`` parameter added before the ``transaction_id`` parameter.
From ``ibm_watsonx_ai`` 1.0.0, in the ``service.score(...)`` function, you need to pass all named parameters except for the ``payload`` parameter.
✅ New approach - named parameters and a new parameter.
.. code:: python
predictions = service.score({
"observations": AbstractTestTSAsync.observations,
"supporting_features": AbstractTestTSAsync.supporting_features,
},
forecast_window=1,
transaction_id=transaction_id,
)
❌ Old approach - all parameters are not named, the ``forecast_window`` parameter is absent
.. code:: python
predictions = service.score({
"observations": AbstractTestTSAsync.observations,
"supporting_features": AbstractTestTSAsync.supporting_features,
},
transaction_id,
)
Deprecations
""""""""""""
* Initializing ``APIClient`` with ``credentials`` as a dictionary is deprecated.
* All parameters with ``wml`` in the name are deprecated. They were renamed to:
- ``wml_credentials`` -> ``credentials``
- ``wml_client`` -> ``api_client``.
* ``id`` naming was aligned in parameters and methods and all ``uid`` were replaced by ``id``. Methods that were using ``uid`` were removed or marked as deprecated.