2.7 KiB
2.7 KiB
React Mode (Plan–Act–Observe–Refine)
This introduces a compact iterative workflow that replaces bulk action plans with a tight loop:
- Plan (select): Model selects exactly one action
- Act (execute): Host requests only parameters for that action and executes
- Observe (summarize): Host returns a compact observation object
- Refine (decide): Model decides whether to continue or stop
How to enable it
Set the mode on ChatWorkflow (persisted in DB / passed through the API):
workflowMode: string– "Actionplan" (legacy) or "React" (iterative)maxSteps: number– maximum iterations per task in React mode (default 5)
When workflowMode="Actionplan", the legacy batch action planning path is used.
Data models
Defined in gateway/modules/interfaces/interfaceChatModel.py:
ActionSelection:{ method: str, name: str }ActionParameters:{ parameters: dict }Observation:{ success: bool, resultLabel: str, documentsCount: int, previews: [{name,mime,snippet}], notes: [str] }TaskContextadditions:reactMode: bool,maxSteps: intChatWorkflowadditions:workflowMode: str,maxSteps: int
Prompts
Defined in gateway/modules/chat/handling/promptFactory.py:
createActionSelectionPrompt(context)→ returns one actioncreateActionParameterPrompt(context, selected_action)→ returns parameters onlycreateRefinementPrompt(context, observation)→ returns{ decision: continue|stop, reason }
Execution flow
Implemented in gateway/modules/chat/handling/handlingTasks.py:
plan_select(context)→{ action: { method, name } }act_execute(context, selection, task_step, workflow, step)→ executes one action and returnsActionResultobserve_build(action_result)→ buildsObservationrefine_decide(context, observation)→{ decision, reason }- Integrated loop lives inside
executeTask(...)whencontext.reactModeis true
Iteration control helper in gateway/modules/chat/handling/executionState.py:
should_continue(observation, review_dict, current_step, max_steps)
Observation format
Compact, machine-friendly, with small previews only:
{
success: boolean,
resultLabel: string,
documentsCount: number,
previews: [ { name, mime, snippet } ],
notes: [ string ]
}
Telemetry
Each iteration logs duration (seconds) to workflow logs. No specific token metrics required.
Backward compatibility
- Legacy planning/execution remains the default when
workflowMode="Actionplan". - No breaking changes to action or document structures.
Notes
- Document routing uses deterministic
resultLabel:round{r}_task{t}_action{a}_... - Previews are capped to ≤5 items and keep
name,mime, and a shortsnippet.