Commit f93ac7e
authored
feat(dotAI): custom properties via providerConfig settings section (#35531)
## Summary
Introduces a `settings` block inside `providerConfig` JSON as the single
source of truth for all dotAI behavioral configuration (prompts,
temperature, embeddings tuning, etc.), replacing the previous individual
App Secret fields and Additional Parameters.
- **`AppKeys.java`**: Added `settingsKey` field to each enum constant —
the camelCase JSON key within `providerConfig.settings`. Keys like
`ROLE_PROMPT`, `COMPLETION_TEMPERATURE`, and all embeddings tuning keys
now map directly to a `settingsKey`. Keys that are not configurable via
settings (`API_KEY`, `API_URL`, `PROVIDER_CONFIG`) retain `settingsKey =
null`.
- **`AppConfig.java`**: Added `settingsValues` (`Map<String, String>`)
parsed from `providerConfig.settings` at construction time.
`getConfig(AppKeys)` now checks `settingsValues` first, then falls back
to `AppKeys.defaultValue`. Old `configValues`/secret lookups removed —
`providerConfig` is the only source of truth.
- **`LangChain4jAIClient.java`**: Fixed image size override — the `size`
field in the request payload now overrides `ProviderConfig.size()` at
call time. Size is included in the model cache key so each distinct size
gets its own cached instance. Extracted `applyRequestSize()` as a
`@VisibleForTesting` static method.
- **`dotAI.yml`**: Removed all legacy hidden fields. Retained only
`providerConfig` with the required `hint` field.
- **`DotAiConfigDetailComponent`**: Updated the example JSON to reflect
the new `settings` section structure.
- **Tests**: Added 5 tests to `AppConfigTest` covering `settings`
overrides, fallback behavior, and prompt field population. Added 3 tests
to `LangChain4jAIClientTest` covering `applyRequestSize` with size
present, absent, and blank.
- **Postman**: Removed stale `com.dotcms.ai.debug.logging` assertion
from Config GET test.
## Configuration
The `settings` block is optional. Fields not included fall back to their
documented defaults.
```json
{
"chat": {
"provider": "openai",
"apiKey": "sk-...",
"model": "gpt-4o",
"maxTokens": 16384,
"temperature": 1.0,
"maxRetries": 3
},
"embeddings": {
"provider": "openai",
"apiKey": "sk-...",
"model": "text-embedding-ada-002"
},
"image": {
"provider": "openai",
"apiKey": "sk-...",
"model": "dall-e-3"
},
"settings": {
"rolePrompt": "You are dotCMSbot, an AI assistant to help content creators.",
"textPrompt": "Use Descriptive writing style.",
"imagePrompt": "Use 16:9 aspect ratio.",
"imageSize": "1792x1024",
"listenerIndexer": { "default": "blog,news,webPageContent" },
"temperature": 1.0,
"embeddingsSplitAtTokens": 512,
"embeddingsSearchThreshold": 0.25,
"debugLogging": false
}
}
```
## Breaking Change
Customers with existing dotAI configuration must migrate to the new
`providerConfig` JSON format. Individual App Secret fields are no longer
read. See the
[DotAI-Migration-Guide.md](https://github.com/user-attachments/files/27261982/DotAI-Migration-Guide.md)
included in this PR.
This PR fixes #35183
[EPIC: dotAI Multi-Provider Support
#33970](#33970)
> [!NOTE]
> **Medium Risk**
> Configuration shape change affects all existing dotAI deployments. No
automatic migration — customers must re-enter configuration using the
new JSON format. Runtime behavior is unchanged for deployments that
migrate correctly.1 parent 1fa9b9e commit f93ac7e
9 files changed
Lines changed: 207 additions & 94 deletions
File tree
- core-web/apps/dotcms-ui/src/app/portlets/dot-apps/components/dot-ai-config-detail
- dotCMS/src
- main
- java/com/dotcms/ai
- app
- client/langchain4j
- resources/apps
- test/java/com/dotcms/ai
- app
- client/langchain4j
- dotcms-integration/src/test/java/com/dotcms/ai
- dotcms-postman/src/main/resources/postman
Lines changed: 10 additions & 8 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
26 | 26 | | |
27 | 27 | | |
28 | 28 | | |
29 | | - | |
30 | | - | |
31 | | - | |
| 29 | + | |
32 | 30 | | |
33 | 31 | | |
34 | 32 | | |
35 | 33 | | |
36 | | - | |
37 | | - | |
| 34 | + | |
38 | 35 | | |
39 | 36 | | |
40 | 37 | | |
41 | 38 | | |
42 | | - | |
43 | | - | |
44 | | - | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
45 | 47 | | |
46 | 48 | | |
47 | 49 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
53 | 53 | | |
54 | 54 | | |
55 | 55 | | |
| 56 | + | |
56 | 57 | | |
57 | 58 | | |
58 | 59 | | |
| |||
80 | 81 | | |
81 | 82 | | |
82 | 83 | | |
83 | | - | |
84 | | - | |
85 | | - | |
86 | | - | |
87 | | - | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
88 | 91 | | |
89 | 92 | | |
90 | 93 | | |
| |||
235 | 238 | | |
236 | 239 | | |
237 | 240 | | |
238 | | - | |
239 | | - | |
| 241 | + | |
240 | 242 | | |
241 | 243 | | |
242 | 244 | | |
| |||
246 | 248 | | |
247 | 249 | | |
248 | 250 | | |
249 | | - | |
250 | | - | |
| 251 | + | |
251 | 252 | | |
252 | 253 | | |
253 | 254 | | |
| |||
257 | 258 | | |
258 | 259 | | |
259 | 260 | | |
260 | | - | |
261 | | - | |
| 261 | + | |
262 | 262 | | |
263 | 263 | | |
264 | 264 | | |
| |||
279 | 279 | | |
280 | 280 | | |
281 | 281 | | |
282 | | - | |
283 | | - | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
284 | 287 | | |
285 | 288 | | |
286 | 289 | | |
| |||
355 | 358 | | |
356 | 359 | | |
357 | 360 | | |
358 | | - | |
359 | | - | |
360 | | - | |
361 | | - | |
362 | | - | |
363 | | - | |
364 | | - | |
365 | | - | |
366 | | - | |
367 | | - | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
368 | 373 | | |
369 | | - | |
370 | | - | |
371 | | - | |
372 | | - | |
373 | | - | |
374 | 374 | | |
| 375 | + | |
| 376 | + | |
| 377 | + | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
| 381 | + | |
375 | 382 | | |
376 | 383 | | |
377 | 384 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
14 | | - | |
15 | | - | |
16 | | - | |
17 | | - | |
18 | | - | |
19 | | - | |
20 | | - | |
21 | | - | |
22 | | - | |
23 | | - | |
24 | | - | |
25 | | - | |
26 | | - | |
27 | | - | |
28 | | - | |
29 | | - | |
30 | | - | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
31 | 32 | | |
32 | 33 | | |
33 | | - | |
| 34 | + | |
| 35 | + | |
34 | 36 | | |
35 | 37 | | |
36 | 38 | | |
37 | | - | |
38 | | - | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
39 | 42 | | |
40 | 43 | | |
41 | 44 | | |
42 | 45 | | |
43 | 46 | | |
44 | 47 | | |
| 48 | + | |
| 49 | + | |
45 | 50 | | |
46 | 51 | | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
47 | 56 | | |
48 | 57 | | |
| 58 | + | |
49 | 59 | | |
50 | 60 | | |
51 | 61 | | |
Lines changed: 12 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
309 | 309 | | |
310 | 310 | | |
311 | 311 | | |
312 | | - | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
313 | 315 | | |
314 | 316 | | |
315 | 317 | | |
316 | 318 | | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
317 | 328 | | |
318 | 329 | | |
319 | 330 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
5 | | - | |
6 | | - | |
7 | | - | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
8 | 9 | | |
9 | 10 | | |
10 | 11 | | |
| |||
13 | 14 | | |
14 | 15 | | |
15 | 16 | | |
16 | | - | |
17 | | - | |
18 | | - | |
19 | | - | |
20 | | - | |
21 | | - | |
22 | | - | |
23 | | - | |
24 | | - | |
25 | | - | |
26 | | - | |
27 | | - | |
28 | | - | |
29 | | - | |
30 | | - | |
31 | | - | |
32 | | - | |
33 | | - | |
34 | | - | |
35 | | - | |
36 | | - | |
37 | | - | |
38 | | - | |
39 | | - | |
40 | | - | |
41 | | - | |
42 | | - | |
43 | | - | |
44 | | - | |
45 | | - | |
46 | | - | |
| 17 | + | |
47 | 18 | | |
Lines changed: 66 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
201 | 201 | | |
202 | 202 | | |
203 | 203 | | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
204 | 270 | | |
205 | 271 | | |
206 | 272 | | |
| |||
0 commit comments