Skip to content

Commit 18c38e8

Browse files
committed
reafactor: rebase and move provider section
1 parent f0b2789 commit 18c38e8

File tree

6 files changed

+41
-11
lines changed

6 files changed

+41
-11
lines changed

src/browser/features/Settings/Sections/ModelRow.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ import { formatModelDisplayName } from "@/common/utils/ai/modelDisplay";
1515
import { cn } from "@/common/lib/utils";
1616
import type { AvailableRoute } from "@/common/routing";
1717
import { getModelStats, type ModelStats } from "@/common/utils/tokens/modelStats";
18+
import {
19+
isOpenAICompatibleProvider,
20+
formatOpenAICompatibleDisplayName,
21+
} from "@/common/utils/providers/openaiCompatible";
1822

1923
/** Format tokens as human-readable string (e.g. 200000 -> "200k") */
2024
function formatTokenCount(tokens: number): string {
@@ -329,6 +333,11 @@ export function ModelRow(props: ModelRowProps) {
329333
<span className="text-foreground min-w-0 truncate font-mono text-xs">
330334
{props.modelId}
331335
</span>
336+
{isOpenAICompatibleProvider(props.provider) && (
337+
<span className="text-muted shrink-0 rounded bg-background-secondary px-1.5 py-0.5 text-[10px]">
338+
{formatOpenAICompatibleDisplayName(props.provider)}
339+
</span>
340+
)}
332341
{mappedModelDisplayName && (
333342
<span className="text-muted ml-1 flex shrink-0 items-center gap-1 text-[10px]">
334343

src/browser/features/Settings/Sections/OpenAICompatibleProvidersSection.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ export function OpenAICompatibleProvidersSection({
262262
<p className="text-muted text-xs">
263263
Configure OpenAI-compatible API endpoints (Together AI, Fireworks, LM Studio, etc.).
264264
Models are accessed via{" "}
265-
<code className="text-accent">openai-compatible:provider-id:model-name</code>.
265+
<code className="text-accent">openai-compatible/provider-id:model-name</code>.
266266
</p>
267267

268268
{error && (
@@ -455,7 +455,7 @@ export function OpenAICompatibleProvidersSection({
455455
placeholder="together-ai"
456456
/>
457457
<p className="text-dim mt-1 text-xs">
458-
Used in model strings: openai-compatible:
458+
Used in model strings: openai-compatible/
459459
<span className="text-accent">together-ai</span>:model-id
460460
</p>
461461
</div>

src/browser/features/Settings/Sections/ProvidersSection.tsx

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ import { CSS } from "@dnd-kit/utilities";
3131
import { createEditKeyHandler } from "@/browser/utils/ui/keybinds";
3232
import { getBrowserBackendBaseUrl } from "@/browser/utils/backendBaseUrl";
3333
import { PROVIDER_DEFINITIONS, type ProviderName } from "@/common/constants/providers";
34-
import type { ProvidersConfigMap } from "@/common/orpc/types";
3534
import { OpenAICompatibleProvidersSection } from "./OpenAICompatibleProvidersSection";
3635
import { usePolicy } from "@/browser/contexts/PolicyContext";
3736
import { getAllowedProvidersForUi } from "@/browser/utils/policyUi";
@@ -1228,10 +1227,27 @@ export function ProvidersSection() {
12281227
{(
12291228
[
12301229
{ key: "direct", label: "Direct Providers", providers: providerGroups.direct },
1230+
{
1231+
key: "openai-compatible",
1232+
label: "User Providers",
1233+
providers: [],
1234+
render: () => <OpenAICompatibleProvidersSection />,
1235+
},
12311236
{ key: "gateway", label: "Gateways", providers: providerGroups.gateway },
12321237
{ key: "local", label: "Local", providers: providerGroups.local },
12331238
] as const
12341239
).map((section) => {
1240+
if ("render" in section) {
1241+
return (
1242+
<div key={section.key} className="space-y-2">
1243+
<div className="text-muted text-xs font-medium tracking-wide uppercase">
1244+
{section.label}
1245+
</div>
1246+
{section.render()}
1247+
</div>
1248+
);
1249+
}
1250+
12351251
if (section.providers.length === 0) {
12361252
return null;
12371253
}
@@ -2203,8 +2219,6 @@ export function ProvidersSection() {
22032219
);
22042220
})}
22052221

2206-
<OpenAICompatibleProvidersSection />
2207-
22082222
{config && !hasAnyConfiguredProvider && (
22092223
<div className="border-warning/40 bg-warning/10 text-warning rounded-md border px-3 py-2 text-xs">
22102224
No providers are currently enabled. You won&apos;t be able to send messages until you

src/browser/features/Settings/Sections/System1Section.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import { useAPI } from "@/browser/contexts/API";
1414
import { useOptionalWorkspaceContext } from "@/browser/contexts/WorkspaceContext";
1515
import { getDefaultModel, getSuggestedModels } from "@/browser/hooks/useModelsFromSettings";
1616
import { useProvidersConfig } from "@/browser/hooks/useProvidersConfig";
17-
import { useOpenAICompatibleProviders } from "@/browser/hooks/useOpenAICompatibleProviders";
1817
import { usePersistedState } from "@/browser/hooks/usePersistedState";
1918
import {
2019
getModelKey,

src/browser/hooks/useModelsFromSettings.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import {
88
import { WORKSPACE_DEFAULTS } from "@/constants/workspaceDefaults";
99
import { useProvidersConfig } from "./useProvidersConfig";
1010
import { useRouting } from "./useRouting";
11-
import { useOpenAICompatibleProviders } from "./useOpenAICompatibleProviders";
1211
import { usePolicy } from "@/browser/contexts/PolicyContext";
1312
import { useAPI } from "@/browser/contexts/API";
1413
import { isValidProvider } from "@/common/constants/providers";
@@ -20,9 +19,6 @@ import {
2019
} from "@/common/utils/ai/models";
2120
import { isModelAvailable } from "@/common/routing";
2221
import type { ProviderModelEntry, ProvidersConfigMap } from "@/common/orpc/types";
23-
import type {
24-
OpenAICompatibleProvidersInfo,
25-
} from "@/common/orpc/types";
2622
import { DEFAULT_MODEL_KEY, HIDDEN_MODELS_KEY } from "@/common/constants/storage";
2723

2824
import { getProviderModelEntryId } from "@/common/utils/providers/modelEntries";
@@ -127,7 +123,6 @@ export function useModelsFromSettings() {
127123
);
128124
const { config, refresh } = useProvidersConfig();
129125
const { routePriority, routeOverrides } = useRouting();
130-
const { config: openaiCompatibleConfig } = useOpenAICompatibleProviders();
131126

132127
const [defaultModel, setDefaultModel] = usePersistedState<string>(
133128
DEFAULT_MODEL_KEY,
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
const OPENAI_COMPATIBLE_PREFIX = "openai-compatible/";
2+
3+
export function isOpenAICompatibleProvider(provider: string): boolean {
4+
return provider.startsWith(OPENAI_COMPATIBLE_PREFIX);
5+
}
6+
7+
export function formatOpenAICompatibleDisplayName(provider: string): string {
8+
const instanceId = provider.slice(OPENAI_COMPATIBLE_PREFIX.length);
9+
return instanceId
10+
.split("-")
11+
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
12+
.join(" ");
13+
}

0 commit comments

Comments
 (0)