)}
- {driverKind !== "antigravity" && error ? (
+ {supportsCustomModels && error ? (
{error}
) : null}
diff --git a/apps/web/src/components/settings/providerDriverMeta.ts b/apps/web/src/components/settings/providerDriverMeta.ts
index 4bf4da3919ba..537a585a4d6f 100644
--- a/apps/web/src/components/settings/providerDriverMeta.ts
+++ b/apps/web/src/components/settings/providerDriverMeta.ts
@@ -5,6 +5,7 @@ import {
CursorSettings,
GrokSettings,
OpenCodeSettings,
+ OhMyPiSettings,
ProviderDriverKind,
} from "@t3tools/contracts";
import type * as Schema from "effect/Schema";
@@ -16,6 +17,7 @@ import {
type Icon,
OpenAI,
OpenCodeIcon,
+ OhMyPiIcon,
} from "../Icons";
type ProviderSettingsSchema = {
@@ -44,6 +46,12 @@ export interface ProviderClientDefinition {
}
const PROVIDER_CLIENT_DEFINITIONS: readonly ProviderClientDefinition[] = [
+ {
+ value: ProviderDriverKind.make("ohMyPi"),
+ label: "OhMyPi",
+ icon: OhMyPiIcon,
+ settingsSchema: OhMyPiSettings,
+ },
{
value: ProviderDriverKind.make("codex"),
label: "Codex",
diff --git a/apps/web/src/components/settings/settingsSearch.ts b/apps/web/src/components/settings/settingsSearch.ts
index f56579990714..14c518058b60 100644
--- a/apps/web/src/components/settings/settingsSearch.ts
+++ b/apps/web/src/components/settings/settingsSearch.ts
@@ -377,7 +377,7 @@ export const SETTINGS_SEARCH_ITEMS = [
title: "Providers",
to: "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/settings/providers",
searchTerms: [
- "agents cli codex claude cursor grok opencode antigravity google sign in sign out install subscription instances authentication api key models configuration binary path config directory endpoint arguments environment variables display name accent color custom favorite hidden auto compact",
+ "agents cli codex claude cursor grok opencode ohmypi omp antigravity google sign in sign out install subscription instances authentication api key models configuration binary path config directory endpoint arguments environment variables display name accent color custom favorite hidden auto compact",
],
},
{
diff --git a/apps/web/src/modelSelection.test.ts b/apps/web/src/modelSelection.test.ts
index 959a5eb8c481..8fd29e3ed8ee 100644
--- a/apps/web/src/modelSelection.test.ts
+++ b/apps/web/src/modelSelection.test.ts
@@ -657,6 +657,35 @@ describe("instance-scoped model selection", () => {
}
});
+ it("offers only account catalog models for OhMyPi despite custom model settings", () => {
+ const driver = ProviderDriverKind.make("ohMyPi");
+ const customId = ProviderInstanceId.make("ohMyPi_work");
+ const nativeModel = "openai/gpt";
+ const settings: UnifiedSettings = {
+ ...DEFAULT_UNIFIED_SETTINGS,
+ providers: {
+ ...DEFAULT_UNIFIED_SETTINGS.providers,
+ ohMyPi: {
+ ...DEFAULT_UNIFIED_SETTINGS.providers.ohMyPi,
+ customModels: ["api-only-model"],
+ },
+ },
+ providerInstances: {
+ [customId]: { driver, config: { customModels: ["unknown-model"] } },
+ },
+ };
+ const entries = deriveProviderInstanceEntries([
+ provider({ provider: driver, instanceId: "ohMyPi", models: [nativeModel] }),
+ provider({ provider: driver, instanceId: customId, models: [nativeModel] }),
+ ]);
+
+ for (const entry of entries) {
+ expect(getAppModelOptionsForInstance(settings, entry).map((model) => model.slug)).toEqual([
+ nativeModel,
+ ]);
+ }
+ });
+
it("resolves the Antigravity default marker without creating an unavailable model", () => {
const instanceId = ProviderInstanceId.make("antigravity_work");
const nativeModel = "gemini-3.1-pro";
diff --git a/apps/web/src/modelSelection.ts b/apps/web/src/modelSelection.ts
index 1a39f06098ac..f167db7acddd 100644
--- a/apps/web/src/modelSelection.ts
+++ b/apps/web/src/modelSelection.ts
@@ -58,7 +58,7 @@ function readInstanceCustomModels(
instanceId: ProviderInstanceId,
driverKind: ProviderDriverKind,
): ReadonlyArray