A next-generation AI interface that goes beyond simple chat — orchestrate multiple AI models, build workflows, analyze documents, and collaborate in real-time.
Built with AI-Assisted Development: Complex projects like this can be built efficiently with proper planning and vibe coding. The UI was designed with Google AI Studio, and all features and functionality were developed using Google Antigravity IDE — proving that AI pair programming can deliver production-ready applications.
Fully AI-Generated Ecosystem: Not just the main app — the supporting Azure Python serverless functions (document processing), Python MCP server, Anthropic Claude proxy server, and even this README were all created through vibe coding. All source code is available across linked repositories, demonstrating end-to-end AI-assisted development.
Additional screnshots found here, Screenshots
- Node.js 20.x or higher
- npm 10.x or higher
- At least one AI API key (Gemini, Azure OpenAI, or Claude)
- Azure Cosmos DB account (for conversation persistence)
Want to try it out quickly? You can run with just a Gemini API key:
# 1. Clone the repository
git clone https://github.com/romayneeastmond/multimodel-llm-react-vite-concept.git
cd multimodel-llm-react-vite-concept
# 2. Install dependencies
npm install
# 3. Create minimal .env.local file
echo "GEMINI_API_KEY=your_gemini_api_key_here" > .env.local
# 4. Start the dev server
npm run devVisit http://localhost:3000 and start chatting with Gemini models!
⚠️ Note: Without Azure Cosmos DB configured, conversations won't persist and some features (collaboration, workflows) will be limited.
For the complete experience with all features enabled:
npm installCreate a .env.local file in the project root:
# ============================================
# REQUIRED - AI Models (at least one)
# ============================================
# Google Gemini (Free tier available)
GEMINI_API_KEY=your_gemini_key
# Azure OpenAI (Paid)
AZURE_API_KEY=your_azure_key
AZURE_ENDPOINT=https://your-endpoint.openai.azure.com
# Anthropic Claude (Paid, requires proxy)
CLAUDE_ENDPOINT=your_claude_proxy
# ============================================
# REQUIRED - Database (for persistence)
# ============================================
AZURE_COSMOS_ENDPOINT=https://your-cosmos.documents.azure.com:443/
AZURE_COSMOS_KEY=your_cosmos_key
AZURE_COSMOS_DB_ID=ConversationDB
# ============================================
# OPTIONAL - Document Processing
# ============================================
WEB_SCRAPER_ENDPOINT=your_scraper_endpoint
CONTENT_COMPARISON_ENDPOINT=your_comparison_endpoint
CONTENT_EXTRACTOR_ENDPOINT=your_extractor_endpoint
CONTENT_RESULTS_ENDPOINT=your_results_endpoint
CONTENT_RESULTS_CLAUSES_ENDPOINT=your_clauses_endpoint
CONTENT_RESULTS_EXTRACTIONS_ENDPOINT=your_extractions_endpoint
CONTENT_SUMMARIZATION_ENDPOINT=your_summarization_endpoint
CONTENT_TRANSLATION_ENDPOINT=your_translation_endpoint
AZURE_CACHE_ENDPOINT=your_cache_endpoint
# ============================================
# OPTIONAL - MSAL Authentication
# ============================================
# Enable Microsoft Entra ID (Azure AD) authentication
USE_MSAL=false
AZURE_AD_CLIENT_ID=your_application_client_id
AZURE_AD_TENANT_ID=your_tenant_id
AZURE_AD_REDIRECT_URI=http://localhost:3000
# ============================================
# OPTIONAL - MCP Server Configuration
# ============================================
MCP_SERVER_CONFIGS=your_mcp_server_configs_json
# ============================================
# OPTIONAL - SERP Api Configuration
# ============================================
SERP_API_KEY=your_serp_api_key_hereTo enable Microsoft Entra ID (formerly Azure Active Directory) authentication:
1. Register Application in Azure Portal:
- Go to Azure Portal → Microsoft Entra ID → App registrations
- Click New registration
- Configure:
- Name: Multi-Model Orchestrator (or your preferred name)
- Supported account types: Choose based on your needs
- Accounts in this organizational directory only (Single tenant)
- Accounts in any organizational directory (Multi-tenant)
- Accounts in any organizational directory and personal Microsoft accounts
- Redirect URI:
- Platform: Single-page application (SPA)
- URI:
http://localhost:3000(development) or your production URL
- Click Register
2. Configure Application Settings:
After registration, navigate to your app's page:
- Overview → Copy the Application (client) ID
- Overview → Copy the Directory (tenant) ID
- Authentication:
- Under Single-page application, ensure your redirect URI is listed
- Add additional redirect URIs for production (e.g.,
https://yourdomain.com) - Under Implicit grant and hybrid flows: Leave unchecked (not needed for SPA)
- Under Advanced settings → Allow public client flows: No
- API permissions (optional):
- The default
User.Readpermission is sufficient for basic authentication - Add additional permissions if needed for your use case
- The default
3. Update Environment Variables:
Add these to your .env.local file:
USE_MSAL=true
AZURE_AD_CLIENT_ID=your_application_client_id_from_step_2
AZURE_AD_TENANT_ID=your_tenant_id_from_step_2
AZURE_AD_REDIRECT_URI=http://localhost:30004. Update Vite Configuration:
The application is already configured to expose MSAL environment variables. No changes needed to vite.config.ts unless you want to customize.
5. Restart Development Server:
npm run devWhat Changes with MSAL Enabled:
✅ User Authentication: Users must sign in with Microsoft credentials
✅ Data Isolation: Each user's conversations, workflows, and settings are scoped to their account
✅ Logout Button: "Log Out" button appears in the sidebar footer
✅ No Default User: The default_user account is automatically disabled
✅ Persistent Sessions: User identity persists across browser refreshes
✅ Workflow Access Control: System workflows can be restricted to specific Entra AD Security Groups (Admin only)
Important Notes:
- When
USE_MSAL=true, unauthenticated users will see a sign-in screen - User data is partitioned by their Microsoft account name in Cosmos DB
- For production, update
AZURE_AD_REDIRECT_URIto match your domain - Multi-tenant apps require admin consent for certain permissions
Option A: Use Terraform (Recommended)
cd terraform
cp terraform.tfvars.example terraform.tfvars
# Edit terraform.tfvars with your Azure credentials
terraform init
terraform applyOption B: Manual Setup
- Create an Azure Cosmos DB account
- Create a database named
ConversationDB - Create these containers:
Chats(partition key:/userId)Workflows(partition key:/userId)Personas(partition key:/userId)PromptLibrary(partition key:/userId)DatabaseSources(partition key:/userId)SharedGroups(partition key:/groupId)
See terraform/README.md for detailed instructions.
Before running the application, you may want to customize the available AI models and MCP server configurations.
Edit src/config/constants.ts:
1. Customize Available Models
The AVAILABLE_MODELS array defines which models appear in the UI. Each model references a MultiModel enum value defined in src/types/index.ts.
export const AVAILABLE_MODELS = [
{
id: MultiModel.FLASH_3,
name: 'Gemini 3 Flash',
description: 'Fast, efficient for everyday tasks'
},
{
id: MultiModel.PRO_3,
name: 'Gemini 3 Pro',
description: 'High reasoning & complex coding'
},
{
id: MultiModel.AZURE_GPT_4_O,
name: 'Azure GPT-4o',
description: 'Azure OpenAI GPT-4 Omni model'
},
// Add or remove models as needed
];Model ID Format:
Model IDs in the MultiModel enum must follow provider-specific naming:
- Gemini models: Use
gemini-prefix (e.g.,gemini-3-flash-preview) - Azure models: Use
azure-prefix (e.g.,azure-gpt-4o) - Claude models: Use
claude-prefix (e.g.,claude-sonnet-4-5-20250929)
To add a new model:
-
Add the enum value in
src/types/index.ts:export enum MultiModel { // ... existing models AZURE_GPT_O1 = 'azure-gpt-o1', }
-
Add the model to
AVAILABLE_MODELSinsrc/config/constants.ts:{ id: MultiModel.AZURE_GPT_O1, name: 'Azure GPT-O1', description: 'New reasoning model' },
2. Configure MCP Servers
MCP (Model Context Protocol) servers extend the application with custom tools and functionality.
// Default: Load from environment variable
export const MCP_SERVER_CONFIGS: MCPServer[] =
JSON.parse(process.env.MCP_SERVER_CONFIGS || '[]');
// Example: Hardcode MCP servers (for development)
export const MCP_SERVER_CONFIGS: MCPServer[] = [
{
id: 'python-mcp-example',
name: 'Python MCP Example',
url: 'https://your-server.azurewebsites.net/mcp',
tools: [], // Tools are auto-discovered at runtime
},
{
id: 'weather-mcp',
name: 'Weather Data Server',
url: 'https://your-weather-mcp.com/api',
tools: [],
}
];MCP Server Configuration Options:
-
Via Environment Variable (Recommended for production):
MCP_SERVER_CONFIGS=[{"id":"mcp-1","name":"My Server","url":"https://...","tools":[]}]
-
Via Constants File (Easier for development): Uncomment and modify the example in
constants.ts
Important Notes:
✅ Model Display Names: The name field in AVAILABLE_MODELS is user-facing
✅ Model IDs: Must match actual API model names used in backend calls
✅ MCP Tools: The tools array is usually empty initially; tools are discovered dynamically when the app connects to the MCP server
✅ Provider Prefixes: Required for the app to route requests to the correct AI provider
Document Processing Functions:
Deploy Azure Python serverless functions from:
azure-python-serverless-functions
Claude Proxy Server:
Deploy the Anthropic Claude proxy from:
anthropic-express-proxy-server
MCP Server:
Deploy the Python MCP server from:
azure-python-mcp-hello-world
npm run devVisit http://localhost:3000 and enjoy all features! 🎉
| Feature | Gemini Only | + Azure Cosmos | + Azure OpenAI | + All Services |
|---|---|---|---|---|
| Chat with AI | ✅ | ✅ | ✅ | ✅ |
| Multi-model comparison | ❌ | ❌ | ✅ | ✅ |
| Conversation persistence | ❌ | ✅ | ✅ | ✅ |
| Workflows | ❌ | ✅ | ✅ | ✅ |
| Collaboration | ❌ | ✅ | ✅ | ✅ |
| Document Briefcase | ❌ | ❌ | ❌ | ✅ |
| Database search | ❌ | ✅ | ✅ | ✅ |
| Canvas Editor | ✅ | ✅ | ✅ | ✅ |
For upcoming and future plans, check FUTURE-PLANS.md
Compare responses from multiple AI models simultaneously in a single conversation.
Supported Models:
- Google Gemini: Flash 3, Pro 3, Flash 2.5 Lite
- Azure OpenAI: GPT-3.5 Turbo, GPT-4, GPT-4o, GPT-5 Mini, DALL-E 3, Text Embedding
- Anthropic Claude: Claude 4.5 Sonnet, Claude 4.5 Opus
Unique Features:
- ✅ Side-by-side model comparison
- ✅ Full Compare View for detailed analysis
- ✅ Response versioning (retry, expand, concise)
- ✅ Per-model conversation branching
Create multi-step AI workflows without code.
Step Types:
- Prompt: Ask AI a question
- File Upload: Require documents at specific steps
- Export: Generate reports (Text, Word, PDF, Excel, PowerPoint)
- Persona Switch: Change AI personality mid-workflow
- Database Search: Query CSV or Azure AI Search
- Vector Search: Semantic search with embeddings
- Web Scraper: Extract content from URLs
- SerpApi: Execute Google searches and extract results
Example Workflow:
1. Upload contract document
2. Analyze for legal risks (GPT-4)
3. Summarize key clauses (Claude)
4. Export to PDF
Innovative Features:
- ✅ Guided Prompts: Interactive step-by-step execution
- ✅ Branching: Start new conversations from any workflow step
- ✅ Templates: Pre-built workflows (Code Audit, Brand Strategy, etc.)
- ✅ Multi-Step Instructions: Dynamic user inputs between steps
Enterprise-grade document analysis suite.
Tools:
- Summarization: Condense documents to key points
- Extraction: Pull specific data with custom queries or preset extractors:
- Default Vectorized Search: General semantic search
- Natural Language Search: Topic-based extraction
- PII (Personally Identifiable Information): Names, phone numbers, emails, addresses
- Date Ranges & Timelines: Time-based events and deadlines
- Monetary Values: Financial figures and currency amounts
- Clause Analysis: Identify legal/contractual clauses
- Comparison: Diff multiple documents
- Translation: Multi-language support
- Database Search: Query uploaded CSV or connected databases
Unique Capabilities:
- ✅ Handles large documents (10,000+ words) with smart caching
- ✅ Batch processing of multiple files
- ✅ Results exported to conversation or separate analysis
- ✅ Integration with Azure AI Search for vector search
Work together on AI conversations.
Features:
- Shared Groups: Create collaborative workspaces
- Shared Sessions: Read-only conversation sharing
- User Identification: Display names for each participant
- Live Updates: Real-time message synchronization
- Invite Links: One-click group joining
Innovative:
- ✅ Polling-based sync (no WebSockets required)
- ✅ Partition by group for data isolation
- ✅ Works with Azure Cosmos DB for global scale
WYSIWYG editor for crafting polished content with AI assistance.
Features:
- Rich text editing (bold, italic, lists, headings)
- AI-powered text generation
- Multiple canvas blocks
- Export to Word documents
Unique "Red-Lining" Feature:
- ✅ Select text and trigger AI rewrite
- ✅ Original text marked in red (struck through)
- ✅ AI suggestions in blue
- ✅ Accept/reject changes inline
Customize AI personality and expertise.
Pre-built Personas:
- Marketing Specialist
- System Architect
Custom Personas:
- Define system instructions
- Set multi-step conversation patterns
- Reusable across sessions
Innovative:
- ✅ Quick Persona Switch: Change mid-conversation
- ✅ Workflow Integration: Auto-switch personas in workflows
- ✅ Persistent: Saved to database
Save and reuse common prompts.
Categories:
- Learning
- Coding
- Writing
- Business
Features:
- ✅ Multi-step prompts with guided inputs
- ✅ Favorites system
- ✅ Searchable and filterable
- ✅ Cloud-synced
Connect to structured data sources.
Source Types:
- CSV Upload: Drag-and-drop spreadsheets
- Manual Entry: Define custom schemas
- Azure AI Search: Vector search with embeddings
Query Types:
- Phrase search
- Semantic (vector) search
- SQL-style queries (via AI interpretation)
Innovative:
- ✅ Auto-preview with row counts
- ✅ Inline search in Document Briefcase
- ✅ Embedding generation with Azure models
Connect to Model Context Protocol servers for extended functionality and interactive UI.
Pre-configured Servers:
- Hello World (Example)
MCP Capabilities:
- ✅ Dynamic tool discovery
- ✅ Tool execution in conversation
- ✅ JSON-RPC 2.0 support
- ✅ SSE (Server-Sent Events) streaming
- ✅ Multiple sequential tool calls from a single prompt
A2UI (Adaptive AI User Interface):
- ✅ Interactive Forms and Components: MCP tools can return UI blueprints (JSON) that render as native React components
- ✅ Seamless Submission: Form data is submitted back to the LLM as a tool call request
- ✅ Full Cycle:
- User requests actions (e.g. "Book vacation")
- MCP tool returns A2UI blueprint
- App renders interactive form (DatePickers, Selects, etc.)
- App renders interactive components (WeatherCard, Calendar, etc.)
- User submits form → App sends tool call request to LLM
- LLM executes tool and returns final result
- ✅ Read-only Support: Forms are automatically disabled in shared/readonly views
Additional screnshots found here, Screenshots
The Hello World example to test the Azure MCP Server can be deployed to your instance own from: azure-python-mcp-hello-world
Run the application as a standalone mobile app on iOS and Android devices.
Features:
- ✅ Install to Home Screen: Add app icon to device home screen
- ✅ Standalone Mode: Runs in full-screen without browser UI
- ✅ Offline Support: Service worker caching for offline access
- ✅ Auto-Updates: Automatic updates when new versions are deployed
- ✅ Native Feel: Behaves like a native mobile app
- ✅ Cross-Platform: Works on iOS, Android, and Desktop
Caching Strategy:
- Static assets (HTML, CSS, JS) precached for instant loading
- Google Fonts cached for 365 days
- External modules cached for 30 days
- Configurable cache size limit (default 5MB per file)
For detailed setup instructions, see PWA-SETUP.md
Sidebar Features:
- Folders: Organize conversations
- Search: Find past chats
- Sorting: By date (Today, Yesterday, Last Week, etc.)
- Outline View: Jump to specific messages in long threads
Session Features:
- ✅ Automatic title generation
- ✅ Session export (JSON)
- ✅ Branching from any message
- ✅ Version history for responses
Integrated React Charts for data visualization directly within chat responses.
Features:
- ✅ Automatic Rendering: Models can generate charts based on data
- ✅ Interactive: Tooltips and hover effects
- ✅ Customizable: Models can specify chart types (Bar, Line, Pie, etc.)
- Idle Animation: Textarea glows after 30 seconds of inactivity
- Responsive Design: Desktop, tablet, and mobile optimized
- Dark/Light Mode: Automatic system preference detection
- Keyboard Shortcuts: Power user optimizations
- Scroll-to-Bottom: Smart scroll detection
- Loading States: AI-themed animations
- Semantic HTML
- ARIA labels
- Keyboard navigation
- Screen reader support
- React 19.2 with TypeScript
- Vite 6.2 for blazing-fast builds
- Lucide React for icons
- React Markdown with syntax highlighting
- Custom React hooks
- Local storage for persistence
- Azure Cosmos DB for cloud sync
- Google Gemini API (native SDK)
- Azure OpenAI (REST API)
- Anthropic Claude (proxy endpoint)
- Azure Cosmos DB (NoSQL database)
- Azure AI Search (vector search)
- Playwright for E2E testing
- Test coverage for chat, workflows, collaboration, and briefcase
This application integrates with several optional Azure services to extend functionality.
Powers the Document Briefcase features (summarization, extraction, comparison, etc.).
Deploy your own instance:
azure-python-serverless-functions
Endpoints provided:
- Web Scraper
- Content Comparison
- Content Extractor
- Content Summarization
- Content Translation
- Clause Analysis
Required to use Claude models (bypasses CORS restrictions).
Deploy your own instance:
anthropic-express-proxy-server
Model Context Protocol server for extended tool functionality.
Deploy your own instance:
azure-python-mcp-hello-world
💡 Tip: All environment variables and setup instructions are in the Getting Started section above.
multi-model-orchestrator/
├── src/
│ ├── App.tsx # Main application
│ ├── config/
│ │ └── constants.ts # App configuration
│ ├── types/
│ │ └── index.ts # TypeScript interfaces
│ ├── components/ # React components
│ │ ├── Admin.tsx
│ │ ├── BriefcasePanel.tsx
│ │ ├── CanvasEditor.tsx
│ │ ├── WorkflowBuilderModal.tsx
│ │ └── ... (15+ components)
│ ├── hooks/ # Custom React hooks
│ │ ├── useBriefcase.ts
│ │ ├── useWorkflowBuilder.ts
│ │ ├── useCanvas.ts
│ │ └── ...
│ ├── services/ # API services
│ │ ├── multiModelService.ts
│ │ ├── cosmosService.ts
│ │ └── conversationalModelService.ts
│ ├── utils/ # Utilities
│ └── data/ # Sample data
├── e2e/ # Playwright tests
├── terraform/ # Infrastructure as Code
│ ├── main.tf # Cosmos DB resources
│ ├── terraform.tfvars.example # Configuration example
│ └── README.md # Deployment guide
├── index.tsx # Entry point
└── vite.config.ts # Vite configuration
# Interactive UI (recommended)
npm run test:e2e:ui
# Headless mode
npm run test:e2e
# Debug mode
npm run test:e2e:debugTest Coverage:
- ✅ Chat functionality
- ✅ Multi-model selection
- ✅ File uploads
- ✅ Workflow execution
- ✅ Collaboration features
- ✅ Document briefcase tools
npm run buildOutput: dist/ folder ready for static hosting
- Vercel: Zero-config deployment
- Netlify: Continuous deployment from Git
- Azure Static Web Apps: Native Azure integration
- ✅ Multi-model comparison in real-time
- ✅ Workflow automation without code
- ✅ Enterprise document analysis suite
- ✅ Real-time collaboration
- ✅ Self-hosted option
- ✅ Multiple AI providers in one interface
- ✅ Structured workflows vs. single prompts
- ✅ Database integration
- ✅ Canvas editor with red-lining
- ✅ Collaboration features
- ✅ Workflow builder
- ✅ Document briefcase
- ✅ Conversation branching
- Contract analysis and summarization
- Multi-document comparison
- Brand strategy development
- Legal clause extraction
- Code review with multiple models
- Architecture design validation
- Documentation generation
- Security audits
- Literature review workflows
- Data extraction from papers
- Multi-model consensus checking
- Translation and summarization
- Interactive learning workflows
- Assignment analysis
- Multi-perspective explanations
- Study guide generation
Real-world costs from development and testing of this application.
| Category | Component | Cost | Description |
|---|---|---|---|
| Development (One-Time) | |||
| Microsoft Foundry Models | $0.38 | Used for testing of creating conversations and workflows. | |
| Anthropic Claude API | $0.05 | Same as above, bought the $5 minimum credits but only ever used $0.05. | |
| Google Gemini API | $0.00 (free) | Very generous API, free credits hardly ever hit limits. | |
| Google Antigravity IDE Pro | $30.00 (optional) | Used for development of the application, could realistically just wait out the 5 hour reset. | |
| Total Development | $30.43 | ||
| Infrastructure (Monthly) | |||
| With Free Tier | |||
| Azure Cosmos DB | $0.00 | ||
| Azure Functions | $0.00 | Python Serverless functions were built 3 years ago and updated to use chunking and other foundry calls. | |
| Azure Static Web Apps | $0.00 | ||
| Total Free Tier | $0/month | ||
| Production (No Free Tier) | |||
| Azure Cosmos DB | $24-48 | ||
| Azure Functions | $0-5 | ||
| Azure Static Web Apps | $0-9 | ||
| AI API Usage | Variable | ||
| Total Production | $25-70/month |
AI Model Usage During Testing:
- Microsoft Foundry Models: $0.38 (GPT-5, GPT-4, GPT-3.5, DALL-E, embeddings)
- Anthropic Claude: $0.05 (Claude 4.5 Sonnet/Opus)
- Google Gemini: $0.00 (free within API limits)
Total AI API Costs: ~$0.43 for full development and testing
Development Environment:
- Google Antigravity IDE: Free for first month
- Eventually upgraded to Pro ($30) to bypass 5-hour session refresh limit
- Entire application coded within the free month
Total Development Cost: $30 (optional upgrade, not required)
Current Hosting:
- Azure Resources: $0.00/month (using free monthly Azure credits)
- Cosmos DB (free tier: 1000 RU/s, 25 GB)
- Python serverless functions (free tier: 1M executions)
- Static web app hosting (free tier)
Estimated Production Costs (without free tier):
- Azure Cosmos DB: ~$24-48/month (4000 RU/s autoscale)
- Azure Functions: ~$0-5/month (consumption plan)
- Azure Static Web Apps: ~$0-9/month
- AI API Usage: Variable based on usage
- Gemini: Free tier covers most use cases
- Azure OpenAI: ~$0.002-0.03 per request (model dependent)
- Claude: ~$0.003-0.015 per request
Total Estimated Production: $25-70/month (excluding API usage)
To Build This App: $0.43 in API costs + $30 optional IDE upgrade
To Run in Production: $0-70/month depending on scale and free tier eligibility
Developer Time: ~20-30 hours (with AI assistance)
All costs based on January 2026 pricing. Your actual costs may vary based on usage patterns and region.
See FUTURE-PLANS.md for upcoming features and roadmap.
Non-Commercial Source Available License v1.0
- ✅ Free for personal, educational, and non-commercial use
- ✅ Fork and modify allowed
- ❌ Commercial use requires a separate license
For commercial licensing inquiries, contact: [Your Email Here]
See LICENSE file for full details.
Contributions welcome! Please:
- Fork the repository
- Create a feature branch
- Write tests for new features
- Submit a pull request
For issues or questions, please open an issue on GitHub.
Built with ❤️ and vibes by Romayne Eastmond who believes AI should be flexible, collaborative, and powerful.