Class GridAIController
- All Implemented Interfaces:
AIController
Grid with database data via LLM tool
calls. Attach it to an AIOrchestrator via
AIOrchestrator.Builder.withController(AIController) to expose its
tools to the LLM. The recommended system prompt is available from
getSystemPrompt().
var controller = new GridAIController(grid, databaseProvider);
AIOrchestrator orchestrator = AIOrchestrator
.builder(llmProvider, GridAIController.getSystemPrompt())
.withController(controller).withMessageList(messageList).build();
The grid automatically creates columns from query results with:
- Lazy loading with SQL
LIMIT/OFFSET - Built-in renderers for dates and numbers
- Right-alignment for numeric columns
- Resizable, sortable columns with auto-width
- Column grouping from dot-separated aliases
State changes requested by the LLM are deferred and applied in
onRequestCompleted(), avoiding partial state and multiple redraws
during a multi-tool LLM turn. The grid state is stored directly on the
Grid component, so it survives serialization.
Serialization: This controller is not serialized with the
orchestrator. After deserialization, create a new controller and restore
transient dependencies via reconnect(provider) .withController(controller).apply(). The grid
data can be captured via getState() and re-applied via
restoreState(GridState):
var controller = new GridAIController(grid, databaseProvider);
orchestrator.reconnect(llmProvider).withController(controller).apply();
if (savedState != null) {
controller.restoreState(savedState);
}
Register a listener via addStateChangeListener(SerializableConsumer)
to be notified when the grid state changes, for example to persist
getState() after each successful AI request.
- Author:
- Vaadin Ltd
- See Also:
-
Constructor Summary
ConstructorsConstructorDescriptionGridAIController(com.vaadin.flow.component.grid.Grid<Map<String, Object>> grid, DatabaseProvider databaseProvider) Creates a new grid AI controller. -
Method Summary
Modifier and TypeMethodDescriptioncom.vaadin.flow.shared.RegistrationaddStateChangeListener(com.vaadin.flow.function.SerializableConsumer<GridState> listener) Adds a listener that is notified when the grid state changes after an AI request completes successfully.getState()Returns the current grid state for persistence, ornullif no data has been loaded yet.static StringReturns the recommended system prompt for grid data display capabilities.getTools()Returns the tools this controller provides to the LLM.voidCalled by the orchestrator when an LLM request cycle has completed.voidrestoreState(GridState state) Restores a previously saved grid state.
-
Constructor Details
-
GridAIController
public GridAIController(com.vaadin.flow.component.grid.Grid<Map<String, Object>> grid, DatabaseProvider databaseProvider) Creates a new grid AI controller.- Parameters:
grid- the grid to populate, notnulldatabaseProvider- the database provider for schema and query execution, notnull
-
-
Method Details
-
getSystemPrompt
Returns the recommended system prompt for grid data display capabilities. Pass this toAIOrchestrator.builder(LLMProvider, String)so the LLM follows the intended tool-calling workflow.- Returns:
- the system prompt text
-
getTools
Description copied from interface:AIControllerReturns the tools this controller provides to the LLM.Tools are functions that the AI can call to perform actions. Each tool should have a clear name, description, and parameter schema.
- Specified by:
getToolsin interfaceAIController- Returns:
- list of tools, or empty list if controller provides no tools
-
onRequestCompleted
public void onRequestCompleted()Description copied from interface:AIControllerCalled by the orchestrator when an LLM request cycle has completed.This method is invoked after all tool executions for a given user request have finished and the LLM has generated its final response. Controllers can use this callback to perform deferred operations, such as rendering UI updates or committing state changes.
- Specified by:
onRequestCompletedin interfaceAIController
-
getState
Returns the current grid state for persistence, ornullif no data has been loaded yet.- Returns:
- the current state, or
null
-
restoreState
Restores a previously saved grid state. Re-executes the stored query and renders the grid.Does not fire state change listeners.
- Parameters:
state- the state to restore, notnull
-
addStateChangeListener
public com.vaadin.flow.shared.Registration addStateChangeListener(com.vaadin.flow.function.SerializableConsumer<GridState> listener) Adds a listener that is notified when the grid state changes after an AI request completes successfully. This is typically used to persist the grid state — for example by callinggetState()and saving the result so that it can be reapplied withrestoreState(GridState)after deserialization.The listener is not fired by
restoreState(GridState).- Parameters:
listener- the listener, notnull- Returns:
- a registration for removing the listener
-