fix(model-routes): use overridden model name for provider targets

This commit is contained in:
lizw2
2026-05-27 15:45:28 +08:00
committed by jialin
parent 96e6ddfe8a
commit 45e0ad9e93
5 changed files with 70 additions and 73 deletions
@@ -15,9 +15,8 @@ const useRegisterRoute = () => {
routeTargets: [
{
weight: 100,
provider_model_name: model.name,
provider_id: record.id,
parentId: record.id
overridden_model_name: model.name,
provider_id: record.id
}
]
};
@@ -78,7 +78,7 @@ const RouteItem: React.FC<TargetItemProps> = ({
<AutoTooltip ghost minWidth={20}>
{data.model_id
? modelList?.find((m) => m.value === data.model_id)?.label
: data.provider_model_name}
: data.overridden_model_name}
</AutoTooltip>
</span>
);
+14 -18
View File
@@ -1,24 +1,21 @@
export interface RouteTargetFormItem {
id?: number;
overridden_model_name?: string;
weight?: number | null;
model_id?: number;
provider_id?: number;
fallback_status_codes?: string[];
parentId?: string | number;
}
export interface FormData {
name: string;
description: string;
categories: any[];
meta: Record<string, any>;
generic_proxy: boolean;
fallback_target: {
provider_model_name?: string;
model_id?: number;
provider_id?: number;
lora_module_name?: string;
fallback_status_codes?: string[];
};
targets: {
provider_model_name?: string;
weight?: number | null;
model_id?: number;
provider_id?: number;
lora_module_name?: string;
fallback_status_codes?: string[];
}[];
fallback_target: RouteTargetFormItem | null;
targets: RouteTargetFormItem[];
}
export interface RouteItem {
@@ -36,7 +33,7 @@ export interface RouteItem {
access_policy: string;
}
export interface RouteTarget {
export interface RouteTarget extends RouteTargetFormItem {
id: number;
created_at: string;
updated_at: string;
@@ -46,8 +43,7 @@ export interface RouteTarget {
route_name: string;
route_id: number;
provider_id: number;
provider_model_name: string;
overridden_model_name: string;
fallback_status_codes: string[];
lora_module_name?: string;
state: string;
}
+52 -50
View File
@@ -14,23 +14,56 @@ import { Form } from 'antd';
import _ from 'lodash';
import { forwardRef, useEffect, useImperativeHandle, useRef } from 'react';
import FormContext from '../config/form-context';
import { FormData, RouteItem as ListItem } from '../config/types';
import {
FormData,
RouteItem as ListItem,
RouteTargetFormItem
} from '../config/types';
import useEditTargets from '../hooks/use-edit-targets';
import Basic from './basic';
import Targets from './targets';
const isSameTarget = (
left?: RouteTargetFormItem | null,
right?: RouteTargetFormItem | null
) => {
if (!left || !right) {
return false;
}
if (left.model_id != null || right.model_id != null) {
return left.model_id != null && left.model_id === right.model_id;
}
return (
left.provider_id != null &&
left.provider_id === right.provider_id &&
left.overridden_model_name === right.overridden_model_name
);
};
const normalizeTarget = (
target: RouteTargetFormItem | null | undefined
): RouteTargetFormItem => {
const normalizedTarget = {
id: target?.id,
weight: target?.weight ?? 0,
model_id: target?.model_id,
provider_id: target?.provider_id,
overridden_model_name: target?.overridden_model_name,
fallback_status_codes: target?.fallback_status_codes
};
return _.omitBy(normalizedTarget, _.isUndefined) as RouteTargetFormItem;
};
interface ProviderFormProps {
ref?: any;
open: boolean;
action: PageActionType;
realAction?: string;
currentData?: ListItem & {
routeTargets?: {
weight?: number;
model_id?: number;
provider_id?: number;
provider_model_name?: string;
}[];
routeTargets?: RouteTargetFormItem[];
}; // Used when action is EDIT
onFinish: (values: FormData) => Promise<void>;
onFallbackChange?: (changed: boolean) => void;
@@ -92,25 +125,12 @@ const AccessForm: React.FC<ProviderFormProps> = forwardRef((props, ref) => {
const fallbackTarget = values.fallback_target;
if (fallbackTarget) {
const exsitinged = targetList.find((ep) => {
if (fallbackTarget!.model_id) {
return (
ep.model_id === fallbackTarget!.model_id &&
ep.lora_module_name === fallbackTarget!.lora_module_name
);
}
return (
ep.provider_id === fallbackTarget!.provider_id &&
ep.provider_model_name === fallbackTarget!.provider_model_name
);
});
if (exsitinged) {
const existingTarget = targetList.find((target) =>
isSameTarget(target, fallbackTarget)
);
if (existingTarget) {
targetList = targetList.map((ep) => {
if (
(ep.model_id === fallbackTarget.model_id &&
ep.lora_module_name === fallbackTarget.lora_module_name) ||
ep.provider_model_name === fallbackTarget.provider_model_name
) {
if (isSameTarget(ep, fallbackTarget)) {
return {
...ep,
fallback_status_codes: ['4xx', '5xx']
@@ -120,7 +140,7 @@ const AccessForm: React.FC<ProviderFormProps> = forwardRef((props, ref) => {
});
}
if (!exsitinged) {
if (!existingTarget) {
targetList.push({
...fallbackTarget,
weight: 0,
@@ -129,7 +149,7 @@ const AccessForm: React.FC<ProviderFormProps> = forwardRef((props, ref) => {
}
}
return targetList;
return targetList.map((target) => normalizeTarget(target));
};
const handleOnFinish = (values: FormData) => {
@@ -148,27 +168,14 @@ const AccessForm: React.FC<ProviderFormProps> = forwardRef((props, ref) => {
return;
}
const initDataList = async (
targets: {
weight?: number;
model_id?: number;
provider_id?: number;
provider_model_name?: string;
lora_module_name?: string;
}[]
) => {
const initDataList = async (targets: RouteTargetFormItem[]) => {
// init targets form list
targetsRef.current?.initDataList(
targets?.map((ep) => ({
weight: ep.weight,
value: ep.model_id
? [
'deployments',
ep.lora_module_name
? `${ep.model_id}_lora_${ep.lora_module_name}`
: ep.model_id
]
: [ep.provider_id, ep.provider_model_name]
? ['deployments', ep.model_id]
: [ep.provider_id, ep.overridden_model_name]
})) || []
);
};
@@ -190,13 +197,8 @@ const AccessForm: React.FC<ProviderFormProps> = forwardRef((props, ref) => {
if (fallbackTarget) {
targetsRef.current?.initFallbackValues({
value: fallbackTarget.model_id
? [
'deployments',
fallbackTarget.lora_module_name
? `${fallbackTarget.model_id}_lora_${fallbackTarget.lora_module_name}`
: fallbackTarget.model_id
]
: [fallbackTarget.provider_id, fallbackTarget.provider_model_name]
? ['deployments', fallbackTarget.model_id]
: [fallbackTarget.provider_id, fallbackTarget.overridden_model_name]
});
}
};
@@ -90,7 +90,7 @@ const useTargetSourceModels = () => {
label: model.name,
value: model.name,
data: {
provider_model_name: model.name,
overridden_model_name: model.name,
provider_id: provider.id,
parentId: provider.id
},