A modular AI-powered Vue.js component suite that enhances your applications with intelligent capabilities:
@aivue/chatbot Multi-provider AI chat widget | @aivue/autosuggest Smart autosuggest with semantic ranking | @aivue/smartform AI-enhanced forms with dynamic validation | @aivue/image-caption AI-powered image captioning with OpenAI Vision | @aivue/core Core AI functionality for Vue.js components |
# Install the core package npm install @aivue/core # Install component packages as needed npm install @aivue/chatbot npm install @aivue/autosuggest npm install @aivue/smartform npm install @aivue/image-caption npm install @aivue/analytics # Or install all packages at once npm install @aivue/core @aivue/chatbot @aivue/autosuggest @aivue/smartform @aivue/image-caption @aivue/analytics | Key Benefits:
|
- Create a
.env
file in your project root (this file will be automatically excluded from Git) - Add your API keys for the providers you want to use:
# OpenAI API Key VITE_OPENAI_API_KEY=your_openai_api_key_here # Claude API Key (optional) VITE_CLAUDE_API_KEY=your_claude_api_key_here # Gemini API Key (optional) VITE_GEMINI_API_KEY=your_gemini_api_key_here # HuggingFace API Key (optional) VITE_HUGGINGFACE_API_KEY=your_huggingface_api_key_here # DeepSeek API Key (optional) VITE_DEEPSEEK_API_KEY=your_deepseek_api_key_here
Note: If you don't have API keys, the components will still work using the fallback provider which simulates AI responses.
vueai/ ├── packages/ │ ├── core/ # @aivue/core │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── providers/ │ │ │ ├── openai.ts │ │ │ ├── claude.ts │ │ │ ├── gemini.ts │ │ │ ├── huggingface.ts │ │ │ ├── ollama.ts │ │ │ ├── deepseek.ts │ │ │ └── fallback.ts │ ├── chatbot/ # @aivue/chatbot │ ├── autosuggest/ # @aivue/autosuggest │ ├── smartform/ # @aivue/smartform │ ├── image-caption/ # @aivue/image-caption │ └── analytics/ # @aivue/analytics └── package.json # Root package.json with workspace configuration
- ✅ Multi-provider support (OpenAI, Claude, Gemini, HuggingFace, Ollama, DeepSeek)
- ✅ Automatic fallback when API keys aren't available
- ✅ Streaming responses with Markdown support
- ✅ File upload, PDF parsing, history tracking
- ✅ "Fix with AI" feature for automatic corrections
<template> <AiChatWindow :client="aiClient" title="AI Assistant" placeholder="Ask me anything..." :show-avatars="true" theme="light" :streaming="true" :markdown="true" system-prompt="You are a helpful AI assistant." /> </template> <script setup> import { AIClient } from '@aivue/core'; import { AiChatWindow } from '@aivue/chatbot'; import '@aivue/chatbot/style.css'; const aiClient = new AIClient({ provider: 'openai', apiKey: import.meta.env.VITE_OPENAI_API_KEY, model: 'gpt-4o' }); </script>
- ✅ AI-powered results with semantic sort
- ✅ Multi-provider support with automatic fallback
- ✅ Contextual suggestions based on domain
- ✅ Customizable UI and behavior
<template> <AiAutosuggest :client="aiClient" v-model="query" placeholder="Search..." :debounce="300" :context="'Vue.js components and libraries'" @select="handleSelect" /> </template> <script setup> import { ref } from 'vue'; import { AIClient } from '@aivue/core'; import { AiAutosuggest } from '@aivue/autosuggest'; const query = ref(''); const aiClient = new AIClient({ provider: 'openai', apiKey: import.meta.env.VITE_OPENAI_API_KEY, model: 'gpt-4o' }); function handleSelect(suggestion) { console.log('Selected:', suggestion); } </script>
- ✅ AI-powered validation + dynamic healing
- ✅ Multi-provider support with automatic fallback
- ✅ Intelligent form field suggestions
- ✅ "Fix with AI" feature for automatic corrections
<template> <AiSmartForm :client="aiClient" :schema="formSchema" validation="ai" @submit="handleSubmit" /> </template> <script setup> import { ref } from 'vue'; import { AIClient } from '@aivue/core'; import { AiSmartForm } from '@aivue/smartform'; const aiClient = new AIClient({ provider: 'openai', apiKey: import.meta.env.VITE_OPENAI_API_KEY }); const formSchema = ref({ fields: [ { name: 'email', label: 'Email', type: 'email', required: true }, { name: 'description', label: 'Description', type: 'textarea', required: true, minLength: 50 } ] }); function handleSubmit(data) { console.log('Form submitted:', data); } </script>
- ✅ OpenAI Vision models (GPT-4o, GPT-4o Mini, GPT-4 Turbo)
- ✅ Drag & drop image upload with preview
- ✅ URL support for remote images
- ✅ Batch processing for multiple images
- ✅ History tracking and export functionality
<template> <AiImageCaption :api-key="apiKey" :model="'gpt-4o'" @caption-generated="handleCaption" @caption-error="handleError" /> </template> <script setup> import { AiImageCaption } from '@aivue/image-caption'; import '@aivue/image-caption/dist/image-caption.css'; const apiKey = import.meta.env.VITE_OPENAI_API_KEY; function handleCaption(result) { console.log('Generated caption:', result.caption); } function handleError(error) { console.error('Caption error:', error); } </script>
- ✅ Real-time analytics and insights dashboard
- ✅ AI-powered conversation analysis
- ✅ Performance monitoring and error tracking
- ✅ Beautiful charts and visualizations
- ✅ Privacy-first with local storage by default
<template> <div> <!-- Analytics Dashboard --> <AiAnalyticsDashboard :ai-client="aiClient" :show-conversation-analytics="true" /> <!-- Track interactions automatically --> <button v-analytics="{ component: 'my-app', action: 'click' }"> Click me </button> </div> </template> <script setup> import { AiAnalyticsDashboard, useAnalytics, vAnalytics } from '@aivue/analytics'; import { AIClient } from '@aivue/core'; const aiClient = new AIClient({ provider: 'openai', apiKey: import.meta.env.VITE_OPENAI_API_KEY }); // Set up analytics const analytics = useAnalytics({ config: { enabled: true, trackInteractions: true }, aiClient }); </script>
Our core package provides a unified interface for working with multiple AI providers, complete with an automatic fallback mechanism that ensures your components work even without API keys.
- ✅ Multi-provider support (OpenAI, Claude, Gemini, HuggingFace, Ollama, DeepSeek)
- ✅ Bearer token authentication for remote Ollama instances
- ✅ Automatic fallback when API keys aren't available
- ✅ Unified API for chat, embeddings, and validation
- ✅ TypeScript support with comprehensive type definitions
import { AIClient } from '@aivue/core'; // Create a client with your preferred provider const client = new AIClient({ provider: 'openai', // or 'claude', 'gemini', 'huggingface', 'ollama', 'deepseek' apiKey: import.meta.env.VITE_OPENAI_API_KEY, // Optional - falls back to simulation if missing model: 'gpt-4o' // Optional - uses provider's default if missing }); // Chat functionality const response = await client.chat([ { role: 'user', content: 'Hello, can you help me with Vue.js?' } ]); // Embeddings for semantic search const embeddings = await client.embeddings('How do I create a component?'); // Form field validation const validation = await client.validateFormField( 'email', 'user@example', ['email', 'required'] ); // Complete text (for autosuggest) const completion = await client.complete('How do I install Vue', { maxTokens: 100 });
All VueAI components include an intelligent fallback system when API keys aren't available:
<ul class="feature-list"> <li>🔍 Automatically detects missing API keys</li> <li>🤖 Provides simulated responses that match the expected shape</li> <li>💡 Generates semantically reasonable suggestions</li> <li>🚀 Delivers smooth user experience during development</li> <li>🔄 Works with all supported providers seamlessly</li> </ul>
npm install vitest @vue/test-utils --save-dev
// chatbot/tests/AiChatWindow.spec.ts test('sends messages', async () => { const wrapper = mount(AiChatWindow); await wrapper.find('input').setValue('Hi'); await wrapper.find('input').trigger('keyup.enter'); expect(wrapper.emitted()).toHaveProperty('send'); });
# Build all packages npm run build:packages # Publish packages npm publish --access public --workspace @aivue/core npm publish --access public --workspace @aivue/chatbot npm publish --access public --workspace @aivue/autosuggest npm publish --access public --workspace @aivue/smartform npm publish --access public --workspace @aivue/image-caption npm publish --access public --workspace @aivue/analytics # Or use the publish script npm run publish:packages
MIT © 2025 Bharatkumar Subramanian