DeepSeek
Learn how to use DeepSeek's models with the AI SDK.
The DeepSeek provider offers access to powerful language models through the DeepSeek API.
API keys can be obtained from the DeepSeek Platform.
Setup
The DeepSeek provider is available via the @ai-sdk/deepseek module. You can install it with:
$ pnpm add @ai-sdk/deepseek
$ npm install @ai-sdk/deepseek
$ yarn add @ai-sdk/deepseek
$ bun add @ai-sdk/deepseek
Provider Instance
You can import the default provider instance deepSeek from @ai-sdk/deepseek:
For custom configuration, you can import createDeepSeek and create a provider instance with your settings:
You can use the following optional settings to customize the DeepSeek provider instance:
-
baseURL string
Use a different URL prefix for API calls. The default prefix is
https://api.deepseek.com. -
apiKey string
API key that is being sent using the
Authorizationheader. It defaults to theDEEPSEEK_API_KEYenvironment variable. -
headers Record<string,string>
Custom headers to include in the requests.
-
fetch (input: RequestInfo, init?: RequestInit) => Promise<Response>
Custom fetch implementation.
Language Models
You can create language models using a provider instance:
You can also use the .chat() or .languageModel() factory methods:
DeepSeek language models can be used in the streamText function
(see AI SDK Core).
DeepSeek retired the deepseek-chat and deepseek-reasoner aliases on July 24, 2026. Use deepseek-flash (the alias for the current V4.x Flash release), deepseek-v4-flash, or deepseek-v4-pro for the current API. Custom
and legacy model IDs remain accepted as strings for compatibility with custom
endpoints.
The following optional provider options are available for DeepSeek models:
-
logprobsbooleanOptional. Returns log probabilities for generated content and reasoning tokens in
providerMetadata.deepseek.logprobs. -
topLogprobsnumberOptional. Returns the specified number of most likely tokens at each token position. Accepts values from
0through20and automatically enableslogprobs. -
userIdstringOptional. An opaque end-user identifier that DeepSeek uses for content-safety tracing, KV-cache isolation, and scheduling isolation. The value must match
^[a-zA-Z0-9_-]+$and contain at most 512 characters. Do not include names, email addresses, or other private user information. -
thinkingobjectOptional. Controls thinking mode (chain-of-thought reasoning) for DeepSeek V4 models.
type:'enabled' | 'disabled'- Enable or disable thinking mode. See DeepSeek's thinking mode docs.
-
reasoningEffort'low' | 'high' | 'max'Optional. Controls thinking strength for DeepSeek V4 reasoning models. When using the top-level
reasoningsetting,minimalis sent aslow,mediumis sent ashigh,xhighis sent asmax, andmaxis sent directly. A compatibility warning is returned whenever the requested value is mapped.
For backwards compatibility, legacy provider options supplied at runtime are
also mapped to documented values: thinking.type: 'adaptive' becomes
'enabled', reasoningEffort: 'medium' becomes 'high', and
reasoningEffort: 'xhigh' becomes 'max'. Each mapping returns a compatibility
warning so callers can migrate to a canonical value.
DeepSeek has deprecated the top-level frequencyPenalty and presencePenalty
settings. The provider omits these settings and returns a deprecation warning
when they are used. temperature and topP have no effect while thinking is
enabled, including the default thinking mode for DeepSeek V4 models, so the
provider omits them with an unsupported warning. Explicitly set
thinking.type to 'disabled' to use temperature and topP.
Message Names
DeepSeek supports optional participant names on system, user, and assistant
messages. Set providerOptions.deepseek.name on each message that should
include a name:
The same message option works with streamText:
Names are omitted when the option is not set. The name value must be a
string. DeepSeek does not support names on tool messages, so the provider
ignores that placement and returns an unsupported-feature warning. Avoid
including unnecessary personal or identifying information in message names.
Reasoning
DeepSeek V4 models support reasoning. The reasoning is exposed through streaming:
See AI SDK UI: Chatbot for more details on how to integrate reasoning into your chatbot.
Chat Prefix Completion
DeepSeek's beta chat prefix completion
continues the content of a final assistant message. Create a provider with a
beta base URL and set prefix: true in that assistant message's provider
options:
The prefixed message must be an assistant message and the final message in the
prompt. The configured baseURL must end in /beta, including when using a
proxy. Invalid placement or a non-beta base URL causes the request to fail
before it is sent.
Chat prefix completion is a DeepSeek beta feature and its behavior may change.
Strict Tool Calls
DeepSeek's strict tool-call mode is a beta feature. Create the provider with a
beta base URL and set strict: true on every function tool in the request:
Strict tools fail locally when the base URL does not end in /beta. When any
function tool is strict, every function tool in the same request must set
strict: true.
Provider Metadata
DeepSeek exposes the response system fingerprint and context cache usage through
the providerMetadata property:
The metadata includes:
systemFingerprint: The backend configuration fingerprint for the responsepromptCacheHitTokens: Number of input tokens that were cachedpromptCacheMissTokens: Number of input tokens that were not cached
For streamed responses, the latest non-null fingerprint from the response chunks is returned.
For more details about DeepSeek's caching system, see the DeepSeek caching documentation.
Chat Response Metadata
DeepSeek preserves provider-specific response fields in
providerMetadata.deepseek for generated and streamed responses:
responseObject:chat.completionorchat.completion.chunkchoiceIndex: the selected response choice indexmessageRole: the response message role, when suppliedtoolCallTypes: the tool-call type for each returned call
These fields remain in provider metadata because they are specific to DeepSeek's Chat Completions response rather than shared AI SDK result fields.
File Uploads
For inline images or image URLs, use file-part provider options to select the
image processing detail. DeepSeek supports low, high, original, and
auto:
Set fileData: true on an inline image file part to use DeepSeek's
file_data content-part representation. This preserves the file part's
filename. fileData cannot be used with image URLs or imageDetail.
DeepSeek accepts JPEG, PNG, GIF, and WebP image inputs. HTTP image URLs can be at most 8,192 characters.
You can upload images using the DeepSeek Files API and pass the returned provider reference to deepseek-v4-flash-vision-exp. This avoids sending the image bytes again in each request.
The optional expiresAfter setting specifies the lifetime in seconds. DeepSeek accepts values from 3,600 seconds (one hour) through 2,592,000 seconds (30 days). Files are permanent when no expiration is specified.
The provider requires a valid file ID in successful upload responses. It also
validates returned object and purpose discriminators and numeric metadata.
Other response metadata remains optional for compatibility with incomplete
responses; omitted values are not included in providerMetadata, and an
omitted response filename falls back to the filename supplied to uploadFile.
DeepSeek file uploads support JPEG (.jpg and .jpeg), PNG, GIF, and WebP
images. Each file can be at most 64 MiB, and filenames can contain at most 512
characters. The AI SDK validates these constraints before sending the upload
request. The image/jpg media type alias is accepted, and a supported filename
extension is used as a fallback when the media type is generic (for example,
application/octet-stream). Recognizable non-image content is rejected even
when its declared media type or filename indicates a supported image format.
Model Capabilities
| Model | Text Generation | Object Generation | Image Input | Tool Usage | Tool Streaming |
|---|---|---|---|---|---|
deepseek-flash | |||||
deepseek-v4-flash | |||||
deepseek-v4-pro | |||||
deepseek-v4-flash-vision-exp |
Please see the DeepSeek docs for a full list of available models. You can also pass any available provider model ID as a string if needed.