Skip to content

Add Chat - Custom AI Assistant demo Vue - #35267

Open
16adianay wants to merge 4 commits into
DevExpress:feature/demo_custom_AI_assistantfrom
16adianay:feature/demo_custom_AI_assistant_Vue
Open

16adianay wants to merge 4 commits into
DevExpress:feature/demo_custom_AI_assistantfrom
16adianay:feature/demo_custom_AI_assistant_Vue

Conversation

@16adianay

Copy link
Copy Markdown
Contributor

No description provided.

@16adianay 16adianay self-assigned this Sep 17, 2026
@16adianay
16adianay requested a review from a team as a code owner September 17, 2026 15:14
@16adianay 16adianay added the 26_2 label Sep 17, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Unbounded requests, stale asynchronous updates, filter corruption, and concurrent actions can produce incorrect behavior.

Get a fresh assessment by requesting another Copilot review.

Pull request overview

Adds a Vue Custom AI Assistant demo that routes chat requests to an employee form or task grid.

Changes:

  • Adds the Vue UI, sample data, and styling.
  • Implements AI request routing and form/grid commands.
  • Adds chat suggestions, status messages, and retry handling.
File summaries
File Description
apps/demos/Demos/Chat/CustomAIAssistant/Vue/types.ts Defines shared demo types.
apps/demos/Demos/Chat/CustomAIAssistant/Vue/TaskGrid.vue Displays and filters tasks.
apps/demos/Demos/Chat/CustomAIAssistant/Vue/index.ts Mounts the Vue application.
apps/demos/Demos/Chat/CustomAIAssistant/Vue/index.html Provides the demo host page.
apps/demos/Demos/Chat/CustomAIAssistant/Vue/gridCommands.ts Implements AI-driven grid operations.
apps/demos/Demos/Chat/CustomAIAssistant/Vue/formCommands.ts Implements form clearing and smart paste.
apps/demos/Demos/Chat/CustomAIAssistant/Vue/EmployeeForm.vue Renders the employee form.
apps/demos/Demos/Chat/CustomAIAssistant/Vue/data.ts Supplies configuration and sample data.
apps/demos/Demos/Chat/CustomAIAssistant/Vue/chatRouter.ts Classifies and routes chat requests.
apps/demos/Demos/Chat/CustomAIAssistant/Vue/App.vue Composes the demo components.
apps/demos/Demos/Chat/CustomAIAssistant/Vue/aiService.ts Integrates the AI service.
apps/demos/Demos/Chat/CustomAIAssistant/Vue/AiAssistant.vue Implements the assistant popup and chat.
Review details
  • Files reviewed: 12/12 changed files
  • Comments generated: 10
  • Review effort level: Balanced

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread apps/demos/Demos/Chat/CustomAIAssistant/Vue/aiService.ts
Comment thread apps/demos/Demos/Chat/CustomAIAssistant/Vue/AiAssistant.vue
Comment thread apps/demos/Demos/Chat/CustomAIAssistant/Vue/AiAssistant.vue
Comment thread apps/demos/Demos/Chat/CustomAIAssistant/Vue/App.vue
Comment thread apps/demos/Demos/Chat/CustomAIAssistant/Vue/EmployeeForm.vue
Comment thread apps/demos/Demos/Chat/CustomAIAssistant/Vue/chatRouter.ts
Comment thread apps/demos/Demos/Chat/CustomAIAssistant/Vue/chatRouter.ts
Comment on lines +90 to +96
const timeoutId = setTimeout(() => {
timedOut = true;
finish({
status: 'failure',
message: "I couldn't process your request. Please try rephrasing it.",
});
}, SMART_PASTE_TIMEOUT_MS);
Comment on lines +17 to +34
return Array.isArray(filterValue[0])
? (filterValue as unknown[]).filter((item): item is FilterCondition => Array.isArray(item))
: [filterValue as FilterCondition];
}

export function combineFilterConditions(
existingFilterValue: unknown,
newCondition: FilterCondition,
): GridFilterValue {
const [newColumn, newOperator] = newCondition;
const conditions = getFilterConditions(existingFilterValue).filter(
([column, operator]) => column !== newColumn || operator !== newOperator,
);
conditions.push(newCondition);

return conditions.length === 1
? conditions[0]
: conditions.flatMap((condition, index) => (index === 0 ? [condition] : ['and' as const, condition]));
Comment on lines +89 to +94
if (isDateColumn && typeof value === 'string') {
const parsedDate = new Date(value);
if (!Number.isNaN(parsedDate.getTime())) {
value = parsedDate;
}
}
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Diana Gromova <72144169+16adianay@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants