MCPcopy
hub / github.com/kagent-dev/kagent / ModelProviderCombobox

Function ModelProviderCombobox

ui/src/components/ModelProviderCombobox.tsx:44–206  ·  view source on GitHub ↗
({
    providers,
    models,
    value,
    onChange,
    disabled = false,
    loading = false,
    error = null,
    filterFunctionCalling = false,
    placeholder = "Select model...",
    loadingPlaceholder = "Loading models...",
    errorPlaceholder = "Error loading models",
    emptyPlaceholder = "No models available"
}: ModelProviderComboboxProps)

Source from the content-addressed store, hash-verified

42}
43
44export function ModelProviderCombobox({
45 providers,
46 models,
47 value,
48 onChange,
49 disabled = false,
50 loading = false,
51 error = null,
52 filterFunctionCalling = false,
53 placeholder = "Select model...",
54 loadingPlaceholder = "Loading models...",
55 errorPlaceholder = "Error loading models",
56 emptyPlaceholder = "No models available"
57}: ModelProviderComboboxProps) {
58 const [comboboxOpen, setComboboxOpen] = useState(false);
59
60 const getProviderIcon = useCallback((providerKey: ModelProviderKey | undefined): React.ReactNode | null => {
61 const PROVIDER_ICONS: Record<ModelProviderKey, React.ComponentType<{ className?: string }>> = {
62 'OpenAI': OpenAI,
63 'Anthropic': Anthropic,
64 'Ollama': Ollama,
65 'AzureOpenAI': Azure,
66 'Gemini': Gemini,
67 'GeminiVertexAI': Gemini,
68 'AnthropicVertexAI': Anthropic,
69 'Bedrock': Bedrock,
70 'SAPAICore': SAPAICore,
71 };
72 if (!providerKey || !PROVIDER_ICONS[providerKey]) {
73 return null;
74 }
75 const IconComponent = PROVIDER_ICONS[providerKey];
76 return <IconComponent className="h-4 w-4 mr-2 shrink-0" />;
77 }, []);
78
79 const groupedProviderModelOptions = useMemo(() => {
80 if (!providers || !models || providers.length === 0 || Object.keys(models).length === 0) {
81 return {};
82 }
83
84 const groups: { [groupName: string]: ComboboxOption[] } = {};
85 providers.forEach(provider => {
86 let providerFormKey: ModelProviderKey;
87 if (isValidProviderInfoKey(provider.name)) {
88 providerFormKey = provider.name;
89 } else {
90 console.warn(`Unsupported provider name found: ${provider.name}`);
91 return;
92 }
93
94 if (!isValidProviderInfoKey(providerFormKey)) return;
95
96 let providerModels: ProviderModel[] = [];
97
98 if (models[providerFormKey]) {
99 providerModels = models[providerFormKey]
100 .filter(m => filterFunctionCalling ? m.function_calling === true : true);
101 }

Callers

nothing calls this directly

Calls 4

isValidProviderInfoKeyFunction · 0.90
cnFunction · 0.90
getProviderIconFunction · 0.85
onChangeFunction · 0.85

Tested by

no test coverage detected