Skip to content

@tanstack/ai-mistral@0.7.0

Choose a tag to compare

@github-actions github-actions released this 13 Oct 17:49
· 145 commits to main since this release
Immutable release. Only release title and notes can be modified.
293aea9

Minor Changes

  • #1697 cef1911 - Prompt caching is now on by default. Each chat() call asks the provider to cache the stable start of the request (system prompt, tools, and earlier messages), so repeated requests cost less and answer sooner.

    • New chat() option promptCache: 'none' | 'short' | 'long', or { retention, key }. The default is 'short'. The key is promptCache.key, else the threadId or conversationId that you give. A threadId that chat() makes up is never the key.
    • To turn it off, pass promptCache: 'none'. Do this for a large prompt that you send to Claude one time only, because Claude bills the cache write.
    • A middleware can change it for the next model call: onConfig gets config.promptCache and can return a new value.
    • Each adapter sends its own fields:
      • Claude on Anthropic, Bedrock Converse, and OpenRouter gets cache markers. 'long' asks for the 1-hour TTL.
      • OpenAI (Responses and Chat Completions) gets prompt_cache_key, and prompt_cache_retention or prompt_cache_options on 'long'.
      • Mistral gets prompt_cache_key, and usage now reports cache reads.
      • OpenRouter gets sessionId.
    • A manual cache_control, cachePoint, prompt_cache_key, or sessionId wins over the automatic value.
    • New types: PromptCacheRetention, PromptCacheOptions, and ResolvedPromptCache. Adapters read TextOptions.promptCache.
  • #1692 7532b2b - Set reasoning with chat({ reasoning }).

    • Mistral Small and Mistral Medium get reasoning_effort, and none for off.
    • Magistral gets prompt_mode: 'reasoning'. off sends nothing.
    • Each chat model has its reasoning data in model-meta.ts. MistralModelReasoningByName and MISTRAL_MODEL_REASONING come from it.

    Breaking: none. The adapter had no reasoning option before.

    chat({
      adapter: mistralText('mistral-small-latest'),
      messages,
      reasoning: 'high',
    })

Patch Changes

  • #1732 eb4eea0 - Keep a schema property or a tool argument named __proto__. Before this fix, code that copied it with out[key] = value went to the __proto__ setter instead, so the key was lost.

    • @tanstack/ai-utils: transformNullsToUndefined and undoNullWidening keep the key.
    • @tanstack/openai-base: the strict schema and its null-widening map keep the key.
    • @tanstack/ai-mistral: the null-widening map keeps the key.
    • @tanstack/ai-openrouter: the Responses tool input normalizer keeps the key.
    • @tanstack/ai-gemini: the Interactions adapter keeps the key in tool parameters.
    • @tanstack/ai-bedrock: the Converse adapter puts the tool schemas and tool inputs back into the request body after the AWS SDK serializes it, because the SDK drops the key.
  • #1698 1bfcee3 - Keep a conversation valid when the next request goes to a different model.

    • Each assistant message records metadata.tanstack.source ({ provider, api, model }), and responseId and the resolved model when the provider sends them. A failed or aborted answer gets stopReason: 'error' or 'aborted'. RUN_FINISHED has a new responseId field. TextAdapter has new optional provider and api fields.
    • When the next request goes to a different source, the adapter removes signatures and redacted thinking, turns readable thinking into text, and rewrites tool call IDs to the shape the target API accepts. Each call stays paired with its result.
    • Every request drops failed and aborted assistant batches and adds a No result provided result for an unanswered tool call. The saved history does not change.
    • RUN_FINISHED and RUN_ERROR metadata now merge onto the assistant messages of that model call in StreamProcessor.
    • Anthropic: the new allowEmptySignature option (default false) replays unsigned thinking from the same source, for gateways. The new provider option names a gateway.
    • Azure OpenAI reports the azure-openai-responses API.
    • Gemini, Mistral, and Bedrock Converse send same-source thinking back to the model, in block order.
    • withPersistence writes the source and the stop reason onto streaming snapshot rows.
    • Adapter authors get transformMessagesForReplay() and hashToolCallId() from @tanstack/ai/adapter-internals.
  • #1692 7532b2b - Send chat({ toolChoice }) to each provider.

    • Anthropic and Bedrock Converse. Claude Fable 5.1, Mythos 5.1, Opus 5.5, and Sonnet 5.5 reject a forced tool, and every Claude model rejects one while thinking is on. On those, 'required' and a named tool fall back to auto.
    • Bedrock Converse has no none. 'none' sends no tool config. Bedrock refuses tool calls in the history without a tool config, so the history goes out as text.
    • Gemini maps the choice to functionCallingConfig (AUTO, NONE, ANY, and allowedFunctionNames). With only provider tools, such as Google Search, it sends no tool config.
    • OpenAI and Azure OpenAI (Responses), Grok, Mistral, and OpenRouter (Chat Completions and Responses) send their own tool_choice shape.
  • Updated dependencies [1bfcee3, 412b0fe, a0150c2, b881627, fac0555, 6774e80, 5bd27f2, c20f7b0, cef1911, 51f72fb, 6f1e559, eb4eea0, cef1911, 7532b2b, 1bfcee3, 78edeb2, 44e3a0a, 7532b2b, 7a5c0d6, b881627]:

    • @tanstack/ai@0.69.0
    • @tanstack/ai-utils@0.4.2