fix(web): send model delete params as query string on DELETE (#42162)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
This commit is contained in:
Sourav Rajviandautofix-ci[bot] authored and GitHub committed 2026-09-11 08:09:48 +00:00
1 parent 4cc2f632b8
commit aa6dceeece
7 files changed
+98 -72

No files matched your search

+2 -2
View File
@@ -320,7 +320,7 @@ class ModelProviderModelApi(Resource):
return SimpleResultResponse(result="success").model_dump(mode="json"), 200
@console_ns.expect(console_ns.models[ParserDeleteModels.__name__])
@console_ns.doc(params=query_params_from_model(ParserDeleteModels))
@console_ns.response(204, "Model deleted successfully")
@setup_required
@login_required
@@ -469,7 +469,7 @@ class ModelProviderModelCredentialApi(Resource):
return SimpleResultResponse(result="success").model_dump(mode="json")
@console_ns.expect(console_ns.models[ParserDeleteCredential.__name__])
@console_ns.doc(params=query_params_from_model(ParserDeleteCredential))
@console_ns.response(204, "Credential deleted successfully")
@setup_required
@login_required
+5 -12
View File
@@ -10438,14 +10438,10 @@ Update a plugin endpoint
| Name | Located in | Description | Required | Schema |
| ---- | ---------- | ----------- | -------- | ------ |
| model | query | | Yes | string |
| model_type | query | Enum class for model type. | Yes | string, <br>**Available values:** "llm", "moderation", "rerank", "speech2text", "text-embedding", "tts" |
| provider | path | | Yes | string |
#### Request Body
| Required | Schema |
| -------- | ------ |
| Yes | **application/json**: [ParserDeleteModels](#parserdeletemodels)<br> |
#### Responses
| Code | Description |
@@ -10489,14 +10485,11 @@ Update a plugin endpoint
| Name | Located in | Description | Required | Schema |
| ---- | ---------- | ----------- | -------- | ------ |
| credential_id | query | | Yes | string |
| model | query | | Yes | string |
| model_type | query | Enum class for model type. | Yes | string, <br>**Available values:** "llm", "moderation", "rerank", "speech2text", "text-embedding", "tts" |
| provider | path | | Yes | string |
#### Request Body
| Required | Schema |
| -------- | ------ |
| Yes | **application/json**: [ParserDeleteCredential](#parserdeletecredential)<br> |
#### Responses
| Code | Description |
@@ -154,6 +154,23 @@ class TestModelProviderModelApi:
assert status == 204
def test_delete_model_via_query_params(self, app: Flask):
api = ModelProviderModelApi()
method = unwrap(api.delete)
payload = {
"model": "gpt-4",
"model_type": ModelType.LLM,
}
with (
app.test_request_context("/", method="DELETE", query_string=payload),
patch("controllers.console.workspace.models.ModelProviderService"),
):
result, status = method(api, ParserDeleteModels.model_validate(payload), "tenant1", "openai")
assert status == 204
def test_get_models_returns_empty(self, app: Flask):
api = ModelProviderModelApi()
method = unwrap(api.get)
@@ -262,6 +279,24 @@ class TestModelProviderModelCredentialApi:
assert status == 204
def test_delete_credential_via_query_params(self, app: Flask):
api = ModelProviderModelCredentialApi()
method = unwrap(api.delete)
payload = {
"model": "gpt",
"model_type": ModelType.LLM,
"credential_id": "123e4567-e89b-12d3-a456-426614174000",
}
with (
app.test_request_context("/", method="DELETE", query_string=payload),
patch("controllers.console.workspace.models.ModelProviderService"),
):
result, status = method(api, ParserDeleteCredential.model_validate(payload), "t1", "openai")
assert status == 204
class TestModelProviderModelCredentialSwitchApi:
def test_switch_success(self, app: Flask):
@@ -12,11 +12,11 @@ import {
zDeleteWorkspacesCurrentModelProvidersByProviderCredentialsBody,
zDeleteWorkspacesCurrentModelProvidersByProviderCredentialsPath,
zDeleteWorkspacesCurrentModelProvidersByProviderCredentialsResponse,
zDeleteWorkspacesCurrentModelProvidersByProviderModelsBody,
zDeleteWorkspacesCurrentModelProvidersByProviderModelsCredentialsBody,
zDeleteWorkspacesCurrentModelProvidersByProviderModelsCredentialsPath,
zDeleteWorkspacesCurrentModelProvidersByProviderModelsCredentialsQuery,
zDeleteWorkspacesCurrentModelProvidersByProviderModelsCredentialsResponse,
zDeleteWorkspacesCurrentModelProvidersByProviderModelsPath,
zDeleteWorkspacesCurrentModelProvidersByProviderModelsQuery,
zDeleteWorkspacesCurrentModelProvidersByProviderModelsResponse,
zDeleteWorkspacesCurrentRbacAccessPoliciesByPolicyIdPath,
zDeleteWorkspacesCurrentRbacAccessPoliciesByPolicyIdResponse,
@@ -1421,8 +1421,8 @@ export const delete6 = oc
})
.input(
z.object({
body: zDeleteWorkspacesCurrentModelProvidersByProviderModelsCredentialsBody,
params: zDeleteWorkspacesCurrentModelProvidersByProviderModelsCredentialsPath,
query: zDeleteWorkspacesCurrentModelProvidersByProviderModelsCredentialsQuery,
}),
)
.output(zDeleteWorkspacesCurrentModelProvidersByProviderModelsCredentialsResponse)
@@ -1613,8 +1613,8 @@ export const delete7 = oc
})
.input(
z.object({
body: zDeleteWorkspacesCurrentModelProvidersByProviderModelsBody,
params: zDeleteWorkspacesCurrentModelProvidersByProviderModelsPath,
query: zDeleteWorkspacesCurrentModelProvidersByProviderModelsQuery,
}),
)
.output(zDeleteWorkspacesCurrentModelProvidersByProviderModelsResponse)
@@ -283,11 +283,6 @@ export type ValidationResultResponse = {
result: 'error' | 'success'
}
export type ParserDeleteModels = {
model: string
model_type: ModelType
}
export type ProviderModelListResponse = {
data: Array<ModelWithProviderEntityResponse>
}
@@ -300,12 +295,6 @@ export type ParserPostModels = {
model_type: ModelType
}
export type ParserDeleteCredential = {
credential_id: string
model: string
model_type: ModelType
}
export type ModelCredentialResponse = {
available_credentials: Array<CredentialConfiguration>
credentials: {
@@ -349,6 +338,11 @@ export type ParserValidate = {
model_type: ModelType
}
export type ParserDeleteModels = {
model: string
model_type: ModelType
}
export type LoadBalancingCredentialPayload = {
credentials: {
[key: string]: unknown
@@ -1446,8 +1440,6 @@ export type ModelProviderPluginSummaryResponse = {
version: string
}
export type ModelType = 'llm' | 'moderation' | 'rerank' | 'speech2text' | 'text-embedding' | 'tts'
export type ModelWithProviderEntityResponse = {
deprecated?: boolean
features?: Array<ModelFeature> | null
@@ -1471,6 +1463,8 @@ export type LoadBalancingPayload = {
enabled?: boolean | null
}
export type ModelType = 'llm' | 'moderation' | 'rerank' | 'speech2text' | 'text-embedding' | 'tts'
export type CredentialConfiguration = {
credential_id: string
credential_name: string
@@ -3594,11 +3588,14 @@ export type PostWorkspacesCurrentModelProvidersByProviderCredentialsValidateResp
PostWorkspacesCurrentModelProvidersByProviderCredentialsValidateResponses[keyof PostWorkspacesCurrentModelProvidersByProviderCredentialsValidateResponses]
export type DeleteWorkspacesCurrentModelProvidersByProviderModelsData = {
body: ParserDeleteModels
body?: never
path: {
provider: string
}
query?: never
query: {
model: string
model_type: 'llm' | 'moderation' | 'rerank' | 'speech2text' | 'text-embedding' | 'tts'
}
url: '/workspaces/current/model-providers/{provider}/models'
}
@@ -3642,11 +3639,15 @@ export type PostWorkspacesCurrentModelProvidersByProviderModelsResponse =
PostWorkspacesCurrentModelProvidersByProviderModelsResponses[keyof PostWorkspacesCurrentModelProvidersByProviderModelsResponses]
export type DeleteWorkspacesCurrentModelProvidersByProviderModelsCredentialsData = {
body: ParserDeleteCredential
body?: never
path: {
provider: string
}
query?: never
query: {
credential_id: string
model: string
model_type: 'llm' | 'moderation' | 'rerank' | 'speech2text' | 'text-embedding' | 'tts'
}
url: '/workspaces/current/model-providers/{provider}/models/credentials'
}
@@ -1045,6 +1045,14 @@ export const zMemberInviteResponse = z.object({
tenant_id: z.string(),
})
/**
* LoadBalancingPayload
*/
export const zLoadBalancingPayload = z.object({
configs: z.array(z.record(z.string(), z.unknown())).nullish(),
enabled: z.boolean().nullish(),
})
/**
* ModelType
*
@@ -1060,18 +1068,12 @@ export const zModelType = z.enum([
])
/**
* ParserDeleteModels
* ParserPostModels
*/
export const zParserDeleteModels = z.object({
model: z.string(),
model_type: zModelType,
})
/**
* ParserDeleteCredential
*/
export const zParserDeleteCredential = z.object({
credential_id: z.string(),
export const zParserPostModels = z.object({
config_from: z.string().nullish(),
credential_id: z.string().nullish(),
load_balancing: zLoadBalancingPayload.nullish(),
model: z.string(),
model_type: zModelType,
})
@@ -1115,6 +1117,14 @@ export const zParserValidate = z.object({
model_type: zModelType,
})
/**
* ParserDeleteModels
*/
export const zParserDeleteModels = z.object({
model: z.string(),
model_type: zModelType,
})
/**
* LoadBalancingCredentialPayload
*/
@@ -1140,25 +1150,6 @@ export const zParserPostDefault = z.object({
model_settings: z.array(zInner),
})
/**
* LoadBalancingPayload
*/
export const zLoadBalancingPayload = z.object({
configs: z.array(z.record(z.string(), z.unknown())).nullish(),
enabled: z.boolean().nullish(),
})
/**
* ParserPostModels
*/
export const zParserPostModels = z.object({
config_from: z.string().nullish(),
credential_id: z.string().nullish(),
load_balancing: zLoadBalancingPayload.nullish(),
model: z.string(),
model_type: zModelType,
})
/**
* CredentialConfiguration
*
@@ -4371,12 +4362,15 @@ export const zPostWorkspacesCurrentModelProvidersByProviderCredentialsValidatePa
export const zPostWorkspacesCurrentModelProvidersByProviderCredentialsValidateResponse =
zValidationResultResponse
export const zDeleteWorkspacesCurrentModelProvidersByProviderModelsBody = zParserDeleteModels
export const zDeleteWorkspacesCurrentModelProvidersByProviderModelsPath = z.object({
provider: z.string(),
})
export const zDeleteWorkspacesCurrentModelProvidersByProviderModelsQuery = z.object({
model: z.string(),
model_type: z.enum(['llm', 'moderation', 'rerank', 'speech2text', 'text-embedding', 'tts']),
})
/**
* Model deleted successfully
*/
@@ -4403,13 +4397,16 @@ export const zPostWorkspacesCurrentModelProvidersByProviderModelsPath = z.object
*/
export const zPostWorkspacesCurrentModelProvidersByProviderModelsResponse = zSimpleResultResponse
export const zDeleteWorkspacesCurrentModelProvidersByProviderModelsCredentialsBody =
zParserDeleteCredential
export const zDeleteWorkspacesCurrentModelProvidersByProviderModelsCredentialsPath = z.object({
provider: z.string(),
})
export const zDeleteWorkspacesCurrentModelProvidersByProviderModelsCredentialsQuery = z.object({
credential_id: z.string(),
model: z.string(),
model_type: z.enum(['llm', 'moderation', 'rerank', 'speech2text', 'text-embedding', 'tts']),
})
/**
* Credential deleted successfully
*/
+2 -2
View File
@@ -127,7 +127,7 @@ export const useDeleteModelCredential = (provider: string) => {
del<{ result: string }>(
`/workspaces/current/model-providers/${provider}/models/credentials`,
{
body: data,
params: data,
},
),
})
@@ -137,7 +137,7 @@ export const useDeleteModel = (provider: string) => {
return useMutation({
mutationFn: (data: { model: string; model_type: ModelTypeEnum }) =>
del<{ result: string }>(`/workspaces/current/model-providers/${provider}/models`, {
body: data,
params: data,
}),
})
}