@eduwork/dsh-oidc 0.2.2 → 0.2.4

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.
Files changed (42) hide show
  1. package/CHANGELOG.en.md +6 -38
  2. package/CHANGELOG.md +7 -39
  3. package/CODE_OF_CONDUCT.en.md +1 -1
  4. package/CODE_OF_CONDUCT.md +1 -1
  5. package/CONTRIBUTING.en.md +1 -1
  6. package/CONTRIBUTING.md +1 -1
  7. package/README.md +19 -16
  8. package/{README.en.md → README_EN.md} +15 -8
  9. package/SECURITY.en.md +1 -1
  10. package/SECURITY.md +1 -1
  11. package/SUPPORT.en.md +1 -1
  12. package/SUPPORT.md +1 -1
  13. package/docs/EDUWORK-MIGRATION.en.md +2 -8
  14. package/docs/EDUWORK-MIGRATION.md +2 -8
  15. package/docs/compatibility.en.md +3 -25
  16. package/docs/compatibility.md +3 -25
  17. package/docs/desktop-host.en.md +55 -55
  18. package/docs/desktop-host.md +64 -64
  19. package/docs/development.en.md +6 -4
  20. package/docs/development.md +6 -4
  21. package/docs/dsh-integration.en.md +2 -2
  22. package/docs/dsh-integration.md +2 -2
  23. package/docs/getting-started.en.md +4 -4
  24. package/docs/getting-started.md +4 -4
  25. package/docs/open-integration.en.md +73 -0
  26. package/docs/open-integration.md +73 -0
  27. package/docs/reasoning-replay.en.md +13 -0
  28. package/docs/reasoning-replay.md +17 -0
  29. package/docs/release-checklist.en.md +7 -61
  30. package/docs/release-checklist.md +7 -61
  31. package/docs/server-integration-contract.en.md +4 -2
  32. package/docs/server-integration-contract.md +5 -3
  33. package/examples/enterprise-profile.example.json +78 -78
  34. package/examples/identity-only.example.json +1 -1
  35. package/examples/resources-discovery.example.json +1 -1
  36. package/lib/provider/core.js +1 -0
  37. package/lib/provider/transform-adapter.js +27 -1
  38. package/lib/provider/transforms.js +0 -1
  39. package/lib/typert.host.js +38 -38
  40. package/lib/typert.remote-client.js +37 -37
  41. package/package.json +6 -5
  42. package/schema/enterprise-profile.v1alpha1.schema.json +193 -193
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eduwork/dsh-oidc",
3
- "version": "0.2.2",
3
+ "version": "0.2.4",
4
4
  "description": "Standards-based OIDC identity, enterprise API-key binding, declarative branding, and OpenAI-compatible model integration for DeepSeek Harness",
5
5
  "keywords": [
6
6
  "deepseek-harness",
@@ -33,7 +33,7 @@
33
33
  "protocol/openapi.yaml",
34
34
  "protocol/resources.openapi.yaml",
35
35
  "README.md",
36
- "README.en.md",
36
+ "README_EN.md",
37
37
  "CODE_OF_CONDUCT.md",
38
38
  "CODE_OF_CONDUCT.en.md",
39
39
  "CONTRIBUTING.md",
@@ -97,12 +97,13 @@
97
97
  },
98
98
  "repository": {
99
99
  "type": "git",
100
- "url": "git+https://github.com/freedomkk-qfeng/dsh-oidc.git"
100
+ "url": "git+https://github.com/ecnu/EduWork.git",
101
+ "directory": "packages/dsh-oidc"
101
102
  },
102
103
  "bugs": {
103
- "url": "https://github.com/freedomkk-qfeng/dsh-oidc/issues"
104
+ "url": "https://github.com/ecnu/EduWork/issues"
104
105
  },
105
- "homepage": "https://github.com/freedomkk-qfeng/dsh-oidc#readme",
106
+ "homepage": "https://github.com/ecnu/EduWork/tree/main/packages/dsh-oidc#readme",
106
107
  "license": "MIT",
107
108
  "dependencies": {
108
109
  "zod": "4.4.3"
@@ -1,193 +1,193 @@
1
- {
2
- "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://github.com/freedomkk-qfeng/dsh-oidc/schema/enterprise-profile.v1alpha1.schema.json",
4
- "title": "dsh-oidc Enterprise Profile v1alpha1",
5
- "type": "object",
6
- "additionalProperties": false,
7
- "required": ["schemaVersion", "id", "displayName", "oidc"],
8
- "dependentRequired": { "keyBinding": ["provider"], "provider": ["keyBinding"] },
9
- "properties": {
10
- "schemaVersion": { "const": "dsh-oidc/v1alpha1" },
11
- "id": { "$ref": "#/$defs/id" },
12
- "displayName": { "$ref": "#/$defs/nonEmpty120" },
13
- "organization": { "$ref": "#/$defs/nonEmpty120" },
14
- "nativeInstitutionID": { "type": "string", "minLength": 1, "maxLength": 64 },
15
- "allowInsecureDevelopment": { "type": "boolean", "default": false },
16
- "insecureDevelopmentOrigin": { "type": "string", "minLength": 8, "maxLength": 2048, "pattern": "^http://" },
17
- "brand": { "$ref": "#/$defs/brand" },
18
- "oidc": { "$ref": "#/$defs/oidc" },
19
- "keyBinding": { "$ref": "#/$defs/keyBinding" },
20
- "provider": { "$ref": "#/$defs/provider" }
21
- },
22
- "allOf": [
23
- {
24
- "if": {
25
- "not": {
26
- "type": "object",
27
- "properties": { "insecureDevelopmentOrigin": {} },
28
- "required": ["insecureDevelopmentOrigin"]
29
- }
30
- },
31
- "then": {
32
- "type": "object",
33
- "properties": {
34
- "oidc": { "type": "object", "properties": { "issuer": { "$ref": "#/$defs/secureEndpointURL" } } },
35
- "keyBinding": { "type": "object", "properties": { "baseURL": { "$ref": "#/$defs/secureEndpointURL" } } },
36
- "provider": { "type": "object", "properties": { "baseURL": { "$ref": "#/$defs/secureEndpointURL" } } }
37
- }
38
- }
39
- },
40
- {
41
- "if": {
42
- "type": "object",
43
- "properties": { "insecureDevelopmentOrigin": {} },
44
- "required": ["insecureDevelopmentOrigin"]
45
- },
46
- "then": { "type": "object", "properties": { "allowInsecureDevelopment": { "const": true } } }
47
- }
48
- ],
49
- "$defs": {
50
- "id": { "type": "string", "pattern": "^[a-z][a-z0-9-]{0,63}$" },
51
- "nonEmpty120": { "type": "string", "minLength": 1, "maxLength": 120, "pattern": "^\\S(?:.*\\S)?$" },
52
- "positiveInteger": { "type": "integer", "minimum": 1, "maximum": 9007199254740991 },
53
- "httpsURL": { "type": "string", "minLength": 9, "maxLength": 2048, "pattern": "^https://" },
54
- "secureEndpointURL": { "type": "string", "minLength": 9, "maxLength": 2048, "pattern": "^(https://|http://(localhost|127\\.0\\.0\\.1|\\[::1\\])(?=[:/]))" },
55
- "endpointURL": { "type": "string", "minLength": 8, "maxLength": 2048, "pattern": "^(https://|http://)" },
56
- "brand": {
57
- "type": "object",
58
- "additionalProperties": false,
59
- "properties": {
60
- "productName": { "type": "string", "minLength": 1, "maxLength": 80 },
61
- "organizationName": { "$ref": "#/$defs/nonEmpty120" },
62
- "mark": { "type": "string", "minLength": 1, "maxLength": 4 },
63
- "logoURL": { "type": "string", "minLength": 9, "maxLength": 131072, "pattern": "^(https://|data:image/(png|webp);base64,)" },
64
- "primaryColor": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" },
65
- "loginTitle": { "type": "string", "minLength": 1, "maxLength": 120 },
66
- "loginDescription": { "type": "string", "minLength": 1, "maxLength": 500 },
67
- "supportURL": { "$ref": "#/$defs/httpsURL" }
68
- }
69
- },
70
- "oidc": {
71
- "type": "object",
72
- "additionalProperties": false,
73
- "required": ["issuer", "clientId", "scopes"],
74
- "properties": {
75
- "issuer": { "$ref": "#/$defs/endpointURL" },
76
- "clientId": { "type": "string", "minLength": 1, "maxLength": 256 },
77
- "scopes": {
78
- "type": "array",
79
- "minItems": 2,
80
- "maxItems": 64,
81
- "uniqueItems": true,
82
- "allOf": [
83
- { "contains": { "const": "openid" } },
84
- { "contains": { "const": "profile" } }
85
- ],
86
- "items": { "type": "string", "minLength": 1, "maxLength": 128, "pattern": "^\\S+$" }
87
- }
88
- }
89
- },
90
- "keyBinding": {
91
- "type": "object",
92
- "additionalProperties": false,
93
- "required": ["baseURL"],
94
- "properties": {
95
- "type": { "enum": ["worker-user-center-v1", "eduwork-resources-v1"], "default": "worker-user-center-v1" },
96
- "baseURL": { "$ref": "#/$defs/endpointURL" },
97
- "credentialRef": { "type": "string", "default": "EDUWORK_API_KEY", "pattern": "^[A-Za-z_][A-Za-z0-9_]*$", "maxLength": 128 }
98
- }
99
- },
100
- "compat": {
101
- "type": "object",
102
- "additionalProperties": false,
103
- "properties": {
104
- "supportsDeveloperRole": { "type": "boolean" },
105
- "supportsStore": { "type": "boolean" },
106
- "supportsReasoningEffort": { "type": "boolean" },
107
- "supportsUsageInStreaming": { "type": "boolean" },
108
- "maxTokensField": { "enum": ["max_completion_tokens", "max_tokens"] },
109
- "supportsStrictMode": { "type": "boolean" },
110
- "supportsLongCacheRetention": { "type": "boolean" },
111
- "thinkingFormat": { "enum": ["openai", "deepseek", "openrouter", "together", "baseten", "zai", "qwen", "chat-template", "qwen-chat-template", "string-thinking", "ant-ling"] },
112
- "requiresReasoningContentOnAssistantMessages": { "type": "boolean" }
113
- }
114
- },
115
- "retryPolicy": {
116
- "type": "object",
117
- "additionalProperties": false,
118
- "required": ["mode"],
119
- "properties": {
120
- "mode": { "enum": ["normal", "always"] },
121
- "maxRetries": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
122
- "retryableCodes": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "minLength": 1, "maxLength": 128 } },
123
- "backoff": {
124
- "type": "object",
125
- "additionalProperties": false,
126
- "properties": {
127
- "initialDelayMs": { "type": "number", "exclusiveMinimum": 0, "maximum": 2147483647 },
128
- "maxDelayMs": { "type": "number", "exclusiveMinimum": 0, "maximum": 2147483647 },
129
- "jitterRatio": { "type": "number", "minimum": 0, "maximum": 1 }
130
- }
131
- }
132
- }
133
- },
134
- "model": {
135
- "type": "object",
136
- "additionalProperties": false,
137
- "required": ["id"],
138
- "properties": {
139
- "id": { "type": "string", "minLength": 1, "maxLength": 256 },
140
- "name": { "type": "string", "minLength": 1, "maxLength": 256 },
141
- "input": { "type": "array", "minItems": 1, "maxItems": 2, "uniqueItems": true, "items": { "enum": ["text", "image"] } },
142
- "contextWindow": { "$ref": "#/$defs/positiveInteger" },
143
- "maxTokens": { "$ref": "#/$defs/positiveInteger" },
144
- "reasoning": { "type": "boolean" },
145
- "defaultReasoningEffort": { "enum": ["off", "minimal", "low", "medium", "high", "xhigh", "max"] },
146
- "reasoningEfforts": {
147
- "oneOf": [
148
- { "const": false },
149
- {
150
- "type": "object",
151
- "minProperties": 1,
152
- "maxProperties": 7,
153
- "additionalProperties": false,
154
- "properties": {
155
- "off": { "type": ["string", "null"], "minLength": 1, "maxLength": 32 },
156
- "minimal": { "type": "string", "minLength": 1, "maxLength": 32 },
157
- "low": { "type": "string", "minLength": 1, "maxLength": 32 },
158
- "medium": { "type": "string", "minLength": 1, "maxLength": 32 },
159
- "high": { "type": "string", "minLength": 1, "maxLength": 32 },
160
- "xhigh": { "type": "string", "minLength": 1, "maxLength": 32 },
161
- "max": { "type": "string", "minLength": 1, "maxLength": 32 }
162
- }
163
- }
164
- ]
165
- },
166
- "compat": { "$ref": "#/$defs/compat" }
167
- }
168
- },
169
- "provider": {
170
- "type": "object",
171
- "additionalProperties": false,
172
- "required": ["id", "adapter", "baseURL"],
173
- "allOf": [{ "if": { "required": ["modelSource"], "properties": { "modelSource": { "const": "discovery" } } }, "else": { "required": ["models"], "properties": { "models": { "type": "array", "minItems": 1 } } } }],
174
- "properties": {
175
- "id": { "$ref": "#/$defs/id" },
176
- "displayName": { "$ref": "#/$defs/nonEmpty120" },
177
- "adapter": { "const": "openai-compatible" },
178
- "baseURL": { "$ref": "#/$defs/endpointURL" },
179
- "reasoning": { "enum": ["off", "minimal", "low", "medium", "high", "xhigh", "max"] },
180
- "defaultContextWindow": { "$ref": "#/$defs/positiveInteger" },
181
- "defaultMaxTokens": { "$ref": "#/$defs/positiveInteger" },
182
- "maxRequestImageBytes": { "$ref": "#/$defs/positiveInteger" },
183
- "requestImagePixelBudget": { "$ref": "#/$defs/positiveInteger" },
184
- "requestImageMaxBytes": { "$ref": "#/$defs/positiveInteger" },
185
- "streamIdleTimeoutMs": { "$ref": "#/$defs/positiveInteger" },
186
- "retryPolicy": { "$ref": "#/$defs/retryPolicy" },
187
- "compat": { "$ref": "#/$defs/compat" },
188
- "modelSource": { "enum": ["profile", "discovery"], "default": "profile" },
189
- "models": { "type": "array", "minItems": 0, "maxItems": 128, "items": { "$ref": "#/$defs/model" } }
190
- }
191
- }
192
- }
193
- }
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/ecnu/EduWork/schema/enterprise-profile.v1alpha1.schema.json",
4
+ "title": "dsh-oidc Enterprise Profile v1alpha1",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["schemaVersion", "id", "displayName", "oidc"],
8
+ "dependentRequired": { "keyBinding": ["provider"], "provider": ["keyBinding"] },
9
+ "properties": {
10
+ "schemaVersion": { "const": "dsh-oidc/v1alpha1" },
11
+ "id": { "$ref": "#/$defs/id" },
12
+ "displayName": { "$ref": "#/$defs/nonEmpty120" },
13
+ "organization": { "$ref": "#/$defs/nonEmpty120" },
14
+ "nativeInstitutionID": { "type": "string", "minLength": 1, "maxLength": 64 },
15
+ "allowInsecureDevelopment": { "type": "boolean", "default": false },
16
+ "insecureDevelopmentOrigin": { "type": "string", "minLength": 8, "maxLength": 2048, "pattern": "^http://" },
17
+ "brand": { "$ref": "#/$defs/brand" },
18
+ "oidc": { "$ref": "#/$defs/oidc" },
19
+ "keyBinding": { "$ref": "#/$defs/keyBinding" },
20
+ "provider": { "$ref": "#/$defs/provider" }
21
+ },
22
+ "allOf": [
23
+ {
24
+ "if": {
25
+ "not": {
26
+ "type": "object",
27
+ "properties": { "insecureDevelopmentOrigin": {} },
28
+ "required": ["insecureDevelopmentOrigin"]
29
+ }
30
+ },
31
+ "then": {
32
+ "type": "object",
33
+ "properties": {
34
+ "oidc": { "type": "object", "properties": { "issuer": { "$ref": "#/$defs/secureEndpointURL" } } },
35
+ "keyBinding": { "type": "object", "properties": { "baseURL": { "$ref": "#/$defs/secureEndpointURL" } } },
36
+ "provider": { "type": "object", "properties": { "baseURL": { "$ref": "#/$defs/secureEndpointURL" } } }
37
+ }
38
+ }
39
+ },
40
+ {
41
+ "if": {
42
+ "type": "object",
43
+ "properties": { "insecureDevelopmentOrigin": {} },
44
+ "required": ["insecureDevelopmentOrigin"]
45
+ },
46
+ "then": { "type": "object", "properties": { "allowInsecureDevelopment": { "const": true } } }
47
+ }
48
+ ],
49
+ "$defs": {
50
+ "id": { "type": "string", "pattern": "^[a-z][a-z0-9-]{0,63}$" },
51
+ "nonEmpty120": { "type": "string", "minLength": 1, "maxLength": 120, "pattern": "^\\S(?:.*\\S)?$" },
52
+ "positiveInteger": { "type": "integer", "minimum": 1, "maximum": 9007199254740991 },
53
+ "httpsURL": { "type": "string", "minLength": 9, "maxLength": 2048, "pattern": "^https://" },
54
+ "secureEndpointURL": { "type": "string", "minLength": 9, "maxLength": 2048, "pattern": "^(https://|http://(localhost|127\\.0\\.0\\.1|\\[::1\\])(?=[:/]))" },
55
+ "endpointURL": { "type": "string", "minLength": 8, "maxLength": 2048, "pattern": "^(https://|http://)" },
56
+ "brand": {
57
+ "type": "object",
58
+ "additionalProperties": false,
59
+ "properties": {
60
+ "productName": { "type": "string", "minLength": 1, "maxLength": 80 },
61
+ "organizationName": { "$ref": "#/$defs/nonEmpty120" },
62
+ "mark": { "type": "string", "minLength": 1, "maxLength": 4 },
63
+ "logoURL": { "type": "string", "minLength": 9, "maxLength": 131072, "pattern": "^(https://|data:image/(png|webp);base64,)" },
64
+ "primaryColor": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" },
65
+ "loginTitle": { "type": "string", "minLength": 1, "maxLength": 120 },
66
+ "loginDescription": { "type": "string", "minLength": 1, "maxLength": 500 },
67
+ "supportURL": { "$ref": "#/$defs/httpsURL" }
68
+ }
69
+ },
70
+ "oidc": {
71
+ "type": "object",
72
+ "additionalProperties": false,
73
+ "required": ["issuer", "clientId", "scopes"],
74
+ "properties": {
75
+ "issuer": { "$ref": "#/$defs/endpointURL" },
76
+ "clientId": { "type": "string", "minLength": 1, "maxLength": 256 },
77
+ "scopes": {
78
+ "type": "array",
79
+ "minItems": 2,
80
+ "maxItems": 64,
81
+ "uniqueItems": true,
82
+ "allOf": [
83
+ { "contains": { "const": "openid" } },
84
+ { "contains": { "const": "profile" } }
85
+ ],
86
+ "items": { "type": "string", "minLength": 1, "maxLength": 128, "pattern": "^\\S+$" }
87
+ }
88
+ }
89
+ },
90
+ "keyBinding": {
91
+ "type": "object",
92
+ "additionalProperties": false,
93
+ "required": ["baseURL"],
94
+ "properties": {
95
+ "type": { "enum": ["worker-user-center-v1", "eduwork-resources-v1"], "default": "worker-user-center-v1" },
96
+ "baseURL": { "$ref": "#/$defs/endpointURL" },
97
+ "credentialRef": { "type": "string", "default": "EDUWORK_API_KEY", "pattern": "^[A-Za-z_][A-Za-z0-9_]*$", "maxLength": 128 }
98
+ }
99
+ },
100
+ "compat": {
101
+ "type": "object",
102
+ "additionalProperties": false,
103
+ "properties": {
104
+ "supportsDeveloperRole": { "type": "boolean" },
105
+ "supportsStore": { "type": "boolean" },
106
+ "supportsReasoningEffort": { "type": "boolean" },
107
+ "supportsUsageInStreaming": { "type": "boolean" },
108
+ "maxTokensField": { "enum": ["max_completion_tokens", "max_tokens"] },
109
+ "supportsStrictMode": { "type": "boolean" },
110
+ "supportsLongCacheRetention": { "type": "boolean" },
111
+ "thinkingFormat": { "enum": ["openai", "deepseek", "openrouter", "together", "baseten", "zai", "qwen", "chat-template", "qwen-chat-template", "string-thinking", "ant-ling"] },
112
+ "requiresReasoningContentOnAssistantMessages": { "type": "boolean" }
113
+ }
114
+ },
115
+ "retryPolicy": {
116
+ "type": "object",
117
+ "additionalProperties": false,
118
+ "required": ["mode"],
119
+ "properties": {
120
+ "mode": { "enum": ["normal", "always"] },
121
+ "maxRetries": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
122
+ "retryableCodes": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "minLength": 1, "maxLength": 128 } },
123
+ "backoff": {
124
+ "type": "object",
125
+ "additionalProperties": false,
126
+ "properties": {
127
+ "initialDelayMs": { "type": "number", "exclusiveMinimum": 0, "maximum": 2147483647 },
128
+ "maxDelayMs": { "type": "number", "exclusiveMinimum": 0, "maximum": 2147483647 },
129
+ "jitterRatio": { "type": "number", "minimum": 0, "maximum": 1 }
130
+ }
131
+ }
132
+ }
133
+ },
134
+ "model": {
135
+ "type": "object",
136
+ "additionalProperties": false,
137
+ "required": ["id"],
138
+ "properties": {
139
+ "id": { "type": "string", "minLength": 1, "maxLength": 256 },
140
+ "name": { "type": "string", "minLength": 1, "maxLength": 256 },
141
+ "input": { "type": "array", "minItems": 1, "maxItems": 2, "uniqueItems": true, "items": { "enum": ["text", "image"] } },
142
+ "contextWindow": { "$ref": "#/$defs/positiveInteger" },
143
+ "maxTokens": { "$ref": "#/$defs/positiveInteger" },
144
+ "reasoning": { "type": "boolean" },
145
+ "defaultReasoningEffort": { "enum": ["off", "minimal", "low", "medium", "high", "xhigh", "max"] },
146
+ "reasoningEfforts": {
147
+ "oneOf": [
148
+ { "const": false },
149
+ {
150
+ "type": "object",
151
+ "minProperties": 1,
152
+ "maxProperties": 7,
153
+ "additionalProperties": false,
154
+ "properties": {
155
+ "off": { "type": ["string", "null"], "minLength": 1, "maxLength": 32 },
156
+ "minimal": { "type": "string", "minLength": 1, "maxLength": 32 },
157
+ "low": { "type": "string", "minLength": 1, "maxLength": 32 },
158
+ "medium": { "type": "string", "minLength": 1, "maxLength": 32 },
159
+ "high": { "type": "string", "minLength": 1, "maxLength": 32 },
160
+ "xhigh": { "type": "string", "minLength": 1, "maxLength": 32 },
161
+ "max": { "type": "string", "minLength": 1, "maxLength": 32 }
162
+ }
163
+ }
164
+ ]
165
+ },
166
+ "compat": { "$ref": "#/$defs/compat" }
167
+ }
168
+ },
169
+ "provider": {
170
+ "type": "object",
171
+ "additionalProperties": false,
172
+ "required": ["id", "adapter", "baseURL"],
173
+ "allOf": [{ "if": { "required": ["modelSource"], "properties": { "modelSource": { "const": "discovery" } } }, "else": { "required": ["models"], "properties": { "models": { "type": "array", "minItems": 1 } } } }],
174
+ "properties": {
175
+ "id": { "$ref": "#/$defs/id" },
176
+ "displayName": { "$ref": "#/$defs/nonEmpty120" },
177
+ "adapter": { "const": "openai-compatible" },
178
+ "baseURL": { "$ref": "#/$defs/endpointURL" },
179
+ "reasoning": { "enum": ["off", "minimal", "low", "medium", "high", "xhigh", "max"] },
180
+ "defaultContextWindow": { "$ref": "#/$defs/positiveInteger" },
181
+ "defaultMaxTokens": { "$ref": "#/$defs/positiveInteger" },
182
+ "maxRequestImageBytes": { "$ref": "#/$defs/positiveInteger" },
183
+ "requestImagePixelBudget": { "$ref": "#/$defs/positiveInteger" },
184
+ "requestImageMaxBytes": { "$ref": "#/$defs/positiveInteger" },
185
+ "streamIdleTimeoutMs": { "$ref": "#/$defs/positiveInteger" },
186
+ "retryPolicy": { "$ref": "#/$defs/retryPolicy" },
187
+ "compat": { "$ref": "#/$defs/compat" },
188
+ "modelSource": { "enum": ["profile", "discovery"], "default": "profile" },
189
+ "models": { "type": "array", "minItems": 0, "maxItems": 128, "items": { "$ref": "#/$defs/model" } }
190
+ }
191
+ }
192
+ }
193
+ }