Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,15 @@ interface ConfigurationFieldProps {
isLoading: boolean;
setConfigValue: (value: number | string | boolean | null) => void;
isEdit?: boolean;
isPreconfigured?: boolean;
}

interface ConfigInputFieldProps {
configEntry: ConfigEntryView;
isLoading: boolean;
validateAndSetConfigValue: (value: string | boolean) => void;
isEdit?: boolean;
isPreconfigured?: boolean;
}
export const ConfigInputField: React.FC<ConfigInputFieldProps> = ({
configEntry,
Expand Down Expand Up @@ -117,6 +119,7 @@ export const ConfigNumberField: React.FC<ConfigInputFieldProps> = ({
isLoading,
validateAndSetConfigValue,
isEdit,
isPreconfigured,
}) => {
const { isValid, value, default_value: defaultValue, key, updatable } = configEntry;
const [innerValue, setInnerValue] = useState(value ?? defaultValue);
Expand All @@ -126,7 +129,7 @@ export const ConfigNumberField: React.FC<ConfigInputFieldProps> = ({
return (
<EuiFieldNumber
fullWidth
readOnly={isLoading || (isEdit && !updatable)}
disabled={isLoading || (isEdit && !updatable) || isPreconfigured}
data-test-subj={`${key}-number`}
value={innerValue as number}
isInvalid={!isValid}
Expand Down Expand Up @@ -188,6 +191,7 @@ export const ConfigurationField: React.FC<ConfigurationFieldProps> = ({
isLoading,
setConfigValue,
isEdit,
isPreconfigured,
}) => {
const validateAndSetConfigValue = (value: number | string | boolean) => {
setConfigValue(ensureCorrectTyping(configEntry.type, value));
Expand All @@ -204,6 +208,7 @@ export const ConfigurationField: React.FC<ConfigurationFieldProps> = ({
configEntry={configEntry}
validateAndSetConfigValue={validateAndSetConfigValue}
isEdit={isEdit}
isPreconfigured={isPreconfigured}
/>
);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ interface ConfigurationFormItemsProps {
setConfigEntry: (key: string, value: string | number | boolean | null) => void;
direction?: 'column' | 'row' | 'rowReverse' | 'columnReverse' | undefined;
isEdit?: boolean;
isPreconfigured?: boolean;
}

export const ConfigurationFormItems: React.FC<ConfigurationFormItemsProps> = ({
Expand All @@ -34,6 +35,7 @@ export const ConfigurationFormItems: React.FC<ConfigurationFormItemsProps> = ({
setConfigEntry,
direction,
isEdit,
isPreconfigured,
}) => {
return (
<EuiFlexGroup direction={direction} data-test-subj="configuration-fields">
Expand Down Expand Up @@ -76,6 +78,7 @@ export const ConfigurationFormItems: React.FC<ConfigurationFormItemsProps> = ({
setConfigEntry(key, value);
}}
isEdit={isEdit}
isPreconfigured={isPreconfigured}
/>
</EuiFormRow>
{sensitive ? (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -164,4 +164,38 @@ describe('InferenceFlyout', () => {
renderComponent({ isEdit: true, inferenceEndpoint: mockEndpoint });
expect(screen.getByTestId('inference-endpoint-submit-button')).toBeDisabled();
});

it('disables the num_allocations field for preconfigured endpoints', () => {
const mockEndpoint = {
config: {
inferenceId: '.test-id',
provider: 'elasticsearch',
taskType: 'text_embedding',
providerConfig: {},
},
secrets: {
providerSecrets: {},
},
};

renderComponent({ isEdit: true, inferenceEndpoint: mockEndpoint });
expect(screen.getByTestId('num_allocations-number')).toBeDisabled();
});

it('the num_allocations field is enabled for other endpoints', () => {
const mockEndpoint = {
config: {
inferenceId: 'test-id',
provider: 'elasticsearch',
taskType: 'text_embedding',
providerConfig: {},
},
secrets: {
providerSecrets: {},
},
};

renderComponent({ isEdit: true, inferenceEndpoint: mockEndpoint });
expect(screen.getByTestId('num_allocations-number')).toBeEnabled();
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,8 @@ export const InferenceFlyoutWrapper: React.FC<InferenceFlyoutWrapperProps> = ({
mutate(data, !!isEdit);
}, [form, isEdit, mutate]);

const isPreconfigured = inferenceEndpoint?.config.inferenceId.startsWith('.');

return (
<EuiFlyout
ownFocus
Expand All @@ -92,7 +94,12 @@ export const InferenceFlyoutWrapper: React.FC<InferenceFlyoutWrapperProps> = ({
</EuiFlyoutHeader>
<EuiFlyoutBody>
<Form form={form}>
<InferenceServiceFormFields http={http} toasts={toasts} isEdit={isEdit} />
<InferenceServiceFormFields
http={http}
toasts={toasts}
isEdit={isEdit}
isPreconfigured={isPreconfigured}
/>
<EuiSpacer size="m" />
<EuiFlexGroup justifyContent="flexStart">
<EuiFlexItem grow={false}>
Expand All @@ -102,9 +109,7 @@ export const InferenceFlyoutWrapper: React.FC<InferenceFlyoutWrapperProps> = ({
size="m"
isLoading={form.isSubmitting || isLoading}
disabled={
(!form.isValid && form.isSubmitted) ||
isLoading ||
inferenceEndpoint?.config.inferenceId.startsWith('.') // Disable edit option for preconfigured endpoints
(!form.isValid && form.isSubmitted) || isLoading || isPreconfigured // Disable edit option for preconfigured endpoints
}
data-test-subj="inference-endpoint-submit-button"
onClick={handleSubmit}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,14 @@ interface InferenceServicesProps {
http: HttpSetup;
toasts: IToasts;
isEdit?: boolean;
isPreconfigured?: boolean;
}

export const InferenceServiceFormFields: React.FC<InferenceServicesProps> = ({
http,
toasts,
isEdit,
isPreconfigured,
}) => {
const { data: providers, isLoading } = useProviders(http, toasts);
const [updatedProviders, setUpdatedProviders] = useState<InferenceProvider[] | undefined>(
Expand Down Expand Up @@ -412,6 +414,7 @@ export const InferenceServiceFormFields: React.FC<InferenceServicesProps> = ({
items={requiredProviderFormFields}
setConfigEntry={onSetProviderConfigEntry}
isEdit={isEdit}
isPreconfigured={isPreconfigured}
/>
<EuiSpacer size="m" />
<AdditionalOptionsFields
Expand Down