WatsonxLLM
WatsonxLLM is wrapper for IBM watsonx.ai foundation models. This example shows how to communicate with watsonx.ai models using LangChain.
Install the package
ibm_watson_machine_learning
.
%pip install ibm_watson_machine_learning
This cell defines the WML credentials required to work with watsonx Foundation Model inferencing.
Action: Provide the IBM Cloud user API key. For details, see documentation.
import os
from getpass import getpass
watsonx_api_key = getpass()
os.environ["WATSONX_APIKEY"] = watsonx_api_key
Load the model
You might need to adjust model parameters
for different models or
tasks, to do so please refer to
documentation.
from ibm_watson_machine_learning.metanames import GenTextParamsMetaNames as GenParams
parameters = {
GenParams.DECODING_METHOD: "sample",
GenParams.MAX_NEW_TOKENS: 100,
GenParams.MIN_NEW_TOKENS: 1,
GenParams.TEMPERATURE: 0.5,
GenParams.TOP_K: 50,
GenParams.TOP_P: 1,
}
Initialize the WatsonxLLM
class with previous set params.
from langchain.llms import WatsonxLLM
watsonx_llm = WatsonxLLM(
model_id="google/flan-ul2",
url="https://us-south.ml.cloud.ibm.com",
project_id="***",
params=parameters,
)
Alternatively you can use Cloud Pak for Data credentials. For details, see documentation.
watsonx_llm = WatsonxLLM(
model_id='google/flan-ul2',
url="***",
username="***",
password="***",
instance_id="openshift",
version="4.8",
project_id='***',
params=parameters
)
Create Chain
Create PromptTemplate
objects which will be responsible for creating a
random question.
from langchain.prompts import PromptTemplate
template = "Generate a random question about {topic}: Question: "
prompt = PromptTemplate.from_template(template)
Provide a topic and run the LLMChain
.
from langchain.chains import LLMChain
llm_chain = LLMChain(prompt=prompt, llm=watsonx_llm)
llm_chain.run("dog")
'How many breeds of dog are there?'
Calling the Model Directly
To obtain completions, you can can the model directly using string prompt.
# Calling a single prompt
watsonx_llm("Who is man's best friend?")
'dog'
# Calling multiple prompts
watsonx_llm.generate(
[
"The fastest dog in the world?",
"Describe your chosen dog breed",
]
)
LLMResult(generations=[[Generation(text='greyhounds', generation_info={'generated_token_count': 4, 'input_token_count': 8, 'finish_reason': 'eos_token'})], [Generation(text='The Basenji is a dog breed from South Africa.', generation_info={'generated_token_count': 13, 'input_token_count': 7, 'finish_reason': 'eos_token'})]], llm_output={'model_id': 'google/flan-ul2'}, run=[RunInfo(run_id=UUID('03c73a42-db68-428e-ab8d-8ae10abc84fc')), RunInfo(run_id=UUID('c289f67a-87d6-4c8b-a8b7-0b5012c94ca8'))])
Streaming the Model output
You can stream the model output.
for chunk in watsonx_llm.stream(
"Describe your favorite breed of dog and why it is your favorite."
):
print(chunk, end="")
The golden retriever is my favorite dog because it is very friendly and good with children.