@ai-toolkit/deepseek
Version:
The **[DeepSeek provider](https://sdk.khulnasoft.com/providers/ai-toolkit-providers/deepseek)** for the [AI TOOLKIT](https://sdk.khulnasoft.com/docs) contains language model support for the [DeepSeek](https://www.deepseek.com) platform.
101 lines (99 loc) • 3.13 kB
JavaScript
// src/deepseek-provider.ts
import { OpenAICompatibleChatLanguageModel } from "@ai-toolkit/openai-compatible";
import {
NoSuchModelError
} from "@ai-toolkit/provider";
import {
loadApiKey,
withoutTrailingSlash
} from "@ai-toolkit/provider-utils";
// src/deepseek-metadata-extractor.ts
import { safeValidateTypes } from "@ai-toolkit/provider-utils";
import { z } from "zod";
var buildDeepseekMetadata = (usage) => {
var _a, _b;
return usage == null ? void 0 : {
deepseek: {
promptCacheHitTokens: (_a = usage.prompt_cache_hit_tokens) != null ? _a : NaN,
promptCacheMissTokens: (_b = usage.prompt_cache_miss_tokens) != null ? _b : NaN
}
};
};
var deepSeekMetadataExtractor = {
extractMetadata: ({ parsedBody }) => {
const parsed = safeValidateTypes({
value: parsedBody,
schema: deepSeekResponseSchema
});
return !parsed.success || parsed.value.usage == null ? void 0 : buildDeepseekMetadata(parsed.value.usage);
},
createStreamExtractor: () => {
let usage;
return {
processChunk: (chunk) => {
var _a, _b;
const parsed = safeValidateTypes({
value: chunk,
schema: deepSeekStreamChunkSchema
});
if (parsed.success && ((_b = (_a = parsed.value.choices) == null ? void 0 : _a[0]) == null ? void 0 : _b.finish_reason) === "stop" && parsed.value.usage) {
usage = parsed.value.usage;
}
},
buildMetadata: () => buildDeepseekMetadata(usage)
};
}
};
var deepSeekUsageSchema = z.object({
prompt_cache_hit_tokens: z.number().nullish(),
prompt_cache_miss_tokens: z.number().nullish()
});
var deepSeekResponseSchema = z.object({
usage: deepSeekUsageSchema.nullish()
});
var deepSeekStreamChunkSchema = z.object({
choices: z.array(
z.object({
finish_reason: z.string().nullish()
})
).nullish(),
usage: deepSeekUsageSchema.nullish()
});
// src/deepseek-provider.ts
function createDeepSeek(options = {}) {
var _a;
const baseURL = withoutTrailingSlash(
(_a = options.baseURL) != null ? _a : "https://api.deepseek.com/v1"
);
const getHeaders = () => ({
Authorization: `Bearer ${loadApiKey({
apiKey: options.apiKey,
environmentVariableName: "DEEPSEEK_API_KEY",
description: "DeepSeek API key"
})}`,
...options.headers
});
const createLanguageModel = (modelId, settings = {}) => {
return new OpenAICompatibleChatLanguageModel(modelId, settings, {
provider: `deepseek.chat`,
url: ({ path }) => `${baseURL}${path}`,
headers: getHeaders,
fetch: options.fetch,
defaultObjectGenerationMode: "json",
metadataExtractor: deepSeekMetadataExtractor
});
};
const provider = (modelId, settings) => createLanguageModel(modelId, settings);
provider.languageModel = createLanguageModel;
provider.chat = createLanguageModel;
provider.textEmbeddingModel = (modelId) => {
throw new NoSuchModelError({ modelId, modelType: "textEmbeddingModel" });
};
return provider;
}
var deepseek = createDeepSeek();
export {
createDeepSeek,
deepseek
};
//# sourceMappingURL=index.mjs.map