Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

ai-ollama: streamed chat() reports finishReason "stop" when done_reason is "length"

Aperta
#1,852 0 commenti 0 reazioni 1 assegnatario Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

@AlemTuzlak ci sta già lavorando.

Dal 22/10/2026.

Valutazione

Questa issue non è ancora stata valutata.

Descrizione

waiting-on: maintainer
TanStack AI version

@tanstack/ai 0.71.0, @tanstack/ai-ollama 0.12.2 (ollama 0.6.4)

Framework/Library version

Node.js 22, chat() on the server, no framework

Describe the bug and the steps to reproduce it

When Ollama stops at the token limit (options.num_predict), its last stream line has done: true and
done_reason: "length". The streamed chat() path still ends with RUN_FINISHED and finishReason: "stop", so a
cut-off answer looks complete.

The adapter sets the finish from whether tool calls were emitted and never reads done_reason
(packages/ai-ollama/src/adapters/text.ts#L440).
structuredOutput() already checks done_reason === 'length' (L263, from #1548), so only the streamed path is
affected.

Expected: finishReason: "length", as the Chat Completions adapter reports for finish_reason: "length".

Steps: save the script below as repro.mjs, then

npm init -y && npm pkg set type=module
npm install @tanstack/[email protected] @tanstack/[email protected]
node repro.mjs

Output:

RUN_FINISHED stop
Your Minimal, Reproducible Example - (Sandbox Highly Recommended)

No Ollama server is needed: a custom fetch returns the NDJSON stream.

import { chat } from '@tanstack/ai';
import { createOllamaChat } from '@tanstack/ai-ollama';

// The last line is what Ollama sends when options.num_predict cuts the answer off.
const lines = [
  { model: 'qwen3.5:0.8b', created_at: '2026-10-21T09:00:00Z', message: { role: 'assistant', content: 'Saturn has more than' }, done: false },
  { model: 'qwen3.5:0.8b', created_at: '2026-10-21T09:00:01Z', message: { role: 'assistant', content: '' },
    done: true, done_reason: 'length', prompt_eval_count: 14, eval_count: 5 },
];
globalThis.fetch = async () => new Response(lines.map(line => JSON.stringify(line) + '\n').join(''),
  { headers: { 'content-type': 'application/x-ndjson' } });

for await (const event of chat({
  adapter: createOllamaChat('qwen3.5:0.8b'),
  messages: [{ role: 'user', content: 'How many moons does Saturn have?' }],
  modelOptions: { options: { num_predict: 5 } },
  debug: false,
})) {
  if (event.type === 'RUN_FINISHED') console.log('RUN_FINISHED', event.metadata?.tanstack?.finishReason);
  if (event.type === 'RUN_ERROR') console.log('RUN_ERROR', event.code);
}
Terms & Code of Conduct
  • I agree to follow this project's Code of Conduct
  • I understand that if my bug cannot be reliably reproduced in a debuggable environment, it will probably not be
    fixed and this issue may even be closed.
Lingua principale
TypeScript
Stelle
3.2k
Fork
365
Merge medio
1g 11h
PR unite (30g)
278

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di TanStack/ai

Tutte le issue di TanStack/ai

Issue simili

Altre issue su TypeScript

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.