@@ -110,19 +121,14 @@ export function WorkspaceModelsDropdown({
selectionBehavior="replace"
selectedKeys={selectedKey ? [selectedKey] : []}
onSelectionChange={(v) => {
- if (v === 'all') {
- return
- }
- const selectedValue = v.values().next().value
- if (!selectedValue && typeof selectedValue !== 'string') return
- if (typeof selectedValue === 'string') {
- const atIndex = selectedValue.indexOf('@')
- const provider_id = selectedValue.slice(0, atIndex)
- const modelName = selectedValue.slice(atIndex + 1)
- if (atIndex === -1 && (!provider_id || !modelName)) return
+ if (v === 'all') return
+ const id = v.values().next().value?.toString()
+ if (typeof id === 'string') {
+ const model = deserializeMuxModel(id)
onChange({
- model: modelName,
- provider_id,
+ model: model.name,
+ provider_name: model.provider_name,
+ provider_type: model.provider_type,
})
setIsOpen(false)
}
diff --git a/src/features/workspace/components/workspace-muxing-model.tsx b/src/features/workspace/components/workspace-muxing-model.tsx
index feb800cf..d6dcfcf5 100644
--- a/src/features/workspace/components/workspace-muxing-model.tsx
+++ b/src/features/workspace/components/workspace-muxing-model.tsx
@@ -19,7 +19,10 @@ import {
} from '@stacklok/ui-kit'
import { twMerge } from 'tailwind-merge'
import { useMutationPreferredModelWorkspace } from '../hooks/use-mutation-preferred-model-workspace'
-import { V1ListAllModelsForAllProvidersResponse } from '@/api/generated'
+import {
+ ProviderType,
+ V1ListAllModelsForAllProvidersResponse,
+} from '@/api/generated'
import { FormEvent } from 'react'
import {
LayersThree01,
@@ -37,6 +40,7 @@ import {
} from '../hooks/use-muxing-rules-form-workspace'
import { FormButtons } from '@/components/FormButtons'
import { getRuleData, isRequestType } from '../lib/utils'
+import { z } from 'zod'
function MissingProviderBanner() {
return (
@@ -120,9 +124,15 @@ function SortableItem({
rule={rule}
isArchived={isArchived}
models={models}
- onChange={({ model, provider_id }) =>
- setRuleItem({ ...rule, provider_id, model })
- }
+ onChange={({ model, provider_name, provider_type }) => {
+ if (provider_type === undefined) return
+ setRuleItem({
+ ...rule,
+ provider_name,
+ provider_type: z.nativeEnum(ProviderType).parse(provider_type),
+ model,
+ })
+ }}
/>
{showRemoveButton && !isDefaultRule ? (