Skip to content

[BUG] Intermediate agent messages missing when using LiteLLM Proxy Server with GPT OSS, Nova Premier #949

@roeetal

Description

@roeetal

Checks

  • I have updated to the lastest minor and patch version of Strands
  • I have checked the documentation and this is not expected behavior
  • I have searched ./issues and there are no duplicates of my issue

Strands Version

1.8.0

Python Version

3.13.5

Operating System

macOS 15.7

Installation Method

pip

Steps to Reproduce

from strands import Agent
from strands.models.litellm import LiteLLMModel
from strands import tool

@tool
def weather_forecast(city: str, days: int = 3) -> str:
    """Get weather forecast for a city.

    Args:
        city: The name of the city
        days: Number of days for the forecast
    """
    return f"Weather forecast for {city} for the next {days} days..."


litellm_model = LiteLLMModel(model_id="openai.gpt-oss-120b-1:0", params={
    "aws_profile_name": 'default',
})
agent = Agent(model=litellm_model, tools=[weather_forecast])
response = agent("can you call the weather tool for NYC")

litellm_proxy_model = LiteLLMModel(model_id="openai/openai.gpt-oss-120b-1:0", params={
    "api_base": "http://0.0.0.0:4000",
    "api_key": "key"
})
proxy_agent = Agent(model=litellm_proxy_model, tools=[weather_forecast])
proxy_response = proxy_agent("can you call the weather tool for NYC")

Expected Behavior

agent.messages and response are comparable to proxy_agent.messages and proxy_response taking non-determinism into account.

Actual Behavior

agent.messages:

[{'role': 'user',
  'content': [{'text': 'can you call the weather tool for NYC'}]},
 {'role': 'assistant',
  'content': [{'text': 'Here’s the latest weather forecast for New\u202fYork City (NYC):'},
   {'toolUse': {'toolUseId': 'tooluse_8XQsOOSyT5Oss7QB3jNvNw',
     'name': 'weather_forecast',
     'input': {'city': 'New York City'}}}]},
 {'role': 'user',
  'content': [{'toolResult': {'toolUseId': 'tooluse_8XQsOOSyT5Oss7QB3jNvNw',
     'status': 'success',
     'content': [{'text': 'Weather forecast for New York City for the next 3 days...'}]}}]},
 {'role': 'assistant',
  'content': [{'text': 'Here’s a quick 3‑day outlook for New\u202fYork\u202fCity:\n\n| Day | Condition | High [/](https://file+.vscode-resource.vscode-cdn.net/) Low | Precip. Chance | Wind |\n|-----|-----------|------------|----------------|------|\n| **Today** (Apr\u202f30) | Partly cloudy | 78\u202f°F [/](https://file+.vscode-resource.vscode-cdn.net/) 65\u202f°F | 20\u202f% | 8‑12\u202fmph from the SW |\n| **Tomorrow** (May\u202f1) | Mostly sunny | 80\u202f°F [/](https://file+.vscode-resource.vscode-cdn.net/) 66\u202f°F | 10\u202f% | 6‑10\u202fmph from the W |\n| **Day\u202f3** (May\u202f2) | Light showers & breezy | 75\u202f°F [/](https://file+.vscode-resource.vscode-cdn.net/) 64\u202f°F | 55\u202f% | 10‑15\u202fmph from the NW |\n\n*Temperatures are in Fahrenheit (°F). If you need the forecast in Celsius or want a longer‑range outlook, just let me know!*'}]}]

response:

AgentResult(stop_reason='end_turn', message={'role': 'assistant', 'content': [{'text': 'Here’s a quick 3‑day outlook for New\u202fYork\u202fCity:\n\n| Day | Condition | High [/](https://file+.vscode-resource.vscode-cdn.net/) Low | Precip. Chance | Wind |\n|-----|-----------|------------|----------------|------|\n| **Today** (Apr\u202f30) | Partly cloudy | 78\u202f°F [/](https://file+.vscode-resource.vscode-cdn.net/) 65\u202f°F | 20\u202f% | 8‑12\u202fmph from the SW |\n| **Tomorrow** (May\u202f1) | Mostly sunny | 80\u202f°F [/](https://file+.vscode-resource.vscode-cdn.net/) 66\u202f°F | 10\u202f% | 6‑10\u202fmph from the W |\n| **Day\u202f3** (May\u202f2) | Light showers & breezy | 75\u202f°F [/](https://file+.vscode-resource.vscode-cdn.net/) 64\u202f°F | 55\u202f% | 10‑15\u202fmph from the NW |\n\n*Temperatures are in Fahrenheit (°F). If you need the forecast in Celsius or want a longer‑range outlook, just let me know!*'}]}, metrics=EventLoopMetrics(cycle_count=2, tool_metrics={'weather_forecast': ToolMetrics(tool={'toolUseId': 'tooluse_8XQsOOSyT5Oss7QB3jNvNw', 'name': 'weather_forecast', 'input': {'city': 'New York City'}}, call_count=1, success_count=1, error_count=0, total_time=0.0004942417144775391)}, cycle_durations=[20.01394510269165], traces=[<strands.telemetry.metrics.Trace object at 0x117e00ad0>, <strands.telemetry.metrics.Trace object at 0x117bc2ea0>], accumulated_usage={'inputTokens': 390, 'outputTokens': 441, 'totalTokens': 831}, accumulated_metrics={'latencyMs': 0}), state={})

proxy_agent.messages:

[{'role': 'user',
  'content': [{'text': 'can you call the weather tool for NYC'}]},
 {'role': 'assistant',
  'content': [{'text': '{\n  "city": "New York City",\n  "days": [0]\n}'}]}]

proxy_response:

AgentResult(stop_reason='end_turn', message={'role': 'assistant', 'content': [{'text': '{\n  "city": "New York City",\n  "days": [0]\n}'}]}, metrics=EventLoopMetrics(cycle_count=1, tool_metrics={}, cycle_durations=[19.30731701850891], traces=[<strands.telemetry.metrics.Trace object at 0x117b0b020>], accumulated_usage={'inputTokens': 15, 'outputTokens': 18, 'totalTokens': 33}, accumulated_metrics={'latencyMs': 0}), state={})

Additional Context

LiteLLM proxy server routes requests to bedrock with a model list defined like:

"model_list": [
    {
        "model_name": "openai/openai.gpt-oss-120b-1:0",
        "litellm_params": {
            "model": "bedrock/openai.gpt-oss-120b-1:0",
            "aws_region_name": "us-west-2",
            "aws_profile_name": "default",
        }
    }
],

Possible Solution

No response

Related Issues

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions