fix(model-routes): use overridden model name for provider targets
This commit is contained in:
@@ -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>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user