diff --git a/src/app/TitleBar.tsx b/src/app/TitleBar.tsx
index 3930bda..f9e39f8 100644
--- a/src/app/TitleBar.tsx
+++ b/src/app/TitleBar.tsx
@@ -6,6 +6,7 @@ import { useSettings } from "@/hooks/useSettings";
import { Button } from "@/components/ui/button";
// @ts-ignore
import logo from "../../assets/logo_transparent.png";
+import { providerSettingsRoute } from "@/routes/settings/providers/$provider";
export const TitleBar = () => {
const [selectedAppId] = useAtom(selectedAppIdAtom);
@@ -25,6 +26,8 @@ export const TitleBar = () => {
}
};
+ const isDyadPro = !!settings?.providerSettings?.auto?.apiKey?.value;
+
return (
@@ -39,6 +42,21 @@ export const TitleBar = () => {
>
{displayText}
+ {isDyadPro && (
+
+ )}
);
};
diff --git a/src/components/settings/ProviderSettingsPage.tsx b/src/components/settings/ProviderSettingsPage.tsx
index 9571712..9fabff1 100644
--- a/src/components/settings/ProviderSettingsPage.tsx
+++ b/src/components/settings/ProviderSettingsPage.tsx
@@ -273,7 +273,6 @@ export function ProviderSettingsPage({ provider }: ProviderSettingsPageProps) {
setApiKeyInput(e.target.value)}
diff --git a/src/constants/models.ts b/src/constants/models.ts
index 0c83b51..c85d9a1 100644
--- a/src/constants/models.ts
+++ b/src/constants/models.ts
@@ -14,6 +14,11 @@ export const MODEL_OPTIONS: Record = {
displayName: "GPT 4.1",
description: "OpenAI's flagship model",
},
+ {
+ name: "gpt-4.1-mini",
+ displayName: "GPT 4.1 Mini",
+ description: "OpenAI's lightweight, but intelligent model",
+ },
{
name: "o3-mini",
displayName: "o3 mini",
@@ -55,40 +60,40 @@ export const MODEL_OPTIONS: Record = {
export const PROVIDERS: Record<
RegularModelProvider,
{
- name: string;
displayName: string;
hasFreeTier?: boolean;
websiteUrl?: string;
+ gatewayPrefix: string;
}
> = {
openai: {
- name: "openai",
displayName: "OpenAI",
hasFreeTier: false,
websiteUrl: "https://platform.openai.com/api-keys",
+ gatewayPrefix: "",
},
anthropic: {
- name: "anthropic",
displayName: "Anthropic",
hasFreeTier: false,
websiteUrl: "https://console.anthropic.com/settings/keys",
+ gatewayPrefix: "anthropic/",
},
google: {
- name: "google",
displayName: "Google",
hasFreeTier: true,
websiteUrl: "https://aistudio.google.com/app/apikey",
+ gatewayPrefix: "gemini/",
},
openrouter: {
- name: "openrouter",
displayName: "OpenRouter",
hasFreeTier: true,
websiteUrl: "https://openrouter.ai/settings/keys",
+ gatewayPrefix: "openrouter/",
},
auto: {
- name: "auto",
displayName: "Dyad",
websiteUrl: "https://academy.dyad.sh/settings",
+ gatewayPrefix: "",
},
};
diff --git a/src/ipc/utils/get_model_client.ts b/src/ipc/utils/get_model_client.ts
index 4f089c4..b7aa77b 100644
--- a/src/ipc/utils/get_model_client.ts
+++ b/src/ipc/utils/get_model_client.ts
@@ -1,12 +1,19 @@
-import { createOpenAI } from "@ai-sdk/openai";
+import { createOpenAI, OpenAIProvider } from "@ai-sdk/openai";
import { createGoogleGenerativeAI as createGoogle } from "@ai-sdk/google";
import { createAnthropic } from "@ai-sdk/anthropic";
import { createOpenRouter } from "@openrouter/ai-sdk-provider";
import { createOllama } from "ollama-ai-provider";
import type { LargeLanguageModel, UserSettings } from "../../lib/schemas";
-import { PROVIDER_TO_ENV_VAR, AUTO_MODELS } from "../../constants/models";
+import {
+ PROVIDER_TO_ENV_VAR,
+ AUTO_MODELS,
+ PROVIDERS,
+} from "../../constants/models";
import { getEnvVar } from "./read_env";
+import log from "electron-log";
+
+const logger = log.scope("getModelClient");
export function getModelClient(
model: LargeLanguageModel,
settings: UserSettings
@@ -38,6 +45,17 @@ export function getModelClient(
throw new Error("No API keys available for any model in AUTO_MODELS");
}
+ const dyadApiKey = settings.providerSettings?.auto?.apiKey?.value;
+ if (dyadApiKey) {
+ const provider = createOpenAI({
+ apiKey: dyadApiKey,
+ baseURL: "https://llm-gateway.dyad.sh/v1",
+ });
+ const providerInfo = PROVIDERS[model.provider as keyof typeof PROVIDERS];
+ logger.info("Using Dyad Pro API key");
+ return provider(`${providerInfo.gatewayPrefix}${model.name}`);
+ }
+
const apiKey =
settings.providerSettings?.[model.provider]?.apiKey?.value ||
getEnvVar(PROVIDER_TO_ENV_VAR[model.provider]);