allow no provider on a resource

This commit is contained in:
miloschwartz
2026-08-05 15:43:42 -04:00
parent bcf6b86b84
commit 790daba796
11 changed files with 25 additions and 86 deletions
+1 -1
View File
@@ -394,7 +394,7 @@ async function createHttpResource(
const resolved = await resolveProviderAttachments({
orgId,
attachments: aiProviderInputs ?? [],
requireAtLeastOne: true
requireAtLeastOne: false
});
if (isInferenceFieldsError(resolved)) {
return next(createHttpError(HttpCode.BAD_REQUEST, resolved.error));
@@ -77,8 +77,9 @@ export async function removeAiProviderFromResource(
const { providerId } = parsedBody.data;
const parsedParams =
removeAiProviderFromResourceParamsSchema.safeParse(req.params);
const parsedParams = removeAiProviderFromResourceParamsSchema.safeParse(
req.params
);
if (!parsedParams.success) {
return next(
createHttpError(
@@ -129,22 +130,15 @@ export async function removeAiProviderFromResource(
modelAccessMode: a.modelAccessMode
}));
if (remaining.length === 0) {
return next(
createHttpError(
HttpCode.BAD_REQUEST,
"At least one AI provider is required for inference-mode resources"
)
);
}
const attachments = await resolveProviderAttachments({
orgId: resource.orgId,
attachments: remaining,
requireAtLeastOne: true
requireAtLeastOne: false
});
if (isInferenceFieldsError(attachments)) {
return next(createHttpError(HttpCode.BAD_REQUEST, attachments.error));
return next(
createHttpError(HttpCode.BAD_REQUEST, attachments.error)
);
}
await setPublicResourceAiProviders(resourceId, attachments);
@@ -27,7 +27,7 @@ registry.registerPath({
method: "post",
path: "/resource/{resourceId}/ai-providers",
description:
"Replace the AI providers attached to an inference resource. At least one provider is required. Model keys must be unique across attached catalog providers.",
"Replace the AI providers attached to an inference resource. An empty list clears all providers. Model keys must be unique across attached catalog providers.",
tags: [OpenAPITags.PublicResource],
request: {
params: setResourceAiProvidersParamsSchema,
@@ -113,7 +113,7 @@ export async function setResourceAiProviders(
const attachments = await resolveProviderAttachments({
orgId: resource.orgId,
attachments: providers,
requireAtLeastOne: true
requireAtLeastOne: false
});
if (isInferenceFieldsError(attachments)) {
return next(
@@ -353,7 +353,7 @@ export async function createSiteResource(
const resolved = await resolveProviderAttachments({
orgId,
attachments: aiProviderInputs ?? [],
requireAtLeastOne: true
requireAtLeastOne: false
});
if (isInferenceFieldsError(resolved)) {
return next(
@@ -63,8 +63,9 @@ export async function removeAiProviderFromSiteResource(
next: NextFunction
): Promise<any> {
try {
const parsedBody =
removeAiProviderFromSiteResourceBodySchema.safeParse(req.body);
const parsedBody = removeAiProviderFromSiteResourceBodySchema.safeParse(
req.body
);
if (!parsedBody.success) {
return next(
createHttpError(
@@ -128,22 +129,15 @@ export async function removeAiProviderFromSiteResource(
modelAccessMode: a.modelAccessMode
}));
if (remaining.length === 0) {
return next(
createHttpError(
HttpCode.BAD_REQUEST,
"At least one AI provider is required for inference-mode resources"
)
);
}
const attachments = await resolveProviderAttachments({
orgId: siteResource.orgId,
attachments: remaining,
requireAtLeastOne: true
requireAtLeastOne: false
});
if (isInferenceFieldsError(attachments)) {
return next(createHttpError(HttpCode.BAD_REQUEST, attachments.error));
return next(
createHttpError(HttpCode.BAD_REQUEST, attachments.error)
);
}
await setSiteResourceAiProviders(siteResourceId, attachments);
@@ -27,7 +27,7 @@ registry.registerPath({
method: "post",
path: "/site-resource/{siteResourceId}/ai-providers",
description:
"Replace the AI providers attached to an inference site resource. At least one provider is required. Model keys must be unique across attached catalog providers.",
"Replace the AI providers attached to an inference site resource. An empty list clears all providers. Model keys must be unique across attached catalog providers.",
tags: [OpenAPITags.PrivateResource],
request: {
params: setSiteResourceAiProvidersParamsSchema,
@@ -115,7 +115,7 @@ export async function setSiteResourceAiProviders(
const attachments = await resolveProviderAttachments({
orgId: siteResource.orgId,
attachments: providers,
requireAtLeastOne: true
requireAtLeastOne: false
});
if (isInferenceFieldsError(attachments)) {
return next(