IBM watsonx.ai

Le modèle Large de Mistral AI est disponible sur la plateforme IBM watsonx.ai en tant que solution entièrement managée.

Premiers pas

Premiers pas

Les sections suivantes décrivent les étapes pour interroger Mistral Large sur la version SaaS d'IBM watsonx.ai.

Prérequis

Prérequis

Les éléments suivants sont requis :

  • Un projet IBM watsonx (IBM_CLOUD_PROJECT_ID)
  • Un Service ID avec une politique d'accès permettant l'utilisation du service Watson Machine Learning.

Pour activer l'accès à l'API, vérifiez que :

  • Votre Service ID a été ajouté au projet en tant qu'EDITOR.
  • Vous avez généré une clé API (IBM_CLOUD_API_KEY) pour votre Service ID.
Interroger le modèle (Chat Completion)

Interroger le modèle (Chat Completion)

Vous pouvez interroger Mistral Large en utilisant soit le SDK d'IBM, soit des appels HTTP simples.

Avertissement

Les exemples ci-dessous utilisent le package Python mistral-common pour formater correctement les messages utilisateur avec des tokens spéciaux. Évitez de passer des chaînes brutes ou de gérer manuellement les tokens spéciaux, car cela peut entraîner des erreurs de tokenisation silencieuses qui dégradent la qualité des résultats du modèle.

Vous devrez exécuter votre code depuis un environnement virtuel contenant les packages suivants :

  • httpx (testé avec 0.27.2)
  • ibm-watsonx-ai (testé avec 1.1.11)
  • mistral-common (testé avec 1.4.4)

Dans l'extrait suivant, votre clé API génère un token IAM, et l'appel au modèle utilise ce token pour l'authentification.

from ibm_watsonx_ai import Credentials
from ibm_watsonx_ai.foundation_models import ModelInference
from ibm_watsonx_ai.metanames import GenTextParamsMetaNames as GenParams
from mistral_common.tokens.tokenizers.mistral import MistralTokenizer
from mistral_common.protocol.instruct.request import ChatCompletionRequest
from mistral_common.protocol.instruct.messages import UserMessage
import os
import httpx

IBM_CLOUD_REGIONS = {
    "dallas": "us-south",
    "london": "eu-gb",
    "frankfurt": "eu-de",
    "tokyo": "jp-tok"
}
IBM_CLOUD_PROJECT_ID = "xxx-xxx-xxx"  # Replace with your project ID

def get_iam_token(api_key: str) -> str:
    """Return an IAM access token generated from an API key."""
    headers = {"Content-Type": "application/x-www-form-urlencoded"}
    data = f"apikey={api_key}&grant_type=urn\:ibm\:params\:oauth\:grant-type\:apikey"
    resp = httpx.post(
        url="https://iam.cloud.ibm.com/identity/token",
        headers=headers,
        data=data,
    )
    token = resp.json().get("access_token")
    return token

def format_user_message(raw_user_msg: str) -> str:
    """Return a formatted prompt using the official Mistral tokenizer."""
    tokenizer = MistralTokenizer.v3()  # Use v3 for Mistral Large
    tokenized = tokenizer.encode_chat_completion(
        ChatCompletionRequest(
            messages=[UserMessage(content=raw_user_msg)],
            model="mistral-large"
        )
    )
    return tokenized.text

region = "frankfurt"  # Define your region here
api_key = os.environ["IBM_API_KEY"]
access_token = get_iam_token(api_key=api_key)
credentials = Credentials(
    url=f"https://{IBM_CLOUD_REGIONS[region]}.ml.cloud.ibm.com",
    token=access_token
)
params = {
    GenParams.MAX_NEW_TOKENS: 256,
    GenParams.TEMPERATURE: 0.0
}
model_inference = ModelInference(
    project_id=IBM_CLOUD_PROJECT_ID,
    model_id="mistralai/mistral-large",
    params=params,
    credentials=credentials,
)
user_msg_content = "Who is the best French painter? Answer in one short sentence."
resp = model_inference.generate_text(prompt=format_user_message(user_msg_content))
print(resp)
Aller plus loin

Aller plus loin

Pour plus d'informations et d'exemples, consultez :