Skip to content

Conversation

@priley86
Copy link
Contributor

@priley86 priley86 commented Sep 19, 2025

Adds HITL example to the react-hono-ai-sdk example using latest SDK5 style interrupt handling:
https://ai-sdk.dev/cookbook/next/human-in-the-loop#intercept-tool-call

Tested both stream patterns to still work (both using new HITL interrupt flow and our existing Auth0 Interrupt / Error Flow).

Human In the Loop / Approval Tool

Screenshot 2025-09-19 at 2 08 41 PM

Stream flow:

data: {"type":"start","messageId":"dzHtkI7Fp1b4oNcX"}

data: {"type":"start-step"}

data: {"type":"tool-input-start","toolCallId":"call_ZO6aElCKAqgLL0vlYjHizClV","toolName":"callProtectedApi"}

data: {"type":"tool-input-delta","toolCallId":"call_ZO6aElCKAqgLL0vlYjHizClV","inputTextDelta":"{\""}

data: {"type":"tool-input-delta","toolCallId":"call_ZO6aElCKAqgLL0vlYjHizClV","inputTextDelta":"reason"}

data: {"type":"tool-input-delta","toolCallId":"call_ZO6aElCKAqgLL0vlYjHizClV","inputTextDelta":"\":\""}

data: {"type":"tool-input-delta","toolCallId":"call_ZO6aElCKAqgLL0vlYjHizClV","inputTextDelta":"User"}

data: {"type":"tool-input-delta","toolCallId":"call_ZO6aElCKAqgLL0vlYjHizClV","inputTextDelta":" requested"}

data: {"type":"tool-input-delta","toolCallId":"call_ZO6aElCKAqgLL0vlYjHizClV","inputTextDelta":" access"}

data: {"type":"tool-input-delta","toolCallId":"call_ZO6aElCKAqgLL0vlYjHizClV","inputTextDelta":" to"}

data: {"type":"tool-input-delta","toolCallId":"call_ZO6aElCKAqgLL0vlYjHizClV","inputTextDelta":" their"}

data: {"type":"tool-input-delta","toolCallId":"call_ZO6aElCKAqgLL0vlYjHizClV","inputTextDelta":" protected"}

data: {"type":"tool-input-delta","toolCallId":"call_ZO6aElCKAqgLL0vlYjHizClV","inputTextDelta":" data"}

data: {"type":"tool-input-delta","toolCallId":"call_ZO6aElCKAqgLL0vlYjHizClV","inputTextDelta":".\""}

data: {"type":"tool-input-delta","toolCallId":"call_ZO6aElCKAqgLL0vlYjHizClV","inputTextDelta":"}"}

data: {"type":"tool-input-available","toolCallId":"call_ZO6aElCKAqgLL0vlYjHizClV","toolName":"callProtectedApi","input":{"reason":"User requested access to their protected data."},"providerMetadata":{"openai":{"itemId":"fc_68cd869f33348193ae2c3b2a1e600c550b122712748fa03a"}}}

data: {"type":"finish-step"}

data: {"type":"finish"}

data: [DONE]
Screenshot 2025-09-19 at 12 21 28 PM

After approval:

data: {"type":"tool-output-available","toolCallId":"call_ZO6aElCKAqgLL0vlYjHizClV","output":"Protected API data retrieved for google-oauth2|102728881944301552797. Reason: User requested access to their protected data."}

data: {"type":"start","messageId":"dzHtkI7Fp1b4oNcX"}

data: {"type":"start-step"}

data: {"type":"text-start","id":"msg_68cd86a5a6fc81938bee43cbc78bf8a00b122712748fa03a","providerMetadata":{"openai":{"itemId":"msg_68cd86a5a6fc81938bee43cbc78bf8a00b122712748fa03a"}}}

data: {"type":"text-delta","id":"msg_68cd86a5a6fc81938bee43cbc78bf8a00b122712748fa03a","delta":"I've"}

data: {"type":"text-delta","id":"msg_68cd86a5a6fc81938bee43cbc78bf8a00b122712748fa03a","delta":" retrieved"}

data: {"type":"text-delta","id":"msg_68cd86a5a6fc81938bee43cbc78bf8a00b122712748fa03a","delta":" your"}

data: {"type":"text-delta","id":"msg_68cd86a5a6fc81938bee43cbc78bf8a00b122712748fa03a","delta":" protected"}

data: {"type":"text-delta","id":"msg_68cd86a5a6fc81938bee43cbc78bf8a00b122712748fa03a","delta":" user"}

data: {"type":"text-delta","id":"msg_68cd86a5a6fc81938bee43cbc78bf8a00b122712748fa03a","delta":" data"}

data: {"type":"text-delta","id":"msg_68cd86a5a6fc81938bee43cbc78bf8a00b122712748fa03a","delta":"."}

data: {"type":"text-delta","id":"msg_68cd86a5a6fc81938bee43cbc78bf8a00b122712748fa03a","delta":" How"}

data: {"type":"text-delta","id":"msg_68cd86a5a6fc81938bee43cbc78bf8a00b122712748fa03a","delta":" would"}

data: {"type":"text-delta","id":"msg_68cd86a5a6fc81938bee43cbc78bf8a00b122712748fa03a","delta":" you"}

data: {"type":"text-delta","id":"msg_68cd86a5a6fc81938bee43cbc78bf8a00b122712748fa03a","delta":" like"}

data: {"type":"text-delta","id":"msg_68cd86a5a6fc81938bee43cbc78bf8a00b122712748fa03a","delta":" to"}

data: {"type":"text-delta","id":"msg_68cd86a5a6fc81938bee43cbc78bf8a00b122712748fa03a","delta":" proceed"}

data: {"type":"text-delta","id":"msg_68cd86a5a6fc81938bee43cbc78bf8a00b122712748fa03a","delta":"?"}

data: {"type":"text-end","id":"msg_68cd86a5a6fc81938bee43cbc78bf8a00b122712748fa03a"}

data: {"type":"finish-step"}

data: {"type":"finish"}

data: [DONE]

Auth0 Federated Connection Interrupt / Error Flow:

Screenshot 2025-09-19 at 2 08 58 PM

Stream flow:

data: {"type":"start","messageId":"jLLdeN0IHpXsp5Xr"}

data: {"type":"start-step"}

data: {"type":"tool-input-start","toolCallId":"call_5ztW3AIupLCB4FHXqvfAMOWC","toolName":"listUserCalendars"}

data: {"type":"tool-input-delta","toolCallId":"call_5ztW3AIupLCB4FHXqvfAMOWC","inputTextDelta":"{}"}

data: {"type":"tool-input-available","toolCallId":"call_5ztW3AIupLCB4FHXqvfAMOWC","toolName":"listUserCalendars","input":{},"providerMetadata":{"openai":{"itemId":"fc_68cd87d5dcd481958524ec3aea83e206038b14e935a25fcb"}}}

data: {"type":"tool-output-error","toolCallId":"call_5ztW3AIupLCB4FHXqvfAMOWC","errorText":"Authorization required to access the Federated Connection: google-oauth2"}

data: {"type":"finish-step"}

data: {"type":"finish"}

data: {"type":"error","errorText":"AUTH0_AI_INTERRUPTION:{\"name\":\"AUTH0_AI_INTERRUPT\",\"code\":\"FEDERATED_CONNECTION_ERROR\",\"behavior\":\"resume\",\"connection\":\"google-oauth2\",\"scopes\":[\"https://www.googleapis.com/auth/calendar.calendarlist.readonly\",\"https://www.googleapis.com/auth/calendar.events.readonly\"],\"requiredScopes\":[\"https://www.googleapis.com/auth/calendar.calendarlist.readonly\",\"https://www.googleapis.com/auth/calendar.events.readonly\"],\"message\":\"Authorization required to access the Federated Connection: google-oauth2\",\"toolCall\":{\"id\":\"call_5ztW3AIupLCB4FHXqvfAMOWC\",\"args\":{},\"name\":\"listUserCalendars\"}}"}

data: [DONE]
Screenshot 2025-09-19 at 2 09 15 PM

After Auth0 federated connection interrupt flow:

After step-up auth:
data: {"type":"start","messageId":"jLLdeN0IHpXsp5Xr"}

data: {"type":"start-step"}

data: {"type":"text-start","id":"msg_68cd880eb78481958674f0ce9e47c2af038b14e935a25fcb","providerMetadata":{"openai":{"itemId":"msg_68cd880eb78481958674f0ce9e47c2af038b14e935a25fcb"}}}

data: {"type":"text-delta","id":"msg_68cd880eb78481958674f0ce9e47c2af038b14e935a25fcb","delta":"Here"}

data: {"type":"text-delta","id":"msg_68cd880eb78481958674f0ce9e47c2af038b14e935a25fcb","delta":" are"}

data: {"type":"text-delta","id":"msg_68cd880eb78481958674f0ce9e47c2af038b14e935a25fcb","delta":" your"}

data: {"type":"text-delta","id":"msg_68cd880eb78481958674f0ce9e47c2af038b14e935a25fcb","delta":" available"}

data: {"type":"text-delta","id":"msg_68cd880eb78481958674f0ce9e47c2af038b14e935a25fcb","delta":" calendars"}

data: {"type":"text-delta","id":"msg_68cd880eb78481958674f0ce9e47c2af038b14e935a25fcb","delta":":\n\n"}

data: {"type":"text-delta","id":"msg_68cd880eb78481958674f0ce9e47c2af038b14e935a25fcb","delta":"1"}

data: {"type":"text-delta","id":"msg_68cd880eb78481958674f0ce9e47c2af038b14e935a25fcb","delta":"."}

data: {"type":"text-delta","id":"msg_68cd880eb78481958674f0ce9e47c2af038b14e935a25fcb","delta":" **"}

data: {"type":"text-delta","id":"msg_68cd880eb78481958674f0ce9e47c2af038b14e935a25fcb","delta":"H"}

data: {"type":"text-delta","id":"msg_68cd880eb78481958674f0ce9e47c2af038b14e935a25fcb","delta":"olidays"}

data: {"type":"text-delta","id":"msg_68cd880eb78481958674f0ce9e47c2af038b14e935a25fcb","delta":" in"}

data: {"type":"text-delta","id":"msg_68cd880eb78481958674f0ce9e47c2af038b14e935a25fcb","delta":" United"}

data: {"type":"text-delta","id":"msg_68cd880eb78481958674f0ce9e47c2af038b14e935a25fcb","delta":" States"}

data: {"type":"text-delta","id":"msg_68cd880eb78481958674f0ce9e47c2af038b14e935a25fcb","delta":"**"}

data: {"type":"text-delta","id":"msg_68cd880eb78481958674f0ce9e47c2af038b14e935a25fcb","delta":" ("}

data: {"type":"text-delta","id":"msg_68cd880eb78481958674f0ce9e47c2af038b14e935a25fcb","delta":"Reader"}

data: {"type":"text-delta","id":"msg_68cd880eb78481958674f0ce9e47c2af038b14e935a25fcb","delta":")\n"}

data: {"type":"text-delta","id":"msg_68cd880eb78481958674f0ce9e47c2af038b14e935a25fcb","delta":"2"}

data: {"type":"text-delta","id":"msg_68cd880eb78481958674f0ce9e47c2af038b14e935a25fcb","delta":"."}

data: {"type":"text-delta","id":"msg_68cd880eb78481958674f0ce9e47c2af038b14e935a25fcb","delta":" **"}

data: {"type":"text-delta","id":"msg_68cd880eb78481958674f0ce9e47c2af038b14e935a25fcb","delta":"dx"}

data: {"type":"text-delta","id":"msg_68cd880eb78481958674f0ce9e47c2af038b14e935a25fcb","delta":"-prod"}

data: {"type":"text-delta","id":"msg_68cd880eb78481958674f0ce9e47c2af038b14e935a25fcb","delta":"-exp"}

data: {"type":"text-delta","id":"msg_68cd880eb78481958674f0ce9e47c2af038b14e935a25fcb","delta":"-group"}

data: {"type":"text-delta","id":"msg_68cd880eb78481958674f0ce9e47c2af038b14e935a25fcb","delta":"**"}

...

data: {"type":"text-end","id":"msg_68cd880eb78481958674f0ce9e47c2af038b14e935a25fcb"}

data: {"type":"finish-step"}

data: {"type":"finish"}

data: [DONE]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants