@@ -21,6 +21,10 @@ type LLMConnectionCardProps = {
2121 isActive ?: boolean ;
2222 deploymentEnv ?: string ;
2323 budgetStatus ?: string ;
24+ usedBudget ?: number ;
25+ monthlyBudget ?: number ;
26+ stopBudgetThreshold ?: number ;
27+ disconnectOnBudgetExceed ?: boolean ;
2428 onStatusChange ?: ( id : number | string , newStatus : boolean ) => void ;
2529} ;
2630
@@ -32,6 +36,10 @@ const LLMConnectionCard: FC<PropsWithChildren<LLMConnectionCardProps>> = ({
3236 isActive,
3337 deploymentEnv,
3438 budgetStatus,
39+ usedBudget,
40+ monthlyBudget,
41+ stopBudgetThreshold,
42+ disconnectOnBudgetExceed,
3543 onStatusChange,
3644} ) => {
3745 const { open, close } = useDialog ( ) ;
@@ -40,6 +48,31 @@ const LLMConnectionCard: FC<PropsWithChildren<LLMConnectionCardProps>> = ({
4048 const toast = useToast ( ) ;
4149 const queryClient = useQueryClient ( ) ;
4250
51+ // Format currency
52+ const formatCurrency = ( amount ?: number ) : string => {
53+ if ( amount === undefined || amount === null ) {
54+ return '0,00 €' ;
55+ }
56+
57+ return new Intl . NumberFormat ( 'et-EE' , {
58+ style : 'currency' ,
59+ currency : 'EUR' ,
60+ minimumFractionDigits : 2 ,
61+ maximumFractionDigits : 2 ,
62+ } ) . format ( amount ) ;
63+ } ;
64+
65+
66+ // Get the relevant budget threshold
67+ const getRelevantBudget = ( ) : number | undefined => {
68+ // here if disconnect on budget exceed is enabled and stop threshold is set, calculate the actual amount from percentage
69+ if ( disconnectOnBudgetExceed && stopBudgetThreshold && stopBudgetThreshold > 0 && monthlyBudget ) {
70+ return ( monthlyBudget * stopBudgetThreshold ) / 100 ;
71+ }
72+ // Otherwise using monthly budget
73+ return monthlyBudget ;
74+ } ;
75+
4376 const updateStatusMutation = useMutation ( {
4477 mutationFn : ( { id, status } : { id : string | number ; status : 'active' | 'inactive' } ) =>
4578 updateLLMConnectionStatus ( id , status ) ,
@@ -145,6 +178,16 @@ const LLMConnectionCard: FC<PropsWithChildren<LLMConnectionCardProps>> = ({
145178 </ span >
146179 < span className = "label-value" > { model ?? 'N/A' } </ span >
147180 </ div >
181+ { ( usedBudget !== undefined || monthlyBudget !== undefined ) && (
182+ < div className = "label-row" >
183+ < span className = "label-title" >
184+ { t ( 'dataModels.budgetUsage' ) } :
185+ </ span >
186+ < span className = "label-value" >
187+ { formatCurrency ( usedBudget ) } / { formatCurrency ( getRelevantBudget ( ) ) }
188+ </ span >
189+ </ div >
190+ ) }
148191 < div className = 'label-row' >
149192 { renderDeploymentEnv ( deploymentEnv ) }
150193 { renderBudgetStatus ( budgetStatus ) }
0 commit comments