@bodhiapp/ts-client 0.1.33 → 0.1.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,75 +1,44 @@
1
1
  // This file is auto-generated by @hey-api/openapi-ts
2
2
 
3
3
  export type AccessRequestActionResponse = {
4
- /**
5
- * Updated status after action
6
- */
7
4
  status: AppAccessRequestStatus;
8
5
  /**
9
- * Flow type of the access request
10
- */
11
- flow_type: FlowType;
12
- /**
13
- * Redirect URL (present for redirect flow)
6
+ * Dynamic scope minted on approval; the review page appends it to `auth_url` before redirecting to Keycloak.
14
7
  */
15
- redirect_url?: string | null;
8
+ access_request_scope?: string | null;
16
9
  };
17
10
 
18
11
  export type AccessRequestReviewResponse = {
19
- /**
20
- * Access request ID
21
- */
22
12
  id: string;
23
- /**
24
- * App client ID
25
- */
26
13
  app_client_id: string;
27
14
  /**
28
- * App name from KC (if available)
15
+ * From KC, if available
29
16
  */
30
17
  app_name?: string | null;
31
18
  /**
32
- * App description from KC (if available)
19
+ * From KC, if available
33
20
  */
34
21
  app_description?: string | null;
35
- /**
36
- * Flow type: "redirect" or "popup"
37
- */
38
- flow_type: FlowType;
39
- /**
40
- * Current status
41
- */
42
22
  status: AppAccessRequestStatus;
43
- /**
44
- * Role requested by the app
45
- */
46
23
  requested_role: string;
47
- /**
48
- * Resources requested
49
- */
50
24
  requested: RequestedResources;
25
+ mcps_info?: Array<McpServerReviewInfo>;
51
26
  /**
52
- * MCP server information with user instances
27
+ * Canonical Keycloak authorize endpoint the review page validates the app-supplied `auth_url` against.
53
28
  */
54
- mcps_info?: Array<McpServerReviewInfo>;
29
+ auth_endpoint: string;
55
30
  };
56
31
 
57
32
  export type AccessRequestStatusResponse = {
58
- /**
59
- * Access request ID
60
- */
61
33
  id: string;
62
34
  /**
63
- * Current status: "draft", "approved", "denied", "failed"
35
+ * One of: "draft", "approved", "denied", "failed"
64
36
  */
65
37
  status: AppAccessRequestStatus;
66
- /**
67
- * Role requested by the app
68
- */
69
38
  requested_role: UserScope;
70
39
  approved_role?: null | UserScope;
71
40
  /**
72
- * Access request scope (present when user-approved with tools)
41
+ * Present when user-approved with tools
73
42
  */
74
43
  access_request_scope?: string | null;
75
44
  };
@@ -84,13 +53,53 @@ export type Alias = (UserAlias & {
84
53
  source: 'model';
85
54
  }) | (ApiAlias & {
86
55
  source: 'api';
56
+ }) | (ModelRouterAlias & {
57
+ source: 'model_router';
87
58
  });
88
59
 
60
+ /**
61
+ * Facet filter query parameters for the All-Models list (`GET /bodhi/v1/models`).
62
+ *
63
+ * All facets are server-side and applied before pagination so `total` and the page
64
+ * reflect the filtered set. Multi-value facets accept a comma-separated list; an empty
65
+ * or absent value means "no filter for this facet" (all rows pass).
66
+ */
67
+ export type AliasFilterParams = {
68
+ /**
69
+ * Alias type facet (comma-separated): `local_file`, `model_alias`, `api_model`, `fallback`.
70
+ */
71
+ type?: string | null;
72
+ /**
73
+ * API-format facet (comma-separated), API rows only: `openai`, `responses`, `anthropic`,
74
+ * `gemini`, `liberty`. `anthropic` matches both anthropic and anthropic_oauth aliases.
75
+ */
76
+ api_format?: string | null;
77
+ /**
78
+ * Minimum local-file size in bytes (inclusive). Applies to local rows with a known size;
79
+ * rows without a size (API/router) are not filtered out by size.
80
+ */
81
+ size_min?: number | null;
82
+ /**
83
+ * Maximum local-file size in bytes (inclusive). See `size_min`.
84
+ */
85
+ size_max?: number | null;
86
+ /**
87
+ * Capability facet (comma-separated), local rows only: `vision`, `tool_use`, `reasoning`.
88
+ * A row passes only if it has metadata with every requested capability set true.
89
+ */
90
+ capability?: string | null;
91
+ /**
92
+ * Free-text search (case-insensitive substring) over a row's identifying fields — alias/name,
93
+ * repo, filename for local rows; id, name, base_url for API rows; alias for routers.
94
+ */
95
+ search?: string | null;
96
+ };
97
+
89
98
  /**
90
99
  * Response envelope for model aliases - hides internal implementation details
91
100
  * Uses untagged serialization - each variant has its own "source" field
92
101
  */
93
- export type AliasResponse = UserAliasResponse | ModelAliasResponse | ApiAliasResponse;
102
+ export type AliasResponse = ModelRouterResponse | UserAliasResponse | ModelAliasResponse | ApiAliasResponse;
94
103
 
95
104
  /**
96
105
  * Mirrors Anthropic's `ModelInfo` schema — full model metadata returned by
@@ -111,14 +120,11 @@ export type AnthropicModel = {
111
120
  capabilities?: null | AnthropicModelCapabilities;
112
121
  max_input_tokens?: number | null;
113
122
  max_tokens?: number | null;
114
- /**
115
- * Always `"model"` — included for Anthropic API compatibility.
116
- */
117
123
  type: string;
118
124
  };
119
125
 
120
126
  /**
121
- * Model capability information (Anthropic ModelCapabilities schema).
127
+ * Anthropic ModelCapabilities schema.
122
128
  */
123
129
  export type AnthropicModelCapabilities = {
124
130
  batch: CapabilitySupport;
@@ -134,6 +140,7 @@ export type AnthropicModelCapabilities = {
134
140
 
135
141
  export type ApiAlias = {
136
142
  id: string;
143
+ name: string;
137
144
  api_format: ApiFormat;
138
145
  base_url: string;
139
146
  models: ApiModelVec;
@@ -151,6 +158,7 @@ export type ApiAlias = {
151
158
  export type ApiAliasResponse = {
152
159
  source: string;
153
160
  id: string;
161
+ name: string;
154
162
  api_format: ApiFormat;
155
163
  base_url: string;
156
164
  has_api_key: boolean;
@@ -233,7 +241,29 @@ export type ApiModelRequest = (DefaultApiModelRequest & {
233
241
  */
234
242
  export type ApiModelVec = Array<ApiModel>;
235
243
 
236
- export type AppAccessRequestStatus = 'draft' | 'approved' | 'denied' | 'failed' | 'expired';
244
+ export type AppAccessRequestStatus = 'draft' | 'approved' | 'denied' | 'failed' | 'expired' | 'revoked';
245
+
246
+ /**
247
+ * One issued app token (approved access request) with its effective grant summary.
248
+ */
249
+ export type AppAccessSummary = {
250
+ id: string;
251
+ app_client_id: string;
252
+ app_name?: string | null;
253
+ app_description?: string | null;
254
+ status: AppAccessRequestStatus;
255
+ approved_role?: null | UserScope;
256
+ /**
257
+ * Effective model access granted to this app.
258
+ */
259
+ models: ResourceAccess;
260
+ /**
261
+ * Effective MCP access granted to this app.
262
+ */
263
+ mcps: ResourceAccess;
264
+ created_at: string;
265
+ updated_at: string;
266
+ };
237
267
 
238
268
  /**
239
269
  * Application information and status
@@ -263,6 +293,11 @@ export type AppInfo = {
263
293
  * Public URL of the server
264
294
  */
265
295
  url: string;
296
+ /**
297
+ * Base URL of the external reference API the frontend calls directly (configurable via
298
+ * `BODHI_REFERENCE_API_URL`, env-overridable for tests)
299
+ */
300
+ reference_api_url: string;
266
301
  };
267
302
 
268
303
  export type AppRole = ResourceRole | TokenScope | UserScope;
@@ -271,9 +306,6 @@ export type AppStatus = 'setup' | 'ready' | 'resource_admin';
271
306
 
272
307
  export type ApprovalStatus = 'approved' | 'denied';
273
308
 
274
- /**
275
- * Request for approving an app access request
276
- */
277
309
  export type ApproveAccessRequest = {
278
310
  /**
279
311
  * Role to grant for the approved request (scope_user_user or scope_user_power_user)
@@ -296,33 +328,43 @@ export type ApproveUserAccessRequest = {
296
328
  };
297
329
 
298
330
  /**
299
- * Versioned envelope for approved resources.
300
331
  * The `version` tag is mandatory and must match the corresponding `RequestedResources` version.
301
332
  */
302
333
  export type ApprovedResources = ApprovedResourcesV1 & {
303
334
  version: '1';
304
335
  };
305
336
 
337
+ /**
338
+ * What the owner granted at consent. Field names mirror `RequestedResourcesV1`
339
+ * (`models_list` / `models_access` / `mcps_list` / `mcps_access`) — there the
340
+ * values are UI-driver booleans, here they are the actual grants. `mcps` holds
341
+ * the by-url instance approvals; `mcps_access` is the owner-granted set beyond them.
342
+ */
306
343
  export type ApprovedResourcesV1 = {
344
+ models_list?: boolean;
345
+ models_access?: ModelGrant;
346
+ mcps_list?: boolean;
307
347
  mcps?: Array<McpApproval>;
348
+ /**
349
+ * Owner-granted MCP instances beyond the by-url requests. Defaults to none
350
+ * (empty `Specific`) — unlike a token's all-access default.
351
+ */
352
+ mcps_access?: McpGrant;
308
353
  };
309
354
 
310
355
  export type AuthCallbackRequest = {
311
356
  /**
312
- * OAuth authorization code from successful authentication (required for success flow)
357
+ * Required for the success flow
313
358
  */
314
359
  code?: string | null;
315
360
  /**
316
- * OAuth state parameter for CSRF protection (must match initiated request)
361
+ * CSRF protection must match the initiated request
317
362
  */
318
363
  state?: string | null;
319
364
  /**
320
365
  * OAuth error code if authentication failed (e.g., "access_denied")
321
366
  */
322
367
  error?: string | null;
323
- /**
324
- * Human-readable OAuth error description if authentication failed
325
- */
326
368
  error_description?: string | null;
327
369
  [key: string]: string | (string | null) | (string | null) | (string | null) | (string | null) | undefined;
328
370
  };
@@ -371,9 +413,6 @@ export type BodhiErrorResponse = {
371
413
  error: BodhiError;
372
414
  };
373
415
 
374
- /**
375
- * Whether a single capability is supported by the model.
376
- */
377
416
  export type CapabilitySupport = {
378
417
  supported: boolean;
379
418
  };
@@ -393,9 +432,6 @@ export type ContextLimits = {
393
432
  max_output_tokens?: number | null;
394
433
  };
395
434
 
396
- /**
397
- * Context management capability details.
398
- */
399
435
  export type ContextManagementCapability = {
400
436
  clear_thinking_20251015?: null | CapabilitySupport;
401
437
  clear_tool_uses_20250919?: null | CapabilitySupport;
@@ -406,22 +442,11 @@ export type CopyAliasRequest = {
406
442
  alias: string;
407
443
  };
408
444
 
409
- /**
410
- * Request for creating an app access request
411
- */
412
445
  export type CreateAccessRequest = {
413
446
  /**
414
447
  * App client ID from Keycloak
415
448
  */
416
449
  app_client_id: string;
417
- /**
418
- * Flow type: "redirect" or "popup"
419
- */
420
- flow_type: FlowType;
421
- /**
422
- * Redirect URL for result notification (required for redirect flow)
423
- */
424
- redirect_url?: string | null;
425
450
  /**
426
451
  * Role requested for the external app (scope_user_user or scope_user_power_user)
427
452
  */
@@ -433,17 +458,11 @@ export type CreateAccessRequest = {
433
458
  };
434
459
 
435
460
  export type CreateAccessRequestResponse = {
436
- /**
437
- * Access request ID
438
- */
439
461
  id: string;
440
462
  /**
441
- * Status (always "draft")
463
+ * Always "draft"
442
464
  */
443
465
  status: AppAccessRequestStatus;
444
- /**
445
- * Review URL for user to approve/deny
446
- */
447
466
  review_url: string;
448
467
  };
449
468
 
@@ -498,6 +517,11 @@ export type CreateTokenRequest = {
498
517
  * Token scope defining access level
499
518
  */
500
519
  scope: TokenScope;
520
+ /**
521
+ * Per-resource grants for this token. Defaults to deny (least-privilege) when
522
+ * omitted — specify grants to widen access.
523
+ */
524
+ grants?: TokenGrants;
501
525
  };
502
526
 
503
527
  /**
@@ -515,6 +539,10 @@ export type DashboardUser = {
515
539
  * Shared across `openai`, `openai_responses`, `anthropic`, `anthropic_oauth`, `gemini`.
516
540
  */
517
541
  export type DefaultApiModelRequest = {
542
+ /**
543
+ * User-provided descriptive name for this API model
544
+ */
545
+ name: string;
518
546
  /**
519
547
  * API base URL
520
548
  */
@@ -609,6 +637,7 @@ export type DownloadRequest = {
609
637
  total_bytes?: number | null;
610
638
  downloaded_bytes: number;
611
639
  started_at?: string | null;
640
+ archived_at?: string | null;
612
641
  created_at: string;
613
642
  updated_at: string;
614
643
  };
@@ -638,6 +667,19 @@ export type EffortCapability = {
638
667
  max: CapabilitySupport;
639
668
  };
640
669
 
670
+ /**
671
+ * Per-strategy resilience config for the fallback strategy. Phase 1 persists defaults
672
+ * and does not yet act on them (failover/health land in later phases).
673
+ */
674
+ export type FallbackConfig = {
675
+ cooldown_secs?: number;
676
+ /**
677
+ * 0 = try the whole chain.
678
+ */
679
+ max_attempts?: number;
680
+ honor_retry_after?: boolean;
681
+ };
682
+
641
683
  /**
642
684
  * Request to fetch available models from provider. Discriminated on `api_format`.
643
685
  */
@@ -663,8 +705,6 @@ export type FetchModelsResponse = {
663
705
  models: Array<string>;
664
706
  };
665
707
 
666
- export type FlowType = 'redirect' | 'popup';
667
-
668
708
  /**
669
709
  * Gemini `Model` schema (see `openapi-gemini.json`).
670
710
  */
@@ -685,6 +725,13 @@ export type GeminiModel = {
685
725
 
686
726
  export type JsonVec = Array<string>;
687
727
 
728
+ /**
729
+ * Response for GET /access-requests/apps — the caller's issued app tokens.
730
+ */
731
+ export type ListAppAccessResponse = {
732
+ data: Array<AppAccessSummary>;
733
+ };
734
+
688
735
  export type ListMcpServersResponse = {
689
736
  mcp_servers: Array<McpServerResponse>;
690
737
  };
@@ -713,6 +760,10 @@ export type LlmLibertyApiEndpoints = {
713
760
  * (or `Keep` to leave existing credentials untouched on update).
714
761
  */
715
762
  export type LlmLibertyApiModelRequest = {
763
+ /**
764
+ * User-provided descriptive name for this API model
765
+ */
766
+ name: string;
716
767
  /**
717
768
  * Envelope update action — Keep (update only) or Set (create/replace credentials).
718
769
  */
@@ -731,6 +782,9 @@ export type LlmLibertyApiModelRequest = {
731
782
  forward_all_with_prefix?: boolean;
732
783
  };
733
784
 
785
+ /**
786
+ * Envelope sub-types mirror the llm-liberty JSON contract v1.0.0.
787
+ */
734
788
  export type LlmLibertyAuthSpec = {
735
789
  in: string;
736
790
  key: string;
@@ -832,9 +886,6 @@ export type LlmLibertyTestPromptRequest = {
832
886
  prompt: string;
833
887
  };
834
888
 
835
- /**
836
- * Local model file response
837
- */
838
889
  export type LocalModelResponse = {
839
890
  repo: string;
840
891
  filename: string;
@@ -848,46 +899,22 @@ export type LocalModelResponse = {
848
899
  * User-owned MCP server instance.
849
900
  */
850
901
  export type Mcp = {
851
- /**
852
- * Unique instance identifier (UUID)
853
- */
854
902
  id: string;
855
903
  /**
856
904
  * Server info resolved via JOIN
857
905
  */
858
906
  mcp_server: McpServerInfo;
859
- /**
860
- * User-defined slug for this instance
861
- */
862
907
  slug: string;
863
- /**
864
- * Human-readable name
865
- */
866
908
  name: string;
867
- /**
868
- * Optional description for this instance
869
- */
870
909
  description?: string | null;
871
- /**
872
- * Whether this instance is enabled
873
- */
874
910
  enabled: boolean;
875
- /**
876
- * MCP proxy path for this instance
877
- */
878
911
  path: string;
879
912
  auth_type: McpAuthType;
880
913
  /**
881
914
  * Reference to the auth config (mcp_auth_configs.id)
882
915
  */
883
916
  auth_config_id?: string | null;
884
- /**
885
- * When this instance was created
886
- */
887
917
  created_at: string;
888
- /**
889
- * When this instance was last updated
890
- */
891
918
  updated_at: string;
892
919
  };
893
920
 
@@ -950,6 +977,9 @@ export type McpAuthConfigsListResponse = {
950
977
  auth_configs: Array<McpAuthConfigResponse>;
951
978
  };
952
979
 
980
+ /**
981
+ * Masked auth param response.
982
+ */
953
983
  export type McpAuthParam = {
954
984
  id: string;
955
985
  param_type: McpAuthParamType;
@@ -967,6 +997,22 @@ export type McpAuthParamType = 'header' | 'query';
967
997
 
968
998
  export type McpAuthType = 'public' | 'header' | 'oauth';
969
999
 
1000
+ /**
1001
+ * MCP connect grant. `All` is a wildcard (incl. future MCPs); `Specific` lists
1002
+ * the user's own instance ids (empty ⇒ no MCP access).
1003
+ *
1004
+ * Defaults to **least-privilege** (empty `Specific` ⇒ deny), symmetric with
1005
+ * `ModelGrant`: an unspecified or legacy grant grants nothing, so a stored
1006
+ * payload that omits `mcps` cannot silently grant every MCP. All-access must be
1007
+ * requested explicitly via `McpGrant::All`.
1008
+ */
1009
+ export type McpGrant = {
1010
+ type: 'all';
1011
+ } | {
1012
+ ids: Array<string>;
1013
+ type: 'specific';
1014
+ };
1015
+
970
1016
  export type McpInstance = {
971
1017
  id: string;
972
1018
  /**
@@ -979,84 +1025,44 @@ export type McpInstance = {
979
1025
  * Input for creating or updating an MCP instance.
980
1026
  */
981
1027
  export type McpRequest = {
982
- /**
983
- * Human-readable name (required)
984
- */
985
1028
  name: string;
986
1029
  /**
987
- * User-defined slug for this instance (1-24 chars, alphanumeric + hyphens)
1030
+ * 1-24 chars, alphanumeric + hyphens.
988
1031
  */
989
1032
  slug: string;
990
1033
  /**
991
- * MCP server ID (required for create, ignored for update)
1034
+ * Required for create, ignored for update.
992
1035
  */
993
1036
  mcp_server_id?: string | null;
994
- /**
995
- * Optional description
996
- */
997
1037
  description?: string | null;
998
- /**
999
- * Whether this instance is enabled
1000
- */
1001
1038
  enabled: boolean;
1002
- /**
1003
- * Authentication type
1004
- */
1005
1039
  auth_type?: McpAuthType;
1006
- /**
1007
- * Reference to auth config
1008
- */
1009
1040
  auth_config_id?: string | null;
1010
1041
  /**
1011
- * Instance-level auth params (values for the auth config's key definitions)
1042
+ * Instance-level values for the auth config's key definitions.
1012
1043
  */
1013
1044
  credentials?: Array<McpAuthParamInput> | null;
1014
1045
  /**
1015
- * OAuth token ID to link to this MCP instance (set after OAuth flow)
1046
+ * OAuth token ID to link to this MCP instance (set after OAuth flow).
1016
1047
  */
1017
1048
  oauth_token_id?: string | null;
1018
1049
  };
1019
1050
 
1020
1051
  /**
1021
- * Admin-managed MCP server registry entry.
1022
- * Admins/managers register MCP server URLs that users can then create instances of.
1052
+ * Admin-managed MCP server registry entry that users create instances of.
1023
1053
  */
1024
1054
  export type McpServer = {
1025
- /**
1026
- * Unique identifier (UUID)
1027
- */
1028
1055
  id: string;
1029
1056
  /**
1030
1057
  * MCP server endpoint URL (trimmed, case-insensitive unique)
1031
1058
  */
1032
1059
  url: string;
1033
- /**
1034
- * Human-readable display name
1035
- */
1036
1060
  name: string;
1037
- /**
1038
- * Optional description
1039
- */
1040
1061
  description?: string | null;
1041
- /**
1042
- * Whether this MCP server is enabled
1043
- */
1044
1062
  enabled: boolean;
1045
- /**
1046
- * User who created this entry
1047
- */
1048
1063
  created_by: string;
1049
- /**
1050
- * User who last updated this entry
1051
- */
1052
1064
  updated_by: string;
1053
- /**
1054
- * When this entry was created
1055
- */
1056
1065
  created_at: string;
1057
- /**
1058
- * When this entry was last updated
1059
- */
1060
1066
  updated_at: string;
1061
1067
  };
1062
1068
 
@@ -1075,20 +1081,11 @@ export type McpServerInfo = {
1075
1081
  */
1076
1082
  export type McpServerRequest = {
1077
1083
  /**
1078
- * MCP server endpoint URL (trimmed, case-insensitive unique)
1084
+ * MCP server endpoint URL (trimmed, case-insensitive unique).
1079
1085
  */
1080
1086
  url: string;
1081
- /**
1082
- * Human-readable display name
1083
- */
1084
1087
  name: string;
1085
- /**
1086
- * Optional description
1087
- */
1088
1088
  description?: string | null;
1089
- /**
1090
- * Whether this MCP server is enabled
1091
- */
1092
1089
  enabled: boolean;
1093
1090
  auth_config?: null | CreateMcpAuthConfigRequest;
1094
1091
  };
@@ -1103,9 +1100,6 @@ export type McpServerResponse = McpServer & {
1103
1100
  };
1104
1101
 
1105
1102
  export type McpServerReviewInfo = {
1106
- /**
1107
- * Requested MCP server URL
1108
- */
1109
1103
  url: string;
1110
1104
  /**
1111
1105
  * User's MCP instances connected to this server URL
@@ -1151,6 +1145,10 @@ export type ModelAliasResponse = {
1151
1145
  repo: string;
1152
1146
  filename: string;
1153
1147
  snapshot: string;
1148
+ /**
1149
+ * Local GGUF file size in bytes (present when the file is resolvable on disk)
1150
+ */
1151
+ size?: number | null;
1154
1152
  metadata?: null | ModelMetadata;
1155
1153
  };
1156
1154
 
@@ -1168,6 +1166,21 @@ export type ModelCapabilities = {
1168
1166
  tools: ToolCapabilities;
1169
1167
  };
1170
1168
 
1169
+ /**
1170
+ * Model inference grant. `All` is a wildcard that includes models added in the
1171
+ * future; `Specific` lists alias ids (empty ⇒ no model access).
1172
+ *
1173
+ * Defaults to **least-privilege** (empty `Specific` ⇒ deny): an unspecified or
1174
+ * legacy grant grants nothing. All-access must be requested explicitly via
1175
+ * `ModelGrant::All`. Symmetric with `ApprovedResourcesV1`'s empty-MCP default.
1176
+ */
1177
+ export type ModelGrant = {
1178
+ type: 'all';
1179
+ } | {
1180
+ ids: Array<string>;
1181
+ type: 'specific';
1182
+ };
1183
+
1171
1184
  /**
1172
1185
  * Model metadata for API responses
1173
1186
  */
@@ -1178,6 +1191,48 @@ export type ModelMetadata = {
1178
1191
  chat_template?: string | null;
1179
1192
  };
1180
1193
 
1194
+ /**
1195
+ * A composite alias that fronts an ordered list of targets and routes a chat
1196
+ * request through them via a pluggable strategy. v1 ships only the fallback strategy.
1197
+ */
1198
+ export type ModelRouterAlias = {
1199
+ id: string;
1200
+ /**
1201
+ * User-facing model name, unique across all alias kinds.
1202
+ */
1203
+ alias: string;
1204
+ /**
1205
+ * Ordered list of targets; order is the fallback priority.
1206
+ */
1207
+ targets: Array<RouterTarget>;
1208
+ strategy: RoutingStrategyConfig;
1209
+ created_at: string;
1210
+ updated_at: string;
1211
+ };
1212
+
1213
+ /**
1214
+ * Input request for creating or updating a model-router. Used as `ValidatedJson` in handlers
1215
+ * for both create and update (PUT). A zero-target or all-disabled router is allowed to save.
1216
+ */
1217
+ export type ModelRouterRequest = {
1218
+ alias: string;
1219
+ targets?: Array<RouterTargetRequest>;
1220
+ strategy?: RoutingStrategyConfig;
1221
+ };
1222
+
1223
+ /**
1224
+ * API response for model-router aliases.
1225
+ */
1226
+ export type ModelRouterResponse = {
1227
+ source: string;
1228
+ id: string;
1229
+ alias: string;
1230
+ targets: Array<RouterTarget>;
1231
+ strategy: RoutingStrategyConfig;
1232
+ created_at: string;
1233
+ updated_at: string;
1234
+ };
1235
+
1181
1236
  /**
1182
1237
  * Request for creating a new download request
1183
1238
  */
@@ -1201,6 +1256,7 @@ export type OaiRequestParams = {
1201
1256
  temperature?: number | null;
1202
1257
  top_p?: number | null;
1203
1258
  user?: string | null;
1259
+ system_prompt?: string | null;
1204
1260
  };
1205
1261
 
1206
1262
  export type OAuthDiscoverAsRequest = {
@@ -1273,9 +1329,6 @@ export type PaginatedDownloadResponse = {
1273
1329
  page_size: number;
1274
1330
  };
1275
1331
 
1276
- /**
1277
- * Paginated list of local model files
1278
- */
1279
1332
  export type PaginatedLocalModelResponse = {
1280
1333
  data: Array<LocalModelResponse>;
1281
1334
  total: number;
@@ -1354,9 +1407,6 @@ export type PingResponse = {
1354
1407
  message: string;
1355
1408
  };
1356
1409
 
1357
- /**
1358
- * Response for queue status operations
1359
- */
1360
1410
  export type QueueStatusResponse = {
1361
1411
  /**
1362
1412
  * Queue status ("idle" or "processing")
@@ -1421,19 +1471,112 @@ export type RequestedMcpServer = {
1421
1471
  };
1422
1472
 
1423
1473
  /**
1424
- * Versioned envelope for requested resources.
1425
1474
  * The `version` tag is mandatory — clients must specify which version they are using.
1426
1475
  */
1427
1476
  export type RequestedResources = RequestedResourcesV1 & {
1428
1477
  version: '1';
1429
1478
  };
1430
1479
 
1480
+ /**
1481
+ * What the external app asks for. The four booleans are **UI drivers**: they tell
1482
+ * the consent screen which controls to render (the owner decides the actual grant).
1483
+ * Fields are domain-first (`models_*` / `mcps_*`), matching `ApprovedResourcesV1`.
1484
+ * `mcp_servers` is the existing by-url MCP request and is unchanged.
1485
+ *
1486
+ * `models_access` defaults to **true**: unless the app explicitly opts out
1487
+ * (`models_access: false`), the consent screen shows the model-access selector so
1488
+ * the owner can always scope models. (The other UI-driver flags default to false.)
1489
+ */
1431
1490
  export type RequestedResourcesV1 = {
1491
+ /**
1492
+ * Render the "list all models" toggle.
1493
+ */
1494
+ models_list?: boolean;
1495
+ /**
1496
+ * Render the model All/Specific access selector. Defaults to `true` (shown).
1497
+ */
1498
+ models_access?: boolean;
1499
+ /**
1500
+ * Render the "list all MCPs" toggle.
1501
+ */
1502
+ mcps_list?: boolean;
1503
+ /**
1504
+ * Render the owner-extra MCP All/Specific access selector.
1505
+ */
1506
+ mcps_access?: boolean;
1432
1507
  mcp_servers?: Array<RequestedMcpServer>;
1433
1508
  };
1434
1509
 
1510
+ /**
1511
+ * Effective access to a class of resources (models or MCPs) for an API token,
1512
+ * reflected from its grants. Discriminated on `type`: `all` ⇒ every current and
1513
+ * future resource; `specific` ⇒ the listed `ids` (empty ⇒ no access).
1514
+ * `list` is the `list_*` toggle (whether the token may enumerate the full catalog).
1515
+ */
1516
+ export type ResourceAccess = {
1517
+ list: boolean;
1518
+ type: 'all';
1519
+ } | {
1520
+ list: boolean;
1521
+ ids: Array<string>;
1522
+ type: 'specific';
1523
+ };
1524
+
1525
+ /**
1526
+ * Effective resource access for a token-bearing principal (API token or external
1527
+ * app), reflected from its grants. Reported uniformly via the `access` envelope
1528
+ * field for both principals.
1529
+ */
1530
+ export type ResourceAccessInfo = {
1531
+ /**
1532
+ * Effective model access for this principal.
1533
+ */
1534
+ models: ResourceAccess;
1535
+ /**
1536
+ * Effective MCP access for this principal.
1537
+ */
1538
+ mcps: ResourceAccess;
1539
+ };
1540
+
1435
1541
  export type ResourceRole = 'resource_anonymous' | 'resource_guest' | 'resource_user' | 'resource_power_user' | 'resource_manager' | 'resource_admin';
1436
1542
 
1543
+ /**
1544
+ * One target in a model-router: a reference to an existing alias plus a pinned model.
1545
+ */
1546
+ export type RouterTarget = {
1547
+ /**
1548
+ * Name of an existing user/model/api alias (NOT a model-router).
1549
+ */
1550
+ alias: string;
1551
+ /**
1552
+ * Concrete model placed into `request["model"]` when forwarding to this target.
1553
+ */
1554
+ model: string;
1555
+ /**
1556
+ * Whether this target is part of the active sequence. Disabled targets are never
1557
+ * attempted but keep their config and position. Defaults to enabled.
1558
+ */
1559
+ enabled?: boolean;
1560
+ /**
1561
+ * SEAM (reserved): ignored by Fallback; used by a future weighted strategy.
1562
+ */
1563
+ weight?: number | null;
1564
+ };
1565
+
1566
+ export type RouterTargetRequest = {
1567
+ alias: string;
1568
+ model: string;
1569
+ enabled?: boolean;
1570
+ weight?: number | null;
1571
+ };
1572
+
1573
+ /**
1574
+ * `{"strategy":"fallback", ...}` — try targets in order, first success wins.
1575
+ */
1576
+ export type RoutingStrategyConfig = FallbackConfig & {
1577
+ strategy: 'fallback';
1578
+ };
1579
+
1437
1580
  export type SettingInfo = {
1438
1581
  key: string;
1439
1582
  current_value: unknown;
@@ -1537,17 +1680,11 @@ export type TestPromptResponse = {
1537
1680
  error?: string | null;
1538
1681
  };
1539
1682
 
1540
- /**
1541
- * Thinking capability and supported type configurations.
1542
- */
1543
1683
  export type ThinkingCapability = {
1544
1684
  supported: boolean;
1545
1685
  types: ThinkingTypes;
1546
1686
  };
1547
1687
 
1548
- /**
1549
- * Supported thinking type configurations.
1550
- */
1551
1688
  export type ThinkingTypes = {
1552
1689
  adaptive: CapabilitySupport;
1553
1690
  enabled: CapabilitySupport;
@@ -1567,12 +1704,41 @@ export type TokenDetail = {
1567
1704
  token_prefix: string;
1568
1705
  scopes: string;
1569
1706
  status: TokenStatus;
1570
- created_at: string;
1707
+ /**
1708
+ * Per-resource grants this token carries.
1709
+ */
1710
+ grants: TokenGrants;
1711
+ last_used_at?: string | null;
1712
+ created_at: string;
1571
1713
  updated_at: string;
1572
1714
  };
1573
1715
 
1574
1716
  /**
1575
- * API Token information response
1717
+ * Versioned envelope; the `version` tag is mandatory (mirrors `ApprovedResources`).
1718
+ */
1719
+ export type TokenGrants = TokenGrantsV1 & {
1720
+ version: '1';
1721
+ };
1722
+
1723
+ /**
1724
+ * Per-resource grants carried by an API token. Listing (`models_list` /
1725
+ * `mcps_list`) is separate from inference/connect: with listing off the
1726
+ * discovery endpoints return an empty set, but inference on an individually
1727
+ * granted resource still succeeds.
1728
+ *
1729
+ * Intentionally standalone — NOT shared with the App-access-request envelope
1730
+ * (`ApprovedResources`); the two may diverge.
1731
+ */
1732
+ export type TokenGrantsV1 = {
1733
+ models_list?: boolean;
1734
+ models?: ModelGrant;
1735
+ mcps_list?: boolean;
1736
+ mcps?: McpGrant;
1737
+ };
1738
+
1739
+ /**
1740
+ * API Token information response. Effective model/MCP access is reported uniformly
1741
+ * via the envelope's `access` field (same shape as external apps), not inline here.
1576
1742
  */
1577
1743
  export type TokenInfo = {
1578
1744
  role: TokenScope;
@@ -1587,12 +1753,9 @@ export type ToolCapabilities = {
1587
1753
  structured_output?: boolean | null;
1588
1754
  };
1589
1755
 
1590
- /**
1591
- * Request to update a setting value
1592
- */
1593
1756
  export type UpdateSettingRequest = {
1594
1757
  /**
1595
- * New value for the setting (type depends on setting metadata)
1758
+ * type depends on setting metadata
1596
1759
  */
1597
1760
  value: unknown;
1598
1761
  };
@@ -1699,6 +1862,10 @@ export type UserAliasResponse = {
1699
1862
  context_params: Array<string>;
1700
1863
  created_at: string;
1701
1864
  updated_at: string;
1865
+ /**
1866
+ * Local GGUF file size in bytes (present when the file is resolvable on disk)
1867
+ */
1868
+ size?: number | null;
1702
1869
  metadata?: null | ModelMetadata;
1703
1870
  };
1704
1871
 
@@ -1708,6 +1875,11 @@ export type UserInfo = {
1708
1875
  first_name?: string | null;
1709
1876
  last_name?: string | null;
1710
1877
  role?: null | AppRole;
1878
+ /**
1879
+ * OIDC id_token for the active session, when present. Used by the frontend to
1880
+ * authenticate direct calls to the external reference API. Omitted for token/exchange auth.
1881
+ */
1882
+ id_token?: string | null;
1711
1883
  };
1712
1884
 
1713
1885
  /**
@@ -1715,6 +1887,7 @@ export type UserInfo = {
1715
1887
  */
1716
1888
  export type UserInfoEnvelope = UserResponse & {
1717
1889
  dashboard?: null | DashboardUser;
1890
+ access?: null | ResourceAccessInfo;
1718
1891
  };
1719
1892
 
1720
1893
  export type UserListResponse = {
@@ -1795,6 +1968,43 @@ export type ListAllAccessRequestsResponses = {
1795
1968
 
1796
1969
  export type ListAllAccessRequestsResponse = ListAllAccessRequestsResponses[keyof ListAllAccessRequestsResponses];
1797
1970
 
1971
+ export type ListAppAccessData = {
1972
+ body?: never;
1973
+ path?: never;
1974
+ query?: never;
1975
+ url: '/bodhi/v1/access-requests/apps';
1976
+ };
1977
+
1978
+ export type ListAppAccessErrors = {
1979
+ /**
1980
+ * Invalid request parameters
1981
+ */
1982
+ 400: BodhiErrorResponse;
1983
+ /**
1984
+ * Not authenticated
1985
+ */
1986
+ 401: BodhiErrorResponse;
1987
+ /**
1988
+ * Insufficient permissions
1989
+ */
1990
+ 403: BodhiErrorResponse;
1991
+ /**
1992
+ * Internal server error
1993
+ */
1994
+ 500: BodhiErrorResponse;
1995
+ };
1996
+
1997
+ export type ListAppAccessError = ListAppAccessErrors[keyof ListAppAccessErrors];
1998
+
1999
+ export type ListAppAccessResponses = {
2000
+ /**
2001
+ * Issued app tokens
2002
+ */
2003
+ 200: ListAppAccessResponse;
2004
+ };
2005
+
2006
+ export type ListAppAccessResponse2 = ListAppAccessResponses[keyof ListAppAccessResponses];
2007
+
1798
2008
  export type ListPendingAccessRequestsData = {
1799
2009
  body?: never;
1800
2010
  path?: never;
@@ -2093,6 +2303,56 @@ export type GetAccessRequestReviewResponses = {
2093
2303
 
2094
2304
  export type GetAccessRequestReviewResponse = GetAccessRequestReviewResponses[keyof GetAccessRequestReviewResponses];
2095
2305
 
2306
+ export type RevokeAppAccessData = {
2307
+ body?: never;
2308
+ path: {
2309
+ /**
2310
+ * Access request ID
2311
+ */
2312
+ id: string;
2313
+ };
2314
+ query?: never;
2315
+ url: '/bodhi/v1/access-requests/{id}/revoke';
2316
+ };
2317
+
2318
+ export type RevokeAppAccessErrors = {
2319
+ /**
2320
+ * Invalid request parameters
2321
+ */
2322
+ 400: BodhiErrorResponse;
2323
+ /**
2324
+ * Not authenticated
2325
+ */
2326
+ 401: BodhiErrorResponse;
2327
+ /**
2328
+ * Insufficient permissions
2329
+ */
2330
+ 403: BodhiErrorResponse;
2331
+ /**
2332
+ * Not found
2333
+ */
2334
+ 404: BodhiErrorResponse;
2335
+ /**
2336
+ * Not in a revocable state
2337
+ */
2338
+ 409: BodhiErrorResponse;
2339
+ /**
2340
+ * Internal server error
2341
+ */
2342
+ 500: BodhiErrorResponse;
2343
+ };
2344
+
2345
+ export type RevokeAppAccessError = RevokeAppAccessErrors[keyof RevokeAppAccessErrors];
2346
+
2347
+ export type RevokeAppAccessResponses = {
2348
+ /**
2349
+ * Grant revoked
2350
+ */
2351
+ 200: AppAccessSummary;
2352
+ };
2353
+
2354
+ export type RevokeAppAccessResponse = RevokeAppAccessResponses[keyof RevokeAppAccessResponses];
2355
+
2096
2356
  export type GetAccessRequestStatusData = {
2097
2357
  body?: never;
2098
2358
  path: {
@@ -3420,6 +3680,34 @@ export type ListAllModelsData = {
3420
3680
  * Sort order: 'asc' for ascending, 'desc' for descending
3421
3681
  */
3422
3682
  sort_order?: string;
3683
+ /**
3684
+ * Alias type facet (comma-separated): `local_file`, `model_alias`, `api_model`, `fallback`.
3685
+ */
3686
+ type?: string;
3687
+ /**
3688
+ * API-format facet (comma-separated), API rows only: `openai`, `responses`, `anthropic`,
3689
+ * `gemini`, `liberty`. `anthropic` matches both anthropic and anthropic_oauth aliases.
3690
+ */
3691
+ api_format?: string;
3692
+ /**
3693
+ * Minimum local-file size in bytes (inclusive). Applies to local rows with a known size;
3694
+ * rows without a size (API/router) are not filtered out by size.
3695
+ */
3696
+ size_min?: number;
3697
+ /**
3698
+ * Maximum local-file size in bytes (inclusive). See `size_min`.
3699
+ */
3700
+ size_max?: number;
3701
+ /**
3702
+ * Capability facet (comma-separated), local rows only: `vision`, `tool_use`, `reasoning`.
3703
+ * A row passes only if it has metadata with every requested capability set true.
3704
+ */
3705
+ capability?: string;
3706
+ /**
3707
+ * Free-text search (case-insensitive substring) over a row's identifying fields — alias/name,
3708
+ * repo, filename for local rows; id, name, base_url for API rows; alias for routers.
3709
+ */
3710
+ search?: string;
3423
3711
  };
3424
3712
  url: '/bodhi/v1/models';
3425
3713
  };
@@ -4157,6 +4445,98 @@ export type GetDownloadStatusResponses = {
4157
4445
 
4158
4446
  export type GetDownloadStatusResponse = GetDownloadStatusResponses[keyof GetDownloadStatusResponses];
4159
4447
 
4448
+ export type ArchiveDownloadData = {
4449
+ body?: never;
4450
+ path: {
4451
+ /**
4452
+ * Unique identifier of the download request
4453
+ */
4454
+ id: string;
4455
+ };
4456
+ query?: never;
4457
+ url: '/bodhi/v1/models/files/pull/{id}/archive';
4458
+ };
4459
+
4460
+ export type ArchiveDownloadErrors = {
4461
+ /**
4462
+ * Invalid request parameters
4463
+ */
4464
+ 400: BodhiErrorResponse;
4465
+ /**
4466
+ * Not authenticated
4467
+ */
4468
+ 401: BodhiErrorResponse;
4469
+ /**
4470
+ * Insufficient permissions
4471
+ */
4472
+ 403: BodhiErrorResponse;
4473
+ /**
4474
+ * Download request not found
4475
+ */
4476
+ 404: BodhiErrorResponse;
4477
+ /**
4478
+ * Internal server error
4479
+ */
4480
+ 500: BodhiErrorResponse;
4481
+ };
4482
+
4483
+ export type ArchiveDownloadError = ArchiveDownloadErrors[keyof ArchiveDownloadErrors];
4484
+
4485
+ export type ArchiveDownloadResponses = {
4486
+ /**
4487
+ * Download request archived
4488
+ */
4489
+ 200: DownloadRequest;
4490
+ };
4491
+
4492
+ export type ArchiveDownloadResponse = ArchiveDownloadResponses[keyof ArchiveDownloadResponses];
4493
+
4494
+ export type RetryDownloadData = {
4495
+ body?: never;
4496
+ path: {
4497
+ /**
4498
+ * Unique identifier of the download request
4499
+ */
4500
+ id: string;
4501
+ };
4502
+ query?: never;
4503
+ url: '/bodhi/v1/models/files/pull/{id}/retry';
4504
+ };
4505
+
4506
+ export type RetryDownloadErrors = {
4507
+ /**
4508
+ * Invalid request parameters
4509
+ */
4510
+ 400: BodhiErrorResponse;
4511
+ /**
4512
+ * Not authenticated
4513
+ */
4514
+ 401: BodhiErrorResponse;
4515
+ /**
4516
+ * Insufficient permissions
4517
+ */
4518
+ 403: BodhiErrorResponse;
4519
+ /**
4520
+ * Download request not found
4521
+ */
4522
+ 404: BodhiErrorResponse;
4523
+ /**
4524
+ * Internal server error
4525
+ */
4526
+ 500: BodhiErrorResponse;
4527
+ };
4528
+
4529
+ export type RetryDownloadError = RetryDownloadErrors[keyof RetryDownloadErrors];
4530
+
4531
+ export type RetryDownloadResponses = {
4532
+ /**
4533
+ * Download request reset and re-started
4534
+ */
4535
+ 200: DownloadRequest;
4536
+ };
4537
+
4538
+ export type RetryDownloadResponse = RetryDownloadResponses[keyof RetryDownloadResponses];
4539
+
4160
4540
  export type RefreshModelMetadataData = {
4161
4541
  /**
4162
4542
  * Refresh request - either bulk (source='all') or single model (source='model' with identifiers)
@@ -4205,6 +4585,181 @@ export type RefreshModelMetadataResponses = {
4205
4585
 
4206
4586
  export type RefreshModelMetadataResponse = RefreshModelMetadataResponses[keyof RefreshModelMetadataResponses];
4207
4587
 
4588
+ export type CreateModelRouterData = {
4589
+ body: ModelRouterRequest;
4590
+ path?: never;
4591
+ query?: never;
4592
+ url: '/bodhi/v1/models/router';
4593
+ };
4594
+
4595
+ export type CreateModelRouterErrors = {
4596
+ /**
4597
+ * Invalid request parameters
4598
+ */
4599
+ 400: BodhiErrorResponse;
4600
+ /**
4601
+ * Not authenticated
4602
+ */
4603
+ 401: BodhiErrorResponse;
4604
+ /**
4605
+ * Insufficient permissions
4606
+ */
4607
+ 403: BodhiErrorResponse;
4608
+ /**
4609
+ * Internal server error
4610
+ */
4611
+ 500: BodhiErrorResponse;
4612
+ };
4613
+
4614
+ export type CreateModelRouterError = CreateModelRouterErrors[keyof CreateModelRouterErrors];
4615
+
4616
+ export type CreateModelRouterResponses = {
4617
+ /**
4618
+ * Model-router created
4619
+ */
4620
+ 201: ModelRouterResponse;
4621
+ };
4622
+
4623
+ export type CreateModelRouterResponse = CreateModelRouterResponses[keyof CreateModelRouterResponses];
4624
+
4625
+ export type DeleteModelRouterData = {
4626
+ body?: never;
4627
+ path: {
4628
+ /**
4629
+ * Model-router ID
4630
+ */
4631
+ id: string;
4632
+ };
4633
+ query?: never;
4634
+ url: '/bodhi/v1/models/router/{id}';
4635
+ };
4636
+
4637
+ export type DeleteModelRouterErrors = {
4638
+ /**
4639
+ * Invalid request parameters
4640
+ */
4641
+ 400: BodhiErrorResponse;
4642
+ /**
4643
+ * Not authenticated
4644
+ */
4645
+ 401: BodhiErrorResponse;
4646
+ /**
4647
+ * Insufficient permissions
4648
+ */
4649
+ 403: BodhiErrorResponse;
4650
+ /**
4651
+ * Model-router not found
4652
+ */
4653
+ 404: BodhiErrorResponse;
4654
+ /**
4655
+ * Internal server error
4656
+ */
4657
+ 500: BodhiErrorResponse;
4658
+ };
4659
+
4660
+ export type DeleteModelRouterError = DeleteModelRouterErrors[keyof DeleteModelRouterErrors];
4661
+
4662
+ export type DeleteModelRouterResponses = {
4663
+ /**
4664
+ * Model-router deleted
4665
+ */
4666
+ 204: void;
4667
+ };
4668
+
4669
+ export type DeleteModelRouterResponse = DeleteModelRouterResponses[keyof DeleteModelRouterResponses];
4670
+
4671
+ export type GetModelRouterData = {
4672
+ body?: never;
4673
+ path: {
4674
+ /**
4675
+ * Unique identifier for the model-router alias
4676
+ */
4677
+ id: string;
4678
+ };
4679
+ query?: never;
4680
+ url: '/bodhi/v1/models/router/{id}';
4681
+ };
4682
+
4683
+ export type GetModelRouterErrors = {
4684
+ /**
4685
+ * Invalid request parameters
4686
+ */
4687
+ 400: BodhiErrorResponse;
4688
+ /**
4689
+ * Not authenticated
4690
+ */
4691
+ 401: BodhiErrorResponse;
4692
+ /**
4693
+ * Insufficient permissions
4694
+ */
4695
+ 403: BodhiErrorResponse;
4696
+ /**
4697
+ * Model-router with specified ID not found
4698
+ */
4699
+ 404: BodhiErrorResponse;
4700
+ /**
4701
+ * Internal server error
4702
+ */
4703
+ 500: BodhiErrorResponse;
4704
+ };
4705
+
4706
+ export type GetModelRouterError = GetModelRouterErrors[keyof GetModelRouterErrors];
4707
+
4708
+ export type GetModelRouterResponses = {
4709
+ /**
4710
+ * Model-router configuration retrieved
4711
+ */
4712
+ 200: ModelRouterResponse;
4713
+ };
4714
+
4715
+ export type GetModelRouterResponse = GetModelRouterResponses[keyof GetModelRouterResponses];
4716
+
4717
+ export type UpdateModelRouterData = {
4718
+ body: ModelRouterRequest;
4719
+ path: {
4720
+ /**
4721
+ * Model-router ID
4722
+ */
4723
+ id: string;
4724
+ };
4725
+ query?: never;
4726
+ url: '/bodhi/v1/models/router/{id}';
4727
+ };
4728
+
4729
+ export type UpdateModelRouterErrors = {
4730
+ /**
4731
+ * Invalid request parameters
4732
+ */
4733
+ 400: BodhiErrorResponse;
4734
+ /**
4735
+ * Not authenticated
4736
+ */
4737
+ 401: BodhiErrorResponse;
4738
+ /**
4739
+ * Insufficient permissions
4740
+ */
4741
+ 403: BodhiErrorResponse;
4742
+ /**
4743
+ * Model-router not found
4744
+ */
4745
+ 404: BodhiErrorResponse;
4746
+ /**
4747
+ * Internal server error
4748
+ */
4749
+ 500: BodhiErrorResponse;
4750
+ };
4751
+
4752
+ export type UpdateModelRouterError = UpdateModelRouterErrors[keyof UpdateModelRouterErrors];
4753
+
4754
+ export type UpdateModelRouterResponses = {
4755
+ /**
4756
+ * Model-router updated
4757
+ */
4758
+ 200: ModelRouterResponse;
4759
+ };
4760
+
4761
+ export type UpdateModelRouterResponse = UpdateModelRouterResponses[keyof UpdateModelRouterResponses];
4762
+
4208
4763
  export type GetAliasData = {
4209
4764
  body?: never;
4210
4765
  path: {
@@ -4373,11 +4928,11 @@ export type DeleteSettingResponse = DeleteSettingResponses[keyof DeleteSettingRe
4373
4928
 
4374
4929
  export type UpdateSettingData = {
4375
4930
  /**
4376
- * Request to update a setting value
4931
+ * New setting value
4377
4932
  */
4378
4933
  body: {
4379
4934
  /**
4380
- * New value for the setting (type depends on setting metadata)
4935
+ * type depends on setting metadata
4381
4936
  */
4382
4937
  value: unknown;
4383
4938
  };
@@ -4668,6 +5223,52 @@ export type CreateApiTokenResponses = {
4668
5223
 
4669
5224
  export type CreateApiTokenResponse = CreateApiTokenResponses[keyof CreateApiTokenResponses];
4670
5225
 
5226
+ export type DeleteApiTokenData = {
5227
+ body?: never;
5228
+ path: {
5229
+ /**
5230
+ * Unique identifier of the API token to delete
5231
+ */
5232
+ id: string;
5233
+ };
5234
+ query?: never;
5235
+ url: '/bodhi/v1/tokens/{id}';
5236
+ };
5237
+
5238
+ export type DeleteApiTokenErrors = {
5239
+ /**
5240
+ * Invalid request parameters
5241
+ */
5242
+ 400: BodhiErrorResponse;
5243
+ /**
5244
+ * Not authenticated
5245
+ */
5246
+ 401: BodhiErrorResponse;
5247
+ /**
5248
+ * Insufficient permissions
5249
+ */
5250
+ 403: BodhiErrorResponse;
5251
+ /**
5252
+ * Token not found
5253
+ */
5254
+ 404: BodhiErrorResponse;
5255
+ /**
5256
+ * Internal server error
5257
+ */
5258
+ 500: BodhiErrorResponse;
5259
+ };
5260
+
5261
+ export type DeleteApiTokenError = DeleteApiTokenErrors[keyof DeleteApiTokenErrors];
5262
+
5263
+ export type DeleteApiTokenResponses = {
5264
+ /**
5265
+ * Token deleted successfully
5266
+ */
5267
+ 204: void;
5268
+ };
5269
+
5270
+ export type DeleteApiTokenResponse = DeleteApiTokenResponses[keyof DeleteApiTokenResponses];
5271
+
4671
5272
  export type UpdateApiTokenData = {
4672
5273
  /**
4673
5274
  * Token update request