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: [ routeTargets: [
{ {
weight: 100, weight: 100,
provider_model_name: model.name, overridden_model_name: model.name,
provider_id: record.id, provider_id: record.id
parentId: record.id
} }
] ]
}; };
@@ -78,7 +78,7 @@ const RouteItem: React.FC<TargetItemProps> = ({
<AutoTooltip ghost minWidth={20}> <AutoTooltip ghost minWidth={20}>
{data.model_id {data.model_id
? modelList?.find((m) => m.value === data.model_id)?.label ? modelList?.find((m) => m.value === data.model_id)?.label
: data.provider_model_name} : data.overridden_model_name}
</AutoTooltip> </AutoTooltip>
</span> </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 { export interface FormData {
name: string; name: string;
description: string; description: string;
categories: any[]; categories: any[];
meta: Record<string, any>; meta: Record<string, any>;
generic_proxy: boolean; generic_proxy: boolean;
fallback_target: { fallback_target: RouteTargetFormItem | null;
provider_model_name?: string; targets: RouteTargetFormItem[];
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[];
}[];
} }
export interface RouteItem { export interface RouteItem {
@@ -36,7 +33,7 @@ export interface RouteItem {
access_policy: string; access_policy: string;
} }
export interface RouteTarget { export interface RouteTarget extends RouteTargetFormItem {
id: number; id: number;
created_at: string; created_at: string;
updated_at: string; updated_at: string;
@@ -46,8 +43,7 @@ export interface RouteTarget {
route_name: string; route_name: string;
route_id: number; route_id: number;
provider_id: number; provider_id: number;
provider_model_name: string; overridden_model_name: string;
fallback_status_codes: string[]; fallback_status_codes: string[];
lora_module_name?: string;
state: string; state: string;
} }
+52 -50
View File
@@ -14,23 +14,56 @@ import { Form } from 'antd';
import _ from 'lodash'; import _ from 'lodash';
import { forwardRef, useEffect, useImperativeHandle, useRef } from 'react'; import { forwardRef, useEffect, useImperativeHandle, useRef } from 'react';
import FormContext from '../config/form-context'; 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 useEditTargets from '../hooks/use-edit-targets';
import Basic from './basic'; import Basic from './basic';
import Targets from './targets'; 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 { interface ProviderFormProps {
ref?: any; ref?: any;
open: boolean; open: boolean;
action: PageActionType; action: PageActionType;
realAction?: string; realAction?: string;
currentData?: ListItem & { currentData?: ListItem & {
routeTargets?: { routeTargets?: RouteTargetFormItem[];
weight?: number;
model_id?: number;
provider_id?: number;
provider_model_name?: string;
}[];
}; // Used when action is EDIT }; // Used when action is EDIT
onFinish: (values: FormData) => Promise<void>; onFinish: (values: FormData) => Promise<void>;
onFallbackChange?: (changed: boolean) => void; onFallbackChange?: (changed: boolean) => void;
@@ -92,25 +125,12 @@ const AccessForm: React.FC<ProviderFormProps> = forwardRef((props, ref) => {
const fallbackTarget = values.fallback_target; const fallbackTarget = values.fallback_target;
if (fallbackTarget) { if (fallbackTarget) {
const exsitinged = targetList.find((ep) => { const existingTarget = targetList.find((target) =>
if (fallbackTarget!.model_id) { isSameTarget(target, fallbackTarget)
return ( );
ep.model_id === fallbackTarget!.model_id && if (existingTarget) {
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) {
targetList = targetList.map((ep) => { targetList = targetList.map((ep) => {
if ( if (isSameTarget(ep, fallbackTarget)) {
(ep.model_id === fallbackTarget.model_id &&
ep.lora_module_name === fallbackTarget.lora_module_name) ||
ep.provider_model_name === fallbackTarget.provider_model_name
) {
return { return {
...ep, ...ep,
fallback_status_codes: ['4xx', '5xx'] fallback_status_codes: ['4xx', '5xx']
@@ -120,7 +140,7 @@ const AccessForm: React.FC<ProviderFormProps> = forwardRef((props, ref) => {
}); });
} }
if (!exsitinged) { if (!existingTarget) {
targetList.push({ targetList.push({
...fallbackTarget, ...fallbackTarget,
weight: 0, 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) => { const handleOnFinish = (values: FormData) => {
@@ -148,27 +168,14 @@ const AccessForm: React.FC<ProviderFormProps> = forwardRef((props, ref) => {
return; return;
} }
const initDataList = async ( const initDataList = async (targets: RouteTargetFormItem[]) => {
targets: {
weight?: number;
model_id?: number;
provider_id?: number;
provider_model_name?: string;
lora_module_name?: string;
}[]
) => {
// init targets form list // init targets form list
targetsRef.current?.initDataList( targetsRef.current?.initDataList(
targets?.map((ep) => ({ targets?.map((ep) => ({
weight: ep.weight, weight: ep.weight,
value: ep.model_id value: ep.model_id
? [ ? ['deployments', ep.model_id]
'deployments', : [ep.provider_id, ep.overridden_model_name]
ep.lora_module_name
? `${ep.model_id}_lora_${ep.lora_module_name}`
: ep.model_id
]
: [ep.provider_id, ep.provider_model_name]
})) || [] })) || []
); );
}; };
@@ -190,13 +197,8 @@ const AccessForm: React.FC<ProviderFormProps> = forwardRef((props, ref) => {
if (fallbackTarget) { if (fallbackTarget) {
targetsRef.current?.initFallbackValues({ targetsRef.current?.initFallbackValues({
value: fallbackTarget.model_id value: fallbackTarget.model_id
? [ ? ['deployments', fallbackTarget.model_id]
'deployments', : [fallbackTarget.provider_id, fallbackTarget.overridden_model_name]
fallbackTarget.lora_module_name
? `${fallbackTarget.model_id}_lora_${fallbackTarget.lora_module_name}`
: fallbackTarget.model_id
]
: [fallbackTarget.provider_id, fallbackTarget.provider_model_name]
}); });
} }
}; };
@@ -90,7 +90,7 @@ const useTargetSourceModels = () => {
label: model.name, label: model.name,
value: model.name, value: model.name,
data: { data: {
provider_model_name: model.name, overridden_model_name: model.name,
provider_id: provider.id, provider_id: provider.id,
parentId: provider.id parentId: provider.id
}, },