1- import { Show , type Component } from "solid-js"
1+ import { Show , type Component , type JSX } from "solid-js"
22import { useLanguage } from "@/context/language"
33
44type InputKey = "text" | "image" | "audio" | "video" | "pdf"
@@ -23,7 +23,16 @@ type ModelInfo = {
2323 }
2424}
2525
26- export const ModelTooltip : Component < { model : ModelInfo ; latest ?: boolean ; free ?: boolean } > = ( props ) => {
26+ function ModelTooltipRow ( props : { name : JSX . Element ; value : JSX . Element } ) {
27+ return (
28+ < div class = "flex min-w-0 items-center gap-4" >
29+ < span class = "shrink-0 text-v2-text-text-muted" > { props . name } </ span >
30+ < span class = "ml-auto min-w-0 truncate text-right text-v2-text-text-base" > { props . value } </ span >
31+ </ div >
32+ )
33+ }
34+
35+ export const ModelTooltip : Component < { model : ModelInfo ; latest ?: boolean ; free ?: boolean ; v2 ?: boolean } > = ( props ) => {
2736 const language = useLanguage ( )
2837 const sourceName = ( model : ModelInfo ) => {
2938 const value = `${ model . id } ${ model . name } ` . toLowerCase ( )
@@ -51,6 +60,13 @@ export const ModelTooltip: Component<{ model: ModelInfo; latest?: boolean; free?
5160 const suffix = tags . length ? ` (${ tags . join ( ", " ) } )` : ""
5261 return `${ sourceName ( props . model ) } ${ props . model . name } ${ suffix } `
5362 }
63+ const name = ( ) => {
64+ const tags : Array < string > = [ ]
65+ if ( props . latest ) tags . push ( language . t ( "model.tag.latest" ) )
66+ if ( props . free ) tags . push ( language . t ( "model.tag.free" ) )
67+ const suffix = tags . length ? ` (${ tags . join ( ", " ) } )` : ""
68+ return `${ props . model . name } ${ suffix } `
69+ }
5470 const inputs = ( ) => {
5571 if ( props . model . capabilities ) {
5672 const input = props . model . capabilities . input
@@ -73,6 +89,21 @@ export const ModelTooltip: Component<{ model: ModelInfo; latest?: boolean; free?
7389 : language . t ( "model.tooltip.reasoning.none" )
7490 }
7591 const context = ( ) => language . t ( "model.tooltip.context" , { limit : props . model . limit . context . toLocaleString ( ) } )
92+ const contextLimit = ( ) => props . model . limit . context . toLocaleString ( language . intl ( ) )
93+
94+ if ( props . v2 ) {
95+ return (
96+ < div class = "flex w-[180px] flex-col gap-2" >
97+ < ModelTooltipRow name = { language . t ( "model.tooltip.model" ) } value = { name ( ) } />
98+ < ModelTooltipRow name = { language . t ( "model.tooltip.provider" ) } value = { props . model . provider . name } />
99+ < Show when = { inputs ( ) } >
100+ { ( value ) => < ModelTooltipRow name = { language . t ( "model.tooltip.inputs" ) } value = { value ( ) } /> }
101+ </ Show >
102+ < ModelTooltipRow name = { language . t ( "model.tooltip.reasoning" ) } value = { reasoning ( ) } />
103+ < ModelTooltipRow name = { language . t ( "model.tooltip.context.label" ) } value = { contextLimit ( ) } />
104+ </ div >
105+ )
106+ }
76107
77108 return (
78109 < div class = "flex flex-col gap-1 py-1" >
0 commit comments