Source code for ibm_watsonx_ai.gateway.models

#  -----------------------------------------------------------------------------------------
#  (C) Copyright IBM Corp. 2025.
#  https://opensource.org/licenses/BSD-3-Clause
#  -----------------------------------------------------------------------------------------
import datetime

import pandas as pd

from ibm_watsonx_ai import APIClient
from ibm_watsonx_ai.wml_resource import WMLResource


[docs] class Models(WMLResource): """Model Gateway models class.""" def __init__(self, api_client: APIClient): WMLResource.__init__(self, __name__, api_client)
[docs] def create( self, provider_id: str, model: str, alias: str | None = None, metadata: dict | None = None, ) -> dict: """Register model in Model Gateway. :param provider_id: unique provider ID obtained from provider details :type provider_id: str :param model: model name as supported by provider :type model: str :param alias: alias for registered model, can be used later as model name during embeddings or text/chat completions calls :type alias: str, optional :param metadata: additional metadata which can be added for the model :type metadata: dict, optional :returns: model details :rtype: dict """ request_json = {"id": model} if alias: request_json["alias"] = alias if metadata is not None: request_json["metadata"] = metadata response = self._client.httpx_client.post( self._client._href_definitions.get_gateway_models_href(provider_id), headers=self._client._get_headers(), json=request_json, ) return self._handle_response(201, "model creation", response)
[docs] def get_details( self, *, model_id: str | None = None, provider_id: str | None = None ) -> dict: """Get details of model or models: - `model_id` is set - details for single model are returned, `provider_id` if set is ignored - `provider_id` is set, `model_id` is `None` - details for all models for given provider are returned - both `model_id` and `provider_id` are `None` - all models details are returned :param model_id: unique model ID :type model_id: str, optional :param provider_id: unique provider ID, ignored if `model_id` is set :type provider_id: str, optional :returns: details of model/models :rtype: dict """ if model_id: response = self._client.httpx_client.get( self._client._href_definitions.get_gateway_model_href(model_id), headers=self._client._get_headers(), ) return self._handle_response(200, "getting model details", response) elif provider_id: response = self._client.httpx_client.get( self._client._href_definitions.get_gateway_models_href(provider_id), headers=self._client._get_headers(), ) return self._handle_response(200, "getting models details", response) else: response = self._client.httpx_client.get( self._client._href_definitions.get_gateway_all_tenant_models_href(), headers=self._client._get_headers(), ) return self._handle_response( 200, "getting all tenant models details", response )
[docs] def list(self, provider_id: str | None = None) -> pd.DataFrame: """List models registered in Model Gateway. List can be filtered by `provider_id`. :param provider_id: ID of provider added into Model Gateway :type provider_id: str, optional :returns: dataframe containing list results :rtype: pandas.DataFrame """ models_details = self.get_details(provider_id=provider_id)["data"] models_values = [ ( m["uuid"], m["id"], datetime.datetime.fromtimestamp(m["created"]), m["owned_by"], ) for m in models_details ] table = self._list( models_values, ["ID", "MODEL", "CREATED", "TYPE"], limit=None ) return table
[docs] def delete(self, model_id: str) -> str: """Unregister model from Model Gateway. :param model_id: unique model ID obtained from model details :type model_id: str :return: status ("SUCCESS" if succeeded) :rtype: str """ response = self._client.httpx_client.delete( self._client._href_definitions.get_gateway_model_href(model_id), headers=self._client._get_headers(), ) return self._handle_response( 204, "model deletion", response, json_response=False )
[docs] @staticmethod def get_id(model_details: dict) -> str: """Get model ID from model details. :param model_details: details of the model registered in Model Gateway :type model_details: dict :returns: unique model ID :rtype: str """ return model_details["uuid"]