feat: models

This commit is contained in:
Gab 2026-03-24 18:41:07 +11:00
parent b4c7faa842
commit 981991d582
2 changed files with 9 additions and 4 deletions

View File

@ -228,8 +228,8 @@ export class OpenAICompatibleChatLanguageModel implements LanguageModelV2 {
}) })
} }
// reasoning content (Copilot uses reasoning_text): // reasoning content (Copilot uses reasoning_text, ToothFairyAI/DeepSeek use reasoning_content):
const reasoning = choice.message.reasoning_text const reasoning = choice.message.reasoning_text || choice.message.reasoning_content
if (reasoning != null && reasoning.length > 0) { if (reasoning != null && reasoning.length > 0) {
content.push({ content.push({
type: "reasoning", type: "reasoning",
@ -456,8 +456,8 @@ export class OpenAICompatibleChatLanguageModel implements LanguageModelV2 {
reasoningOpaque = delta.reasoning_opaque reasoningOpaque = delta.reasoning_opaque
} }
// enqueue reasoning before text deltas (Copilot uses reasoning_text): // enqueue reasoning before text deltas (Copilot uses reasoning_text, ToothFairyAI/DeepSeek use reasoning_content):
const reasoningContent = delta.reasoning_text const reasoningContent = delta.reasoning_text || delta.reasoning_content
if (reasoningContent) { if (reasoningContent) {
if (!isActiveReasoning) { if (!isActiveReasoning) {
controller.enqueue({ controller.enqueue({
@ -719,6 +719,8 @@ const OpenAICompatibleChatResponseSchema = z.object({
message: z.object({ message: z.object({
role: z.literal("assistant").nullish(), role: z.literal("assistant").nullish(),
content: z.string().nullish(), content: z.string().nullish(),
// OpenAI-style reasoning content (ToothFairyAI, DeepSeek, etc.)
reasoning_content: z.string().nullish(),
// Copilot-specific reasoning fields // Copilot-specific reasoning fields
reasoning_text: z.string().nullish(), reasoning_text: z.string().nullish(),
reasoning_opaque: z.string().nullish(), reasoning_opaque: z.string().nullish(),
@ -754,6 +756,8 @@ const createOpenAICompatibleChatChunkSchema = <ERROR_SCHEMA extends z.core.$ZodT
.object({ .object({
role: z.enum(["assistant"]).nullish(), role: z.enum(["assistant"]).nullish(),
content: z.string().nullish(), content: z.string().nullish(),
// OpenAI-style reasoning content (ToothFairyAI, DeepSeek, etc.)
reasoning_content: z.string().nullish(),
// Copilot-specific reasoning fields // Copilot-specific reasoning fields
reasoning_text: z.string().nullish(), reasoning_text: z.string().nullish(),
reasoning_opaque: z.string().nullish(), reasoning_opaque: z.string().nullish(),

View File

@ -466,6 +466,7 @@ export namespace ProviderTransform {
case "venice-ai-sdk-provider": case "venice-ai-sdk-provider":
// https://docs.venice.ai/overview/guides/reasoning-models#reasoning-effort // https://docs.venice.ai/overview/guides/reasoning-models#reasoning-effort
case "@ai-sdk/openai-compatible": case "@ai-sdk/openai-compatible":
case "@toothfairyai/sdk":
return Object.fromEntries(WIDELY_SUPPORTED_EFFORTS.map((effort) => [effort, { reasoningEffort: effort }])) return Object.fromEntries(WIDELY_SUPPORTED_EFFORTS.map((effort) => [effort, { reasoningEffort: effort }]))
case "@ai-sdk/azure": case "@ai-sdk/azure":