Skip to main content

ibm-watsonx-ai-120b

A drop-in replacement for ibm-watsonx-ai that fixes all known issues with IBM's vLLM-hosted openai/gpt-oss-120b and openai/gpt-oss-20b models.

The Problem

IBM hosts OpenAI's gpt-oss models on WatsonX using vLLM, but the deployment has numerous bugs:

  • Tool calling doesn't work - tool_calls array is always empty
  • JSON schema mode is ignored - Model returns free text instead of JSON
  • Thinking leaks into output - reasoning_content appears without actual content
  • Streaming breaks with tools - Tool calls appear in wrong fields
  • Harmony tokens leak - Special tokens like <|channel|> appear in output

The Solution

Change one import and everything works:

# Before (broken)
from ibm_watsonx_ai.foundation_models import ModelInference

# After (fixed!)
from ibm_watsonx_ai_120b.foundation_models import ModelInference

# Your code stays exactly the same
model = ModelInference(
    model_id="openai/gpt-oss-120b",
    credentials=credentials,
    project_id=project_id
)

# Tool calling now works!
response = model.chat(
    messages=[{"role": "user", "content": "What's the weather in Tokyo?"}],
    tools=[{
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "Get weather for a location",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {"type": "string"}
                },
                "required": ["location"]
            }
        }
    }]
)

# JSON schema mode now works!
response = model.chat(
    messages=[{"role": "user", "content": "List 3 colors"}],
    response_format={
        "type": "json_schema",
        "json_schema": {
            "name": "colors",
            "schema": {
                "type": "object",
                "properties": {
                    "colors": {"type": "array", "items": {"type": "string"}}
                },
                "required": ["colors"]
            }
        }
    }
)

Installation

pip install ibm-watsonx-ai-120b

When IBM Fixes Their vLLM

Just change your import back:

# Fixed by IBM - just use the original!
from ibm_watsonx_ai.foundation_models import ModelInference

Your code stays exactly the same because we maintained full API compatibility.

What Gets Fixed

Feature Original Behavior With This Package
Tool Calling tool_calls=[] always Works correctly
JSON Schema Ignored, returns text Enforced and validated
Thinking Responses Empty content, only reasoning Automatically handled
Streaming + Tools Tools in wrong field Falls back to sync
Harmony Tokens Leak into output Stripped automatically
Null Content Crashes vLLM Converted to empty string

Configuration

from ibm_watsonx_ai_120b import Config

# Adjust retry behavior
Config.max_retries = 5

# Force non-streaming for tools (most reliable)
Config.streaming_tool_strategy = "fallback"

# Enable debug logging
Config.debug = True

Or via environment variables:

export WATSONX_120B_MAX_RETRIES=5
export WATSONX_120B_DISABLE_STREAMING=true
export WATSONX_120B_DEBUG=true

How It Works

The package wraps ibm-watsonx-ai and applies fixes through an adapter pipeline:

  1. MessageAdapter - Fixes null content and tool role issues
  2. ToolAdapter - Emulates tool calling via prompt injection
  3. JSONAdapter - Emulates JSON schema via prompt injection
  4. ThinkingAdapter - Handles reasoning-only responses
  5. HarmonyAdapter - Strips leaked special tokens
  6. StreamAdapter - Handles streaming quirks

Everything else passes through unchanged to the original library.

Requirements

  • Python 3.9+
  • ibm-watsonx-ai >= 1.0.0

Documentation

Contributing

Contributions welcome! See CONTRIBUTING.md for guidelines.

License

MIT License - See LICENSE for details.

Acknowledgments

This package was developed to centralize workarounds originally implemented in:

Links

Metadata

Release files for ibm-watsonx-ai-120b 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ibm-watsonx-ai-120b 0.1.2
File Size Uploaded
ibm_watsonx_ai_120b-0.1.2.tar.gz 69.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ibm-watsonx-ai-120b 0.1.2
File Interpreter ABI Platform
ibm_watsonx_ai_120b-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 98.9 kB

Release files / ibm_watsonx_ai_120b-0.1.2.tar.gz

Download URL ibm_watsonx_ai_120b-0.1.2.tar.gz
Size 69.4 kB
Tags Source
SHA-256 checksum
How to use checksums
44ffd2e1afb12a5fbba62d9cfef43ce97a194d9a57b898da3743ebadcb695f0a
BLAKE2b-256 checksum
How to use checksums
cbf37b50dc4f4c02c7ce1860ea231f1ce3ea33e68321f1541ea2023b45976bbb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.9

Release files / ibm_watsonx_ai_120b-0.1.2-py3-none-any.whl

Download URL ibm_watsonx_ai_120b-0.1.2-py3-none-any.whl
Size 29.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
381c7888c4445e6087fe5838ad0496b71c3c1c49ff994d9a46f78d1351c4d530
BLAKE2b-256 checksum
How to use checksums
ab8c9267689f4a48fbd1381eae3f628870477194675bd2494affe3949816993f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.9

Release history Release notifications | RSS feed

This release

0.1.2 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page