Skip to content

Commit cde8438

Browse files
committed
Added provider icons
1 parent 87e49b2 commit cde8438

File tree

1 file changed

+45
-3
lines changed
  • apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.models._index

1 file changed

+45
-3
lines changed

apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.models._index/route.tsx

Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,18 @@ import { type LoaderFunctionArgs } from "@remix-run/server-runtime";
1010
import { AnimatePresence, motion } from "framer-motion";
1111
import { useEffect, useMemo, useState } from "react";
1212
import { typedjson, useTypedLoaderData } from "remix-typedjson";
13+
import {
14+
AnthropicIcon,
15+
AzureIcon,
16+
CerebrasIcon,
17+
DeepseekIcon,
18+
GeminiIcon,
19+
LlamaIcon,
20+
MistralIcon,
21+
OpenAIIcon,
22+
PerplexityIcon,
23+
XAIIcon,
24+
} from "~/assets/icons/AiProviderIcons";
1325
import { ExitIcon } from "~/assets/icons/ExitIcon";
1426
import { InlineCode } from "~/components/code/InlineCode";
1527
import { PageBody, PageContainer } from "~/components/layout/AppLayout";
@@ -117,6 +129,24 @@ export const loader = async ({ request, params }: LoaderFunctionArgs) => {
117129
});
118130
};
119131

132+
const providerIcons: Record<string, (props: { className?: string }) => JSX.Element> = {
133+
openai: OpenAIIcon,
134+
anthropic: AnthropicIcon,
135+
google: GeminiIcon,
136+
meta: LlamaIcon,
137+
mistral: MistralIcon,
138+
deepseek: DeepseekIcon,
139+
xai: XAIIcon,
140+
perplexity: PerplexityIcon,
141+
cerebras: CerebrasIcon,
142+
azure: AzureIcon,
143+
};
144+
145+
function providerIcon(slug: string) {
146+
const Icon = providerIcons[slug] ?? CubeIcon;
147+
return <Icon className="size-4" />;
148+
}
149+
120150
// --- Filter Components ---
121151

122152
function ProviderFilter({ providers }: { providers: string[] }) {
@@ -139,7 +169,7 @@ function ProviderFilter({ providers }: { providers: string[] }) {
139169
<SelectPopover>
140170
<SelectList>
141171
{providers.map((p) => (
142-
<SelectItem key={p} value={p}>
172+
<SelectItem key={p} value={p} icon={providerIcon(p)}>
143173
{formatProviderName(p)}
144174
</SelectItem>
145175
))}
@@ -334,7 +364,12 @@ function ModelsList({
334364
<TableCell onClick={select} isTabbableCell>
335365
{model.displayId}
336366
</TableCell>
337-
<TableCell onClick={select}>{formatProviderName(model.provider)}</TableCell>
367+
<TableCell onClick={select}>
368+
<span className="flex items-center gap-1.5">
369+
{providerIcon(model.provider)}
370+
{formatProviderName(model.provider)}
371+
</span>
372+
</TableCell>
338373
<TableCell onClick={select} alignment="right" className="tabular-nums">
339374
{formatModelPrice(model.inputPrice)}
340375
</TableCell>
@@ -434,7 +469,14 @@ function buildComparisonRows(
434469
label: "Provider",
435470
values: models.map((m) => {
436471
const c = getCatalog(m);
437-
return c ? formatProviderName(c.provider) : dataMap.get(m)?.genAiSystem ?? "—";
472+
const slug = c?.provider ?? dataMap.get(m)?.genAiSystem;
473+
if (!slug) return "—";
474+
return (
475+
<span className="flex items-center gap-1.5">
476+
{providerIcon(slug)}
477+
{formatProviderName(slug)}
478+
</span>
479+
);
438480
}),
439481
},
440482
{

0 commit comments

Comments
 (0)