+ {t(
+ 'Users call the model on the left. The platform forwards the request to the upstream model on the right.'
+ )}
+
{rows.length > 0 ? (
{showFilter && (
diff --git a/web/src/features/channels/components/model-redirect-panel.tsx b/web/src/features/channels/components/model-redirect-panel.tsx
index 60260c97f..83b3a0880 100644
--- a/web/src/features/channels/components/model-redirect-panel.tsx
+++ b/web/src/features/channels/components/model-redirect-panel.tsx
@@ -16,7 +16,6 @@ along with this program. If not, see
.
For commercial licensing, please contact support@quantumnous.com
*/
-import { Wand2 } from 'lucide-react'
import { useId } from 'react'
import { useTranslation } from 'react-i18next'
@@ -25,11 +24,9 @@ import {
type FloatingWindowPosition,
} from '@/components/floating-window'
import { Badge } from '@/components/ui/badge'
-import { Button } from '@/components/ui/button'
import { Checkbox } from '@/components/ui/checkbox'
import { Label } from '@/components/ui/label'
-import type { ModelNamingSuggestion } from '../lib'
import {
ModelMappingEditor,
type ModelMappingDraftRequest,
@@ -44,9 +41,7 @@ type ModelRedirectPanelProps = {
onMappingChange: (value: string) => void
/** Called once an edit settles; the drawer syncs the model list here. */
onMappingCommit: (value: string) => void
- suggestions: ModelNamingSuggestion[]
- onApplySuggestion: (suggestion: ModelNamingSuggestion) => void
- onOpenRules: () => void
+ onBatchAdd: () => void
syncModels: boolean
onSyncModelsChange: (value: boolean) => void
sourceModelOptions: string[]
@@ -77,6 +72,7 @@ export function ModelRedirectPanel(props: ModelRedirectPanelProps) {
defaultWidth={props.width}
minWidth={340}
storageKey='channel-model-redirects'
+ expandRequest={props.draftRequest?.token}
onClose={props.onClose}
footer={
@@ -99,65 +95,17 @@ export function ModelRedirectPanel(props: ModelRedirectPanelProps) {
}
>
-
-
- {props.suggestions.length > 0 && (
-
- {t('Suggested rules')}
-
- )}
-
- {props.suggestions.map((suggestion) => {
- let label = ''
- if (suggestion.rule.type === 'replace') {
- label = t('Replace {{find}} with {{replaceWith}}', {
- find: suggestion.rule.find,
- replaceWith: suggestion.rule.replaceWith,
- })
- } else if ('values' in suggestion.rule) {
- label = t('Strip {{affix}}', {
- affix: suggestion.rule.values,
- })
- }
- return (
-
- )
- })}
-
-
-
-
-
+
)
}
diff --git a/web/src/features/channels/components/upstream-model-selection.tsx b/web/src/features/channels/components/upstream-model-selection.tsx
index da5622a2b..bb3744195 100644
--- a/web/src/features/channels/components/upstream-model-selection.tsx
+++ b/web/src/features/channels/components/upstream-model-selection.tsx
@@ -72,7 +72,7 @@ function ModelCategory(props: ModelCategoryProps) {
const allSelected = selectedCount === props.models.length
return (
-
+
-
+
{props.models.map((model) => (