@@ -10,6 +10,18 @@ import { type LoaderFunctionArgs } from "@remix-run/server-runtime";
1010import { AnimatePresence , motion } from "framer-motion" ;
1111import { useEffect , useMemo , useState } from "react" ;
1212import { 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" ;
1325import { ExitIcon } from "~/assets/icons/ExitIcon" ;
1426import { InlineCode } from "~/components/code/InlineCode" ;
1527import { 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
122152function 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