diff --git a/packages/ai/src/providers/openai-compatible.ts b/packages/ai/src/providers/openai-compatible.ts index 8b5d23eed7..e4e1be32fc 100644 --- a/packages/ai/src/providers/openai-compatible.ts +++ b/packages/ai/src/providers/openai-compatible.ts @@ -4,13 +4,15 @@ import type { RouteDefaultsInput } from "../route/client" import { AuthOptions, type ProviderAuthOption } from "../route/auth-options" import type { ProviderPackage } from "../provider-package" import { profiles, type OpenAICompatibleProfile } from "./openai-compatible-profile" +import type { OpenAIProviderOptionsInput } from "./openai-options" export const id = ProviderID.make("openai-compatible") -type GenericModelOptions = RouteDefaultsInput & +type GenericModelOptions = Omit & ProviderAuthOption<"optional"> & { readonly provider?: string readonly baseURL: string + readonly providerOptions?: OpenAIProviderOptionsInput } export interface Settings extends ProviderPackage.Settings { @@ -19,9 +21,10 @@ export interface Settings extends ProviderPackage.Settings { readonly provider?: string } -export type FamilyModelOptions = RouteDefaultsInput & +export type FamilyModelOptions = Omit & ProviderAuthOption<"optional"> & { readonly baseURL?: string + readonly providerOptions?: OpenAIProviderOptionsInput } export const routes = [OpenAICompatibleChat.route] @@ -37,7 +40,8 @@ export const configure = (input: GenericModelOptions) => { }) return { id: ProviderID.make(provider), - model: (modelID: string | ModelID) => route.model({ id: modelID, provider: ProviderID.make(provider) }), + model: (modelID: string | ModelID) => + route.model({ id: modelID, provider: ProviderID.make(provider) }), configure, } } @@ -63,7 +67,7 @@ export const provider = { configure, } -export const model: ProviderPackage.Definition["model"] = (modelID, settings) => +export const model: ProviderPackage.Definition["model"] = (modelID, settings) => configure({ apiKey: settings.apiKey, baseURL: settings.baseURL, diff --git a/packages/ai/test/provider-options/openai-compatible.types.ts b/packages/ai/test/provider-options/openai-compatible.types.ts new file mode 100644 index 0000000000..94cfd2d24c --- /dev/null +++ b/packages/ai/test/provider-options/openai-compatible.types.ts @@ -0,0 +1,13 @@ +import { LLM } from "../../src" +import { OpenAICompatible } from "../../src/providers" + +const model = OpenAICompatible.deepseek.model("deepseek-chat") + +LLM.request({ model, prompt: "Hello", providerOptions: { openai: { store: false } } }) + +LLM.request({ + model, + prompt: "Hello", + // @ts-expect-error OpenAI-compatible store must be boolean. + providerOptions: { openai: { store: "false" } }, +})