View Notebook on Github

IBM Watsonx.ai Text Generation and Chat with AgentOps

This notebook demonstrates how to use IBM Watsonx.ai for basic text generation and chat completion tasks with AgentOps instrumentation.

Installation

Install the required packages:

pip install agentops ibm-watsonx-ai python-dotenv

Setup

First, let’s import the necessary libraries and initialize AgentOps:

import agentops
from ibm_watsonx_ai import Credentials
from ibm_watsonx_ai.foundation_models import ModelInference
from dotenv import load_dotenv
import os

# Load environment variables
load_dotenv()
os.environ["AGENTOPS_API_KEY"] = os.getenv("AGENTOPS_API_KEY", "your_agentops_api_key_here")

# Initialize AgentOps
agentops.init(tags=["watsonx-text-chat", "agentops-example"])

Initialize IBM Watsonx.ai Credentials

To use IBM Watsonx.ai, you need to set up your credentials and project ID.

# Initialize credentials - replace with your own API key
# Best practice: Store API keys in environment variables
# Ensure WATSONX_API_KEY, WATSONX_URL, and WATSONX_PROJECT_ID are set in your .env file or environment
os.environ["WATSONX_API_KEY"] = os.getenv("WATSONX_API_KEY", "your_watsonx_api_key_here")
os.environ["WATSONX_URL"] = os.getenv("WATSONX_URL", "https://eu-de.ml.cloud.ibm.com") # Example URL, ensure it's correct for your region
os.environ["WATSONX_PROJECT_ID"] = os.getenv("WATSONX_PROJECT_ID", "your-project-id-here")


credentials = Credentials(
    url=os.environ["WATSONX_URL"],
    api_key=os.environ["WATSONX_API_KEY"],
)

# Project ID for your IBM Watsonx project
project_id = os.environ["WATSONX_PROJECT_ID"]

Text Generation

Let’s use IBM Watsonx.ai to generate text based on a prompt:

# Initialize text generation model
gen_model = ModelInference(model_id="google/flan-ul2", credentials=credentials, project_id=project_id)

# Generate text with a prompt
prompt = "Write a short poem about artificial intelligence:"
response = gen_model.generate_text(prompt)
print(f"Generated Text:\n{response}")

Chat Completion

Now, let’s use a different model for chat completion:

# Initialize chat model
chat_model = ModelInference(
    model_id="meta-llama/llama-3-8b-instruct", # Using the model ID from the MDX as it might be more current/available
    credentials=credentials, 
    project_id=project_id
)

# Format messages for chat
messages = [
    {"role": "system", "content": "You are a helpful AI assistant."},
    {"role": "user", "content": "What are the three laws of robotics?"},
]

# Get chat response
chat_response = chat_model.chat(messages)
# Accessing response based on typical ibm-watsonx-ai SDK structure
print(f"Chat Response:\n{chat_response['results'][0]['generated_text']}") 

Another Chat Example

Let’s try a different type of query:

# New chat messages
messages = [
    {"role": "system", "content": "You are an expert in machine learning."},
    {"role": "user", "content": "Explain the difference between supervised and unsupervised learning in simple terms."},
]

# Get chat response
chat_response = chat_model.chat(messages)
print(f"Chat Response:\n{chat_response['results'][0]['generated_text']}")

Clean Up

Finally, let’s close the persistent connection with the models if they were established and end the AgentOps session.

# Close connections if persistent connections were used.
# This is good practice if the SDK version/usage implies persistent connections.
try:
    gen_model.close_persistent_connection()
    chat_model.close_persistent_connection()
except AttributeError:
    # Handle cases where this method might not exist (e.g. newer SDK versions or stateless calls)
    print("Note: close_persistent_connection not available or needed for one or more models.")
    pass

agentops.end_session("Success") # Manually end session