llama-stack/llama_stack/distribution
Ben Browning 40e71758d9
fix: inference providers still using tools with tool_choice="none" (#2048)
# What does this PR do?

In our OpenAI API verification tests, some providers were still calling
tools even when `tool_choice="none"` was passed in the chat completion
requests. Because they aren't all respecting `tool_choice` properly,
this adjusts our routing implementation to remove the `tools` and
`tool_choice` from the request if `tool_choice="none"` is passed in so
that it does not attempt to call any of those tools. Adjusting this in
the router fixes this across all providers.

This also cleans up the non-streaming together.ai responses for tools,
ensuring it returns `None` instead of an empty list when there are no
tool calls, to exactly match the OpenAI API responses in that case.

## Test Plan

I observed existing failures in our OpenAI API verification suite - see

https://github.com/bbrowning/llama-stack-tests/blob/main/openai-api-verification/2025-04-27.md#together-llama-stack
for the failing `test_chat_*_tool_choice_none` tests. All streaming and
non-streaming variants were failing across all 3 tested models.

After this change, all of those 6 failing tests are now passing with no
regression in the other tests.

I verified this via:

```
llama stack run --image-type venv \
  tests/verifications/openai-api-verification-run.yaml
```

```
python -m pytest -s -v \
  'tests/verifications/openai_api/test_chat_completion.py' \
  --provider=together-llama-stack
```

The entire verification suite is not 100% on together.ai yet, but it's
getting closer.

This also increased the pass rate for fireworks.ai, and did not regress
the groq or openai tests at all.

Signed-off-by: Ben Browning <bbrownin@redhat.com>
2025-05-07 14:34:47 +02:00
..
routers fix: inference providers still using tools with tool_choice="none" (#2048) 2025-05-07 14:34:47 +02:00
server chore: enable pyupgrade fixes (#1806) 2025-05-01 14:23:50 -07:00
store chore: enable pyupgrade fixes (#1806) 2025-05-01 14:23:50 -07:00
ui chore: more mypy fixes (#2029) 2025-05-06 09:52:31 -07:00
utils chore: enable pyupgrade fixes (#1806) 2025-05-01 14:23:50 -07:00
__init__.py API Updates (#73) 2024-09-17 19:51:35 -07:00
access_control.py chore: enable pyupgrade fixes (#1806) 2025-05-01 14:23:50 -07:00
build.py fix: enforce stricter ASCII rules lint rules in Ruff (#2062) 2025-04-30 18:05:27 +02:00
build_conda_env.sh chore: remove straggler references to llama-models (#1345) 2025-03-01 14:26:03 -08:00
build_container.sh feat: include run.yaml in the container image (#2005) 2025-04-24 11:29:53 +02:00
build_venv.sh chore: remove straggler references to llama-models (#1345) 2025-03-01 14:26:03 -08:00
client.py chore: enable pyupgrade fixes (#1806) 2025-05-01 14:23:50 -07:00
common.sh feat(pre-commit): enhance pre-commit hooks with additional checks (#2014) 2025-04-30 11:35:49 -07:00
configure.py chore: more mypy fixes (#2029) 2025-05-06 09:52:31 -07:00
datatypes.py chore: enable pyupgrade fixes (#1806) 2025-05-01 14:23:50 -07:00
distribution.py chore: enable pyupgrade fixes (#1806) 2025-05-01 14:23:50 -07:00
inspect.py feat: add health to all providers through providers endpoint (#1418) 2025-04-14 11:59:36 +02:00
library_client.py chore: more mypy fixes (#2029) 2025-05-06 09:52:31 -07:00
providers.py chore: enable pyupgrade fixes (#1806) 2025-05-01 14:23:50 -07:00
request_headers.py chore: more mypy fixes (#2029) 2025-05-06 09:52:31 -07:00
resolver.py chore: enable pyupgrade fixes (#1806) 2025-05-01 14:23:50 -07:00
stack.py chore: enable pyupgrade fixes (#1806) 2025-05-01 14:23:50 -07:00
start_stack.sh docs: Update docs and fix warning in start-stack.sh (#1937) 2025-04-11 16:26:17 -07:00