Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

[Bug]: OpenAI-compatible tool calls are returned as plain text when routed through PAIR

Aberta
#94 7 comentários 0 reações 1 responsável Ver no GitHub

Mantenedores costumam responder em até 4 dias

@kjlubick já está trabalhando nisso.

Desde 1/10/2026.

Avaliação

Dificuldade
4/5
Tempo estimado
3-5 dias
Facilidade para iniciantes
55/100
Tipo de issue
Bug
Clareza
Razoavelmente clara
Status de atividade
Ativa
Stack de tecnologia
go, ollama
Domínio
api, backend

Direção de pesquisa

Comece pelo ponto de entrada /v1/chat/completions do proxy do Ollama e compare como as solicitações e as respostas são tratadas quando há definições de ferramentas. Reproduza com a solicitação curl documentada contra o PAIR e diretamente contra o Ollama; em seguida, verifique se o PAIR preserva message.tool_calls e finish_reason: tool_calls em vez de retornar a chamada como texto.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

bug
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
  1. Configure a PAIR cluster with an Ollama node serving qwen3.6:27b.

  2. Send an OpenAI-compatible POST request to:
    /v1/chat/completions

    The request contains multiple OpenAI function/tool definitions and asks the model to work on a task for which it should call the kanban_show function.

  3. Send the request through the PAIR Ollama proxy.

  4. Send the exact same JSON request body directly to the Ollama server hosting qwen3.6:27b, bypassing PAIR.

  5. Compare finish_reason, message.content, and message.tool_calls in the two responses.

Repeated control test:

  • Direct to Ollama: 3/3 requests returned a native tool_calls object.
  • Through PAIR: 3/3 requests returned finish_reason: stop with no tool_calls object. 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: stop
  • message.tool_calls: null / absent
  • The intended kanban_show call embedded in message.content as ordinary text.

Three consecutive PAIR requests produced textual representations such as:

  1. Python-like syntax:
    kanban_show(task_id="t_65ba4229")

  2. Bracket syntax:
    [kanban_show][0]

  3. 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.
Linguagem predominante
Go
Estrelas
1.6k
Forks
266
Merge médio
3d 18h
PRs com merge (30d)
28

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de NVIDIA/Personal-AI-Router

Todas as issues de NVIDIA/Personal-AI-Router

Issues semelhantes

Mais issues de Go

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.