diff --git a/.changeset/forward-gateway-supported-urls.md b/.changeset/forward-gateway-supported-urls.md new file mode 100644 index 000000000..f2a566c27 --- /dev/null +++ b/.changeset/forward-gateway-supported-urls.md @@ -0,0 +1,5 @@ +--- +"ai-gateway-provider": patch +--- + +Forward supported URL metadata from wrapped provider models. diff --git a/packages/ai-gateway-provider/src/index.ts b/packages/ai-gateway-provider/src/index.ts index f4ede9450..05372eb1e 100644 --- a/packages/ai-gateway-provider/src/index.ts +++ b/packages/ai-gateway-provider/src/index.ts @@ -22,13 +22,13 @@ export class AiGatewayChatLanguageModel implements LanguageModelV3 { readonly specificationVersion = "v3"; readonly defaultObjectGenerationMode = "json"; - readonly supportedUrls: Record | PromiseLike> = { - // No URLS are supported for this language model - }; - readonly models: InternalLanguageModelV3[]; readonly config: AiGatewaySettings; + get supportedUrls(): Record | PromiseLike> { + return this.models[0]?.supportedUrls ?? {}; + } + get modelId(): string { if (!this.models[0]) { throw new Error("models cannot be empty array"); diff --git a/packages/ai-gateway-provider/test/supported-urls.test.ts b/packages/ai-gateway-provider/test/supported-urls.test.ts new file mode 100644 index 000000000..74b8de341 --- /dev/null +++ b/packages/ai-gateway-provider/test/supported-urls.test.ts @@ -0,0 +1,26 @@ +import type { LanguageModelV3 } from "@ai-sdk/provider"; +import { describe, expect, it } from "vitest"; +import { createAiGateway } from "../src"; + +describe("supportedUrls", () => { + it("forwards supported URLs from the wrapped model", async () => { + const supportedUrls = { + "application/pdf": [/^https:\/\/example\.com\/.*$/], + "image/*": [/^https:\/\//], + }; + const wrappedModel = { + modelId: "test-model", + provider: "test-provider", + specificationVersion: "v3", + supportedUrls, + } as unknown as LanguageModelV3; + + const aigateway = createAiGateway({ + accountId: "test-account-id", + apiKey: "test-api-key", + gateway: "test-gateway", + }); + + await expect(await aigateway(wrappedModel).supportedUrls).toBe(supportedUrls); + }); +});