[Bug]: OpenAI-compatible tool calls are returned as plain text when routed through PAIR
I maintainer di solito rispondono entro 5 giorni
@kjlubick ci sta già lavorando.
Dal 1/10/2026.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 55/100
Direzione di ricerca
Inizia dal punto di ingresso /v1/chat/completions del proxy Ollama e confronta il modo in cui vengono gestite le richieste e le risposte quando sono presenti definizioni di strumenti. Riproduci il problema con la richiesta curl documentata verso PAIR e direttamente verso Ollama, quindi verifica che PAIR conservi message.tool_calls e finish_reason: tool_calls invece di restituire la chiamata come testo.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
PAIR version or commit
0.1.1-463
Affected component
Ollama proxy
Environment
OS: Ubuntu 26.04.1 LTS on model host; Linux on NVIDIA DGX Spark PAIR client
Architecture: x86_64 model host; arm64 PAIR client
GPU and driver: AMD Radeon 8060S / Ryzen AI Max+ 395 on model host; NVIDIA GB10 on PAIR client
Engine and version: Ollama 0.33.2
Model: qwen3.6:27b
Cluster size: 4 nodes
Steps to reproduce
-
Configure a PAIR cluster with an Ollama node serving qwen3.6:27b.
-
Send an OpenAI-compatible POST request to:
/v1/chat/completionsThe request contains multiple OpenAI function/tool definitions and asks the model to work on a task for which it should call the
kanban_showfunction. -
Send the request through the PAIR Ollama proxy.
-
Send the exact same JSON request body directly to the Ollama server hosting qwen3.6:27b, bypassing PAIR.
-
Compare
finish_reason,message.content, andmessage.tool_callsin the two responses.
Repeated control test:
- Direct to Ollama: 3/3 requests returned a native
tool_callsobject. - Through PAIR: 3/3 requests returned
finish_reason: stopwith notool_callsobject. The intended function call instead appeared as ordinary assistant content.
The behavior is reproducible with curl and does not require an agent framework.
Expected behavior
When an OpenAI-compatible chat completion request containing tool definitions is routed through PAIR, native tool-calling behavior should be preserved.
For this request, the response should contain message.tool_calls with a call to kanban_show, and finish_reason should be tool_calls, matching the response obtained when the identical request is sent directly to the Ollama server.
Actual behavior
When the identical request is sent through the PAIR Ollama proxy, the native OpenAI-compatible tool call is not returned.
In repeated testing, PAIR returned:
finish_reason: stopmessage.tool_calls: null/ absent- The intended
kanban_showcall embedded inmessage.contentas ordinary text.
Three consecutive PAIR requests produced textual representations such as:
-
Python-like syntax:
kanban_show(task_id="t_65ba4229") -
Bracket syntax:
[kanban_show][0] -
XML-like syntax:
<invoke>kanban_show(task_id="t_65ba4229")</invoke>
By contrast, three consecutive requests using the identical JSON request body sent directly to Ollama returned native OpenAI-compatible tool calls:
finish_reason: tool_calls
with message.tool_calls containing a function call to kanban_show.
The same JSON payload succeeds when sent directly to the Ollama server on the model host, so the failure is introduced only when the request is routed through PAIR.
This also prevents OpenAI-compatible agent/tool frameworks from recognizing and executing the requested function when the request is routed through PAIR.
Sanitized logs or screenshots
Confirmations
- I searched existing issues for duplicates.
- This is not a security vulnerability.
- I agree to follow the Code of Conduct.
- Lingua principale
- Go
- Stelle
- 1.6k
- Fork
- 266
- Merge medio
- 3g 15h
- PR unite (30g)
- 23
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di NVIDIA/Personal-AI-Router
-
enhancement
Difficoltà 4/5 Più di una settimana Idoneità per principianti 12/100
NVIDIA/Personal-AI-Router#162 ·
I maintainer di solito rispondono entro 5 giorni
-
enhancement
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
NVIDIA/Personal-AI-Router#154 · 1 commento ·
I maintainer di solito rispondono entro 5 giorni
-
[Feature]: [Ollama] Alert the user about model pull failuresForse già presa @ckelseynv l’ha presa 2 giorni fa. Apertaenhancement
Difficoltà 3/5 1-2 giorni Idoneità per principianti 56/100
NVIDIA/Personal-AI-Router#152 · 1 commento · 1 assegnatario ·
I maintainer di solito rispondono entro 5 giorni
-
[Bug]: /v1/responses bypasses model-owner filtering in the Ollama proxyForse già presa @ilaigold l’ha presa 3 giorni fa. Aperta
Difficoltà 3/5 Mezza giornata Idoneità per principianti 84/100
NVIDIA/Personal-AI-Router#146 ·
I maintainer di solito rispondono entro 5 giorni
-
Make model download cancellation asynchronousForse già presa @ckelseynv l’ha presa 19 giorni fa. Apertaenhancement
NVIDIA/Personal-AI-Router#115 · 1 assegnatario ·
I maintainer di solito rispondono entro 5 giorni
Tutte le issue di NVIDIA/Personal-AI-Router
Issue simili
-
product/backlog
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
TencentBlueKing/bk-nodemgr#3645 ·
I maintainer di solito rispondono entro 1 giorno
-
docs(prompt): filer socket fragment hardcodes an issue-intent cap of 8 that Chore runs overrideApertaagent-butler-finding chore
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
jordansmall/spindrift#5128 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 84/100
I maintainer di solito rispondono entro 2 giorni
-
License GOtome under Apache 2.0 instead of AGPL-3.0Forse già presa @praetorianer777 l’ha presa oggi. Apertaarea:workflow documentation
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
praetorianer777/GoTome#212 ·
I maintainer di solito rispondono entro 1 giorno
-
ci: pin Go version in Build and Unit Test workflows (>=1.26.6 floats to 1.27.2 and breaks golangci-lint)Forse già presa @leninmehedy l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 87/100
hashgraph/solo-weaver#1255 ·
I maintainer di solito rispondono entro 1 giorno