From 086044650d1db1ba0381f2ccfe69f7f89df54baa Mon Sep 17 00:00:00 2001 From: QuentinHsu Date: Mon, 1 Jun 2026 17:58:02 +0800 Subject: [PATCH] fix(pricing): sync custom model icons - add the icon field to the pricing model type to consume model-level icons returned by the backend. - prefer model icons in cards, table model cells, and detail headers while falling back to vendor icons. --- web/default/src/features/pricing/components/model-card.tsx | 7 ++++--- .../src/features/pricing/components/model-details.tsx | 7 ++++--- .../src/features/pricing/components/pricing-columns.tsx | 7 ++++--- web/default/src/features/pricing/types.ts | 1 + 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/web/default/src/features/pricing/components/model-card.tsx b/web/default/src/features/pricing/components/model-card.tsx index a8d792bc..44f2deba 100644 --- a/web/default/src/features/pricing/components/model-card.tsx +++ b/web/default/src/features/pricing/components/model-card.tsx @@ -56,8 +56,9 @@ export const ModelCard = memo(function ModelCard(props: ModelCardProps) { const tags = parseTags(props.model.tags) const groups = props.model.enable_groups || [] const endpoints = props.model.supported_endpoint_types || [] - const vendorIcon = props.model.vendor_icon - ? getLobeIcon(props.model.vendor_icon, 28) + const modelIconKey = props.model.icon || props.model.vendor_icon + const modelIcon = modelIconKey + ? getLobeIcon(modelIconKey, 28) : null const initial = props.model.model_name?.charAt(0).toUpperCase() || '?' const isDynamicPricing = @@ -97,7 +98,7 @@ export const ModelCard = memo(function ModelCard(props: ModelCardProps) {
- {vendorIcon || ( + {modelIcon || ( {initial} diff --git a/web/default/src/features/pricing/components/model-details.tsx b/web/default/src/features/pricing/components/model-details.tsx index f2dbcb09..b693889d 100644 --- a/web/default/src/features/pricing/components/model-details.tsx +++ b/web/default/src/features/pricing/components/model-details.tsx @@ -268,8 +268,9 @@ function OverviewSummaryGrid(props: { model: PricingModel }) { function ModelHeader(props: { model: PricingModel }) { const { t } = useTranslation() const model = props.model - const vendorIcon = model.vendor_icon - ? getLobeIcon(model.vendor_icon, 20) + const modelIconKey = model.icon || model.vendor_icon + const modelIcon = modelIconKey + ? getLobeIcon(modelIconKey, 20) : null const description = model.description || model.vendor_description || null const tags = parseTags(model.tags) @@ -281,7 +282,7 @@ function ModelHeader(props: { model: PricingModel }) { return (
- {vendorIcon} + {modelIcon}

{model.model_name}

diff --git a/web/default/src/features/pricing/components/pricing-columns.tsx b/web/default/src/features/pricing/components/pricing-columns.tsx index 1dbc99f7..0c1ea2d6 100644 --- a/web/default/src/features/pricing/components/pricing-columns.tsx +++ b/web/default/src/features/pricing/components/pricing-columns.tsx @@ -106,13 +106,14 @@ export function usePricingColumns( ), cell: ({ row }) => { const model = row.original - const vendorIcon = model.vendor_icon - ? getLobeIcon(model.vendor_icon, 14) + const modelIconKey = model.icon || model.vendor_icon + const modelIcon = modelIconKey + ? getLobeIcon(modelIconKey, 14) : null return (
- {vendorIcon} + {modelIcon} {model.model_name} diff --git a/web/default/src/features/pricing/types.ts b/web/default/src/features/pricing/types.ts index 9e643c91..9ee69cd7 100644 --- a/web/default/src/features/pricing/types.ts +++ b/web/default/src/features/pricing/types.ts @@ -31,6 +31,7 @@ export type PricingModel = { id: number model_name: string description?: string + icon?: string vendor_id?: number vendor_name?: string vendor_icon?: string