Commit 46ad135
authored
Per-chat reasoning effort in contextual sheet (#8674)
Task/Issue URL:
https://app.asana.com/1/137249556945/project/1212810093780571/task/1215062229903137?focus=true
### Description
Wires the contextual Duck.ai sheet into the per-chat reasoning flow
introduced by #8666 and fixes two correctness bugs
+ Minor cleanup in `ReasoningModePickerViewModel`
### Steps to test this PR
_Per-chat scope restored on reopen_
- [ ] Start a chat in the contextual sheet on tab A; pick a non-default
model and reasoning effort; submit a prompt.
- [ ] Close the contextual sheet.
- [ ] Open new duck ai on another tab or submit a prompt via the native
input field using a new model (global default changes)
- [ ] Reopen the contextual sheet on tab A (within the session window).
Verify the picker reflects the reasoning effort, not the global default)
- [ ] Submit another prompt; confirm that the submission carries the
chat's modelId and reasoningEffort.
- [ ] Open another tab and start a new chat in the contextual sheet on
tab B
- [ ] Switching between tabs properly restore the reasoning effort of
the corresponding chat.
_Globals untouched_
- [ ] After any per-chat submission above, dismiss the sheet and open
Duck.ai from the address bar (or a fresh tab). Verify your global
defaults are unchanged.
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> **Medium Risk**
> Medium risk because it changes contextual sheet state management and
URL/chat-id tracking, which can affect session restore behavior and what
model/reasoning settings get applied to submissions.
>
> **Overview**
> Wires the contextual Duck.ai sheet to a **per-chat** identifier by
extracting `chatID` from the webview URL and exposing it as a
`StateFlow` on `DuckChatContextualViewModel`.
>
> The contextual native input widget now receives this `chatIdFlow` (via
`ContextualNativeInputManager.init`) and binds it into the native-input
state, enabling chat-scoped reasoning/model selection to follow the
active chat across sheet reopen/tab switches. The view model centralizes
URL/chat-id updates via `setSheetUrl`/`clearSheetUrl` and adds tests to
ensure `chatId` is set/cleared correctly; `ReasoningModePickerViewModel`
is lightly refactored to use a single snapshot of `modelState`, with
tests adjusted accordingly.
>
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
666691b. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->1 parent f89c378 commit 46ad135
6 files changed
Lines changed: 108 additions & 12 deletions
File tree
- duckchat/duckchat-impl/src
- main/java/com/duckduckgo/duckchat/impl
- contextual
- ui/nativeinput/views
- test/kotlin/com/duckduckgo/duckchat/impl
- contextual
- ui
Lines changed: 6 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
30 | 30 | | |
31 | 31 | | |
32 | 32 | | |
| 33 | + | |
33 | 34 | | |
34 | 35 | | |
35 | 36 | | |
| |||
43 | 44 | | |
44 | 45 | | |
45 | 46 | | |
| 47 | + | |
46 | 48 | | |
47 | 49 | | |
48 | 50 | | |
| |||
68 | 70 | | |
69 | 71 | | |
70 | 72 | | |
| 73 | + | |
71 | 74 | | |
72 | 75 | | |
73 | 76 | | |
| |||
77 | 80 | | |
78 | 81 | | |
79 | 82 | | |
80 | | - | |
| 83 | + | |
81 | 84 | | |
82 | 85 | | |
83 | 86 | | |
| |||
113 | 116 | | |
114 | 117 | | |
115 | 118 | | |
| 119 | + | |
116 | 120 | | |
117 | 121 | | |
118 | 122 | | |
119 | 123 | | |
120 | 124 | | |
| 125 | + | |
121 | 126 | | |
122 | 127 | | |
123 | 128 | | |
| |||
Lines changed: 1 addition & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
433 | 433 | | |
434 | 434 | | |
435 | 435 | | |
| 436 | + | |
436 | 437 | | |
437 | 438 | | |
438 | 439 | | |
| |||
Lines changed: 24 additions & 5 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
80 | 80 | | |
81 | 81 | | |
82 | 82 | | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
83 | 88 | | |
84 | 89 | | |
85 | 90 | | |
| |||
172 | 177 | | |
173 | 178 | | |
174 | 179 | | |
| 180 | + | |
175 | 181 | | |
176 | 182 | | |
177 | 183 | | |
| |||
182 | 188 | | |
183 | 189 | | |
184 | 190 | | |
| 191 | + | |
185 | 192 | | |
186 | 193 | | |
187 | 194 | | |
| |||
233 | 240 | | |
234 | 241 | | |
235 | 242 | | |
| 243 | + | |
236 | 244 | | |
237 | 245 | | |
238 | 246 | | |
| |||
277 | 285 | | |
278 | 286 | | |
279 | 287 | | |
280 | | - | |
281 | 288 | | |
282 | 289 | | |
| 290 | + | |
283 | 291 | | |
284 | 292 | | |
285 | 293 | | |
| |||
636 | 644 | | |
637 | 645 | | |
638 | 646 | | |
| 647 | + | |
639 | 648 | | |
640 | 649 | | |
641 | 650 | | |
| |||
655 | 664 | | |
656 | 665 | | |
657 | 666 | | |
658 | | - | |
659 | | - | |
660 | | - | |
661 | | - | |
| 667 | + | |
| 668 | + | |
| 669 | + | |
| 670 | + | |
| 671 | + | |
| 672 | + | |
| 673 | + | |
| 674 | + | |
| 675 | + | |
| 676 | + | |
| 677 | + | |
| 678 | + | |
| 679 | + | |
| 680 | + | |
662 | 681 | | |
663 | 682 | | |
664 | 683 | | |
| |||
Lines changed: 4 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
121 | 121 | | |
122 | 122 | | |
123 | 123 | | |
| 124 | + | |
124 | 125 | | |
125 | | - | |
126 | | - | |
| 126 | + | |
| 127 | + | |
127 | 128 | | |
128 | 129 | | |
129 | 130 | | |
| |||
138 | 139 | | |
139 | 140 | | |
140 | 141 | | |
141 | | - | |
| 142 | + | |
142 | 143 | | |
143 | 144 | | |
144 | 145 | | |
| |||
Lines changed: 61 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1201 | 1201 | | |
1202 | 1202 | | |
1203 | 1203 | | |
| 1204 | + | |
| 1205 | + | |
| 1206 | + | |
| 1207 | + | |
| 1208 | + | |
| 1209 | + | |
| 1210 | + | |
| 1211 | + | |
| 1212 | + | |
| 1213 | + | |
| 1214 | + | |
| 1215 | + | |
| 1216 | + | |
| 1217 | + | |
| 1218 | + | |
| 1219 | + | |
| 1220 | + | |
| 1221 | + | |
| 1222 | + | |
| 1223 | + | |
| 1224 | + | |
| 1225 | + | |
| 1226 | + | |
| 1227 | + | |
| 1228 | + | |
| 1229 | + | |
| 1230 | + | |
| 1231 | + | |
| 1232 | + | |
| 1233 | + | |
| 1234 | + | |
| 1235 | + | |
| 1236 | + | |
| 1237 | + | |
| 1238 | + | |
| 1239 | + | |
| 1240 | + | |
| 1241 | + | |
| 1242 | + | |
| 1243 | + | |
| 1244 | + | |
| 1245 | + | |
| 1246 | + | |
| 1247 | + | |
| 1248 | + | |
| 1249 | + | |
| 1250 | + | |
| 1251 | + | |
| 1252 | + | |
| 1253 | + | |
| 1254 | + | |
| 1255 | + | |
| 1256 | + | |
| 1257 | + | |
| 1258 | + | |
| 1259 | + | |
| 1260 | + | |
| 1261 | + | |
| 1262 | + | |
| 1263 | + | |
| 1264 | + | |
1204 | 1265 | | |
1205 | 1266 | | |
1206 | 1267 | | |
| |||
Lines changed: 12 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
263 | 263 | | |
264 | 264 | | |
265 | 265 | | |
266 | | - | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
267 | 270 | | |
268 | 271 | | |
269 | 272 | | |
| |||
280 | 283 | | |
281 | 284 | | |
282 | 285 | | |
283 | | - | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
284 | 290 | | |
285 | 291 | | |
286 | 292 | | |
| |||
295 | 301 | | |
296 | 302 | | |
297 | 303 | | |
298 | | - | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
299 | 308 | | |
300 | 309 | | |
301 | 310 | | |
| |||
0 commit comments