diff --git a/apps/x/packages/core/package.json b/apps/x/packages/core/package.json index 72d6f079..9a44f8e8 100644 --- a/apps/x/packages/core/package.json +++ b/apps/x/packages/core/package.json @@ -6,7 +6,8 @@ "types": "./dist/index.d.ts", "scripts": { "build": "rm -rf dist && tsc", - "dev": "tsc -w" + "dev": "tsc -w", + "test": "tsc --pretty false && node --test dist/models/models.test.js" }, "dependencies": { "@ai-sdk/anthropic": "^2.0.63", diff --git a/apps/x/packages/core/src/models/models.test.ts b/apps/x/packages/core/src/models/models.test.ts new file mode 100644 index 00000000..e3e3bbf7 --- /dev/null +++ b/apps/x/packages/core/src/models/models.test.ts @@ -0,0 +1,20 @@ +import test from "node:test"; +import assert from "node:assert/strict"; + +import { shouldUseGatewayForModelTest } from "./models.js"; + +test("signed-in ollama model tests bypass the gateway", () => { + assert.equal(shouldUseGatewayForModelTest("ollama", true), false); +}); + +test("signed-in openai-compatible model tests bypass the gateway", () => { + assert.equal(shouldUseGatewayForModelTest("openai-compatible", true), false); +}); + +test("signed-in hosted model tests still use the gateway", () => { + assert.equal(shouldUseGatewayForModelTest("openai", true), true); +}); + +test("signed-out hosted model tests do not use the gateway", () => { + assert.equal(shouldUseGatewayForModelTest("openai", false), false); +}); diff --git a/apps/x/packages/core/src/models/models.ts b/apps/x/packages/core/src/models/models.ts index 38b6801f..6e419395 100644 --- a/apps/x/packages/core/src/models/models.ts +++ b/apps/x/packages/core/src/models/models.ts @@ -70,6 +70,14 @@ export function createProvider(config: z.infer): ProviderV2 { } } +export function shouldUseGatewayForModelTest( + flavor: z.infer["flavor"], + signedIn: boolean, +): boolean { + const isLocal = flavor === "ollama" || flavor === "openai-compatible"; + return signedIn && !isLocal; +} + export async function testModelConnection( providerConfig: z.infer, model: string, @@ -80,7 +88,8 @@ export async function testModelConnection( const controller = new AbortController(); const timeout = setTimeout(() => controller.abort(), effectiveTimeout); try { - const provider = await isSignedIn() + const signedIn = await isSignedIn(); + const provider = shouldUseGatewayForModelTest(providerConfig.flavor, signedIn) ? await getGatewayProvider() : createProvider(providerConfig); const languageModel = provider.languageModel(model);