Repository navigation
@tanstack/ai-openai@1.0.0
Major Changes
- #1840
f1b3f65- TanStack AI 1.0.0. This release removes every API that was deprecated in 0.x. Read the upgrade guide before you upgrade: https://tanstack.com/ai/latest/docs/migration/v1- Removed all
@deprecatedexports, options, fields, and type aliases. Each one has a replacement that already shipped in 0.x. - Removed
addToolApprovalResponse()fromChatClientand every chat hook. Resolve the boundtool-approvalinterrupt withresolveInterruptinstead. The devtools eventtools:approval:respondedis also removed. - Removed the old wire formats: the CUSTOM
approval-requestedandtool-input-availableevents, the[DONE]SSE line, thedatacopy offorwardedProps, pre-binding interrupt descriptors and theirapproval_requiredandclient_tool_inputreasons, and the STEP events that adapters sent next toREASONING_*events. Use a 1.0 client with a 1.0 server. - Removed the
toolNamealias fromTOOL_CALL_STARTchunks. ReadtoolCallNameinstead. threadIdis now required onuseChatand every other chat hook,ChatClient, the generation hooks and clients,chat(),summarize(), the generation functions,codeModeWithSnippets(),selectRelevantSnippets(),CompactionContext, andSummarizeInput. TanStack AI no longer makes a thread id for you. Pass a stable id for each conversation.createChatHookfactory options no longer takethreadId: pass it on each hook call. Octane generation hooks takethreadIdinstead ofid.@tanstack/ai-sandboxremovesresolveDurableThreadIdandDurableThreadIdRequiredError.- The published
@tanstack/ai-octane/uitypes are now strict.UI.Messages,UI.Message,UI.Part, andUI.Interruptstype their render children.ToolPropstypespart.inputandpart.outputfor the named tool.toolsComponentsandinterruptsComponentsare required when the chat options declare tools or named interrupts. Code that relied on the old loose types can fail to compile. - A connection adapter's
connect()andsend()need the run context (withthreadId) as their fourth argument.ChatClientand the generation clients pass it. @tanstack/ai-sandbox:createToolBridgeCore(),startHostToolBridge(), aToolBridgeProvisioner, andexecuteHostTool()take a requiredthreadId. Bridged tools get it in their context.@tanstack/ai-sandbox: the harness tool bridge andexecuteHostTool()refuse a tool withneedsApproval. Before, the tool ran with no approval. RemoveneedsApproval, or run the tool with an HTTP adapter.stream()andrpcStream()pass the AG-UIRunAgentInputfor the run as the fourth factory argument, the same body the HTTP adapters send. Read it on the server withchatParamsFromRequestBody()orgenerationParamsFromBody(), sothreadId,runId, and interruptresumereach a server function.RunAgentInputis exported from@tanstack/ai/client.- A generation
fetchergetsthreadIdandrunIdin its second argument, next tosignalandheaders. Pass them to the server generation call. generationParamsFromBody()andgenerationParamsFromRequest()read the generation input fromforwardedProps. A server that readsbody.datagetsundefined. Readbody.forwardedPropsinstead. They also requirethreadIdandrunIdand return them as strings, the same aschatParamsFromRequestBody()and the AG-UIRunAgentInput. A body that holds only the input is rejected.- Removed the readers for data saved in old 0.x formats (old Cloudflare run-log records, a bare
UIMessage[]from client persistence, artifact records withoutblobKey). - Removed provider models that are shut down.
@tanstack/ai-react-ui,@tanstack/ai-solid-ui, and@tanstack/ai-vue-uiget no 1.0 release. Import from@tanstack/ai-react/ui,@tanstack/ai-solid/ui, or@tanstack/ai-vue/ui.
- Removed all
Minor Changes
-
#1743
959f43e- AddEvaluateError, a typed error an evaluate adapter throws when the provider answered but the call cannot become a result.@tanstack/aiand@tanstack/ai/adaptersexport the class, theisEvaluateError()type guard, theEvaluateErrorInittype andEVALUATE_REFUSAL_CODE. The error keeps what the provider sent back:code: a stable code to branch on. A refused question usesEVALUATE_REFUSAL_CODE('refusal').usage: the tokens the call used.model: the model that answered.answers: the raw wire answers that came back, beforedecide()maps them. Achoice()answer haschoice(for example{ type: 'choice', choice: 'billing', ... }), and aboolean()answer is{ type: 'noul', noul: 0.9 }, not{ value }. The refused question has no key.
When OpenAI refuses to answer a question,
decide()now throws anEvaluateErrorwithcode: 'refusal'instead of a plainError. If more than one question is refused, the message names the first one.Use
isEvaluateError(error)to narrow a caught error. It checksnameandcode, notinstanceof, so it still works when the app installs more than one copy of@tanstack/ai.When an adapter throws an
EvaluateErrorthat carriesusage,decide()reports that usage through theevaluate:usageevent and the middlewareonUsagehook, then runsonErrorand rethrows the same error.onFinishdoes not run.try { await decide({ adapter, state, questions }) } catch (error) { if (isEvaluateError(error) && error.code === EVALUATE_REFUSAL_CODE) { console.log(error.usage, error.answers) } throw error }
The message text does not change. The error is still an
Error, but itsnameis now'EvaluateError', so logs and the OpenTelemetryerror.typeshow that name instead of'Error'.
Patch Changes
-
#1857
483f59a- Droptemperature,top_p, andtop_logprobson GPT-6 reasoning models, and request encrypted reasoning for those models. OpenAI returns 400 when these fields are sent. They are kept when reasoning effort isnone, which OpenAI accepts. -
#1868
fe83aa0- Remove model ids that providers have retired. Each one now fails on the provider's API, so the types no longer accept it.- Groq:
llama-3.3-70b-versatile,llama-3.1-8b-instant,meta-llama/llama-4-maverick-17b-128e-instruct,meta-llama/llama-4-scout-17b-16e-instruct,meta-llama/llama-guard-4-12b,moonshotai/kimi-k2-instruct-0905,qwen/qwen3-32b. Addsqwen/qwen3.8-27b. - Mistral:
pixtral-large-latest,pixtral-12b-2409,open-mistral-nemo. - OpenAI:
chatgpt-4o-latest,codex-mini-latest,gpt-4o-audio,gpt-4o-mini-audio,gpt-5.6,dall-e-2,dall-e-3,computer-use-preview. The speech modelgpt-4o-audio-previewis replaced bygpt-4o-mini-tts. - Anthropic:
claude-opus-4-1,claude-opus-5-fast. - Gemini:
imagen-4.0-generate-001,imagen-4.0-ultra-generate-001,imagen-4.0-fast-generate-001.
Types and helpers that only served those models are removed:
@tanstack/ai-gemini:GeminiImageProviderOptions,GeminiAnyImageProviderOptions,GeminiAspectRatio,PersonGeneration,SafetyFilterLevel,ImagePromptLanguage,GEMINI_NATIVE_IMAGE_MODELS,isGeminiNativeImageModel. Every Gemini image model usesGeminiNativeImageProviderOptions.@tanstack/openai-base:OpenAIComputerToolName.resolveComputerUseTool(tool)no longer takes a model.@tanstack/ai-openai: the dall-e option and size types.
- Groq:
-
Updated dependencies [
fcbd199,39c1c79,959f43e,39c1c79,fa2a291,f7e7cce,028f30f,7a0a48b,468063c,36eab88,fe83aa0,85204ea,781a3a8,39abb7e,f1b3f65,49dbcf9]:- @tanstack/ai@1.0.0
- @tanstack/ai-utils@1.0.0
- @tanstack/openai-base@1.0.0