Commit 451e856
committed
feat: generate HITL form schema dynamically via LLM for guardrail escalations
When a guardrail fires and triggers an escalation, the agent's own LLM
now generates a HitlSchema from the full conversation context —
system prompt, user request, and the offending tool call — using
`model.with_structured_output(HitlSchema)`.
The generated schema travels inline with the QuickForm task request
(via `create_quickform_async`). No pre-deployed Action App is required.
Implementation:
- `EscalateAction` (agent graph path) gains an optional `model` field.
When set, schema is generated dynamically; when absent, falls back to
the existing static Action App path for backward compatibility.
- `create_agent` injects the model into any `EscalateAction` in the
guardrails list before wiring subgraphs — no API change for callers.
- Middleware `EscalateAction` is unchanged (no state.messages access).
Depends on: UiPath/uipath-python#1737 (HitlSchema types + QuickForm dispatch)1 parent 6f3a705 commit 451e856
3 files changed
Lines changed: 63 additions & 9 deletions
File tree
- src/uipath_langchain
- agent
- guardrails/actions
- react
- guardrails
Lines changed: 54 additions & 9 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
| 4 | + | |
4 | 5 | | |
5 | 6 | | |
| 7 | + | |
6 | 8 | | |
7 | 9 | | |
| 10 | + | |
8 | 11 | | |
9 | 12 | | |
10 | 13 | | |
11 | 14 | | |
| 15 | + | |
12 | 16 | | |
13 | 17 | | |
14 | 18 | | |
| |||
28 | 32 | | |
29 | 33 | | |
30 | 34 | | |
| 35 | + | |
31 | 36 | | |
32 | 37 | | |
33 | 38 | | |
| |||
40 | 45 | | |
41 | 46 | | |
42 | 47 | | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
43 | 65 | | |
44 | 66 | | |
45 | 67 | | |
| |||
54 | 76 | | |
55 | 77 | | |
56 | 78 | | |
| 79 | + | |
57 | 80 | | |
58 | 81 | | |
59 | 82 | | |
60 | 83 | | |
61 | | - | |
| 84 | + | |
| 85 | + | |
62 | 86 | | |
63 | 87 | | |
64 | 88 | | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
65 | 93 | | |
66 | 94 | | |
67 | 95 | | |
68 | 96 | | |
69 | 97 | | |
| 98 | + | |
70 | 99 | | |
71 | 100 | | |
72 | 101 | | |
| |||
211 | 240 | | |
212 | 241 | | |
213 | 242 | | |
214 | | - | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
215 | 247 | | |
216 | | - | |
217 | | - | |
218 | | - | |
219 | | - | |
220 | | - | |
221 | | - | |
222 | | - | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
223 | 268 | | |
224 | 269 | | |
225 | 270 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
120 | 120 | | |
121 | 121 | | |
122 | 122 | | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
123 | 131 | | |
124 | 132 | | |
125 | 133 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
58 | 58 | | |
59 | 59 | | |
60 | 60 | | |
| 61 | + | |
61 | 62 | | |
62 | 63 | | |
63 | 64 | | |
| |||
0 commit comments