diff --git a/ui/litellm-dashboard/src/components/model_dashboard.tsx b/ui/litellm-dashboard/src/components/model_dashboard.tsx index ff421da6db..d94fd89f9a 100644 --- a/ui/litellm-dashboard/src/components/model_dashboard.tsx +++ b/ui/litellm-dashboard/src/components/model_dashboard.tsx @@ -1045,13 +1045,8 @@ const ModelDashboard: React.FC = ({ const setProviderModelsFn = (provider: string) => { console.log(`received provider string: ${provider}`); - const providerKey = Object.keys(Providers).find( - (key) => (Providers as { [index: string]: any })[key] === provider - ); - + let providerKey = provider; if (providerKey) { - const mappingResult = provider_map[providerKey]; // Get the corresponding value from the mapping - console.log(`mappingResult: ${mappingResult}`); let _providerModels: Array = []; if (typeof modelMap === "object") { Object.entries(modelMap).forEach(([key, value]) => { @@ -1059,8 +1054,8 @@ const ModelDashboard: React.FC = ({ value !== null && typeof value === "object" && "litellm_provider" in (value as object) && - ((value as any)["litellm_provider"] === mappingResult || - (value as any)["litellm_provider"].includes(mappingResult)) + ((value as any)["litellm_provider"] === providerKey || + (value as any)["litellm_provider"].includes(providerKey)) ) { _providerModels.push(key); } @@ -1766,363 +1761,580 @@ const ModelDashboard: React.FC = ({ Add new model - -
- <> - - - + {Object.keys(Providers).map((providerKey) => ( + { + setProviderModelsFn(provider_map[providerKey as keyof typeof Providers]); + setSelectedProvider(Providers[providerKey as keyof typeof Providers]); + }} + > +
+ {`${Providers[providerKey { + // Create a div with provider initial as fallback + const target = e.target as HTMLImageElement; + const parent = target.parentElement; + if (parent) { + const fallbackDiv = document.createElement('div'); + fallbackDiv.className = 'w-5 h-5 rounded-full bg-gray-200 flex items-center justify-center text-xs'; + fallbackDiv.textContent = Providers[providerKey as keyof typeof Providers].charAt(0); + parent.replaceChild(fallbackDiv, target); + } + }} + /> + {Providers[providerKey as keyof typeof Providers]} +
+
+ ))} + +
+ + {/* Provider-specific fields */} + {dynamicProviderForm !== undefined && + dynamicProviderForm.fields.length > 0 && ( + - {Providers[providerKey as keyof typeof Providers]} - - - ))} - - - {dynamicProviderForm !== undefined && - dynamicProviderForm.fields.length > 0 && ( - - )} - {selectedProvider != Providers.Bedrock && - selectedProvider != Providers.Vertex_AI && - selectedProvider != Providers.Ollama && - (dynamicProviderForm === undefined || - dynamicProviderForm.fields.length == 0) && ( - - - - )} - {selectedProvider == Providers.OpenAI && ( - - - - )} - {selectedProvider == Providers.Vertex_AI && ( - - - - )} - {selectedProvider == Providers.Vertex_AI && ( - - - - )} - {selectedProvider == Providers.Vertex_AI && ( - - - }> - Click to Upload - - - - )} - {selectedProvider == Providers.Vertex_AI && ( - + )} + + {/* Advanced fields */} + + + + + + + + Model name your users will pass in. + + + + + + + + {(selectedProvider === Providers.Azure) || (selectedProvider === Providers.OpenAI_Compatible) || (selectedProvider === Providers.Ollama) ? ( + + ) : providerModels.length > 0 ? ( + + Custom Model Name (Enter below) + {providerModels.map((model, index) => ( + + {model} + + ))} + + ) : ( + + )} + + + + prevValues.model !== currentValues.model} + > + {({ getFieldValue }) => { + const selectedModels = getFieldValue('model') || []; + return selectedModels.includes('custom') && ( + + + + ) + }} + + + + - Give litellm a gcp service account(.json file), so it - can make the relevant calls + Actual model name used for making{" "} + + litellm.completion() call + + . We'll{" "} + + loadbalance + {" "} + models with the same 'public name' - )} - {(selectedProvider == Providers.Azure || - selectedProvider == Providers.OpenAI_Compatible) && ( - - - - )} - {selectedProvider == Providers.Azure && ( - - - - )} - {selectedProvider == Providers.Azure && ( -
- - - - - - - - The actual model your azure deployment uses. Used - for accurate cost tracking. Select name from{" "} - - here - - - - -
- )} - {selectedProvider == Providers.Bedrock && ( - - - - )} - {selectedProvider == Providers.Bedrock && ( - - - - )} - {selectedProvider == Providers.Bedrock && ( - - - - )} - - setShowAdvancedSettings(!showAdvancedSettings)} - style={{ cursor: 'pointer' }} - > -
- Advanced Settings - -
- - - {showAdvancedSettings && ( - <> - - - - - - - - Model name your users will pass in. - - - - - - - - {(selectedProvider === Providers.Azure) || (selectedProvider === Providers.OpenAI_Compatible) || (selectedProvider === Providers.Ollama) ? ( - - ) : providerModels.length > 0 ? ( - - Custom Model Name (Enter below) - {providerModels.map((model, index) => ( - - {model} - - ))} - - ) : ( - + {/* All the provider-specific fields */} + {dynamicProviderForm !== undefined && + dynamicProviderForm.fields.length > 0 && ( + )} + {selectedProvider != Providers.Bedrock && + selectedProvider != Providers.Vertex_AI && + selectedProvider != Providers.Ollama && + (dynamicProviderForm === undefined || + dynamicProviderForm.fields.length == 0) && ( + + + + )} + {selectedProvider == Providers.OpenAI && ( + + + + )} + {selectedProvider == Providers.Vertex_AI && ( + + + + )} + {selectedProvider == Providers.Vertex_AI && ( + + + + )} + {selectedProvider == Providers.Vertex_AI && ( + + + }> + Click to Upload + + + + )} + {selectedProvider == Providers.Vertex_AI && ( + + + + + Give litellm a gcp service account(.json file), so it + can make the relevant calls + + + + )} + {(selectedProvider == Providers.Azure || + selectedProvider == Providers.OpenAI_Compatible) && ( + + + + )} + {selectedProvider == Providers.Azure && ( + + + + )} + {selectedProvider == Providers.Azure && ( +
+ + + + + + + + The actual model your azure deployment uses. Used + for accurate cost tracking. Select name from{" "} + + here + + + + +
+ )} + {selectedProvider == Providers.Bedrock && ( + + + + )} + {selectedProvider == Providers.Bedrock && ( + + + + )} + {selectedProvider == Providers.Bedrock && ( + + + + )} + +