support changing capabilities on provider integrations

This commit is contained in:
miloschwartz
2026-08-07 11:23:07 -04:00
parent 9e7b4afaec
commit d699455b38
8 changed files with 60 additions and 121 deletions
+4 -1
View File
@@ -261,8 +261,11 @@ export function resolveCapabilitiesForCreate(input: {
type: AiProviderType;
capabilities?: AiCapability[] | null;
}): AiCapability[] {
if (input.capabilities != null) {
return parseCapabilities(input.capabilities);
}
if (input.type === "custom") {
return parseCapabilities(input.capabilities ?? []);
return [];
}
return [...AI_PROVIDER_CAPABILITY_DEFAULTS[input.type]];
}
@@ -124,6 +124,15 @@ export async function createAiProvider(
capabilities
});
if (resolvedCapabilities.length === 0) {
return next(
createHttpError(
HttpCode.BAD_REQUEST,
"At least one capability is required"
)
);
}
const [provider] = await db
.insert(aiProviders)
.values({
+3 -14
View File
@@ -131,20 +131,9 @@ export async function updateAiProvider(
? body.authType
: (existing.authType as AiProviderAuthType);
if (body.capabilities !== undefined && providerType !== "custom") {
return next(
createHttpError(
HttpCode.BAD_REQUEST,
"Capabilities can only be updated for custom providers"
)
);
}
const nextCapabilities =
providerType === "custom"
? body.capabilities !== undefined
? body.capabilities
: parseCapabilities(existing.capabilities)
body.capabilities !== undefined
? body.capabilities
: parseCapabilities(existing.capabilities);
const validation = z
@@ -195,7 +184,7 @@ export async function updateAiProvider(
if (body.authType !== undefined) {
updateData.authType = body.authType;
}
if (providerType === "custom" && body.capabilities !== undefined) {
if (body.capabilities !== undefined) {
updateData.capabilities = serializeCapabilities(body.capabilities);
}
+10
View File
@@ -112,5 +112,15 @@ export function refineProviderUpstreamFields(
path: ["capabilities"]
});
}
} else if (
data.capabilities !== undefined &&
data.capabilities !== null &&
data.capabilities.length === 0
) {
ctx.addIssue({
code: "custom",
message: "At least one capability is required",
path: ["capabilities"]
});
}
}