import { useState, useEffect } from 'react' import { useNavigate } from 'react-router-dom' import { Button } from '@/components/ui/button' import { Card } from '@/components/ui/card' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Textarea } from '@/components/ui/textarea' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select' import { Slider } from '@/components/ui/slider' import { Badge } from '@/components/ui/badge' import { ASSISTANT_CONFIGS } from '@/config/assistants' import { useChat } from '@/hooks/useChat' import { DocumentsTab } from '@/components/playground/DocumentsTab' interface DeviceConfig { assistantId: string model: string temperature: number maxTokens: number role: string goal: string description: string document: string } interface SelectedAssistant { id: string name: string type: 'user'|'template'|'new' originalTemplate?: string } export function MyDevice() { const navigate = useNavigate() const [currentStep, setCurrentStep] = useState(1) const [deviceConfig, setDeviceConfig] = useState({ assistantId: '', model: 'Qwen/Qwen3-30B-A3B', temperature: 0.7, maxTokens: 1024, role: '', goal: '', description: '', document: '' }) // RAG document state const [ragEnabled, setRagEnabled] = useState(false) const [retrievalCount, setRetrievalCount] = useState(3) const [currentAssistant, setCurrentAssistant] = useState(null) // Load assistant configuration when selected const handleAssistantSelect = (assistantId: string) => { if (assistantId === 'create-new') { // Reset to blank configuration for new assistant setDeviceConfig(prev => ({ ...prev, assistantId: 'create-new', model: 'Qwen/Qwen3-30B-A3B', temperature: 0.7, maxTokens: 1024, role: '', goal: '', description: '' })) // Reset chat settings setSelectedModel('Qwen/Qwen3-30B-A3B') setSystemPrompt('') setTemperature(0.7) setMaxTokens(1024) // Set current assistant for RAG setCurrentAssistant({ id: 'create-new', name: 'New Custom Assistant', type: 'new' }) } else { const config = assistantConfigs.find(c => c.id === assistantId) if (config) { setDeviceConfig(prev => ({ ...prev, assistantId, model: config.model, temperature: config.temperature, maxTokens: config.maxTokens, role: config.description, goal: config.category, description: config.systemPrompt })) // Also update chat settings for Step 2 setSelectedModel(config.model) setSystemPrompt(config.systemPrompt) setTemperature(config.temperature) setMaxTokens(config.maxTokens) // Set current assistant for RAG setCurrentAssistant({ id: assistantId, name: config.name, type: 'template' }) } } } // Check for pre-selected use case from Use Cases page useEffect(() => { const selectedUseCase = localStorage.getItem('selectedUseCase') if (selectedUseCase) { handleAssistantSelect(selectedUseCase) localStorage.removeItem('selectedUseCase') // Clear after use } }, []) // Chat functionality for Step 2 const { currentSession, createNewSession, sendMessage, isLoading, setSystemPrompt, setTemperature, setMaxTokens, setSelectedModel, input, setInput } = useChat() const assistantConfigs = ASSISTANT_CONFIGS const messages = currentSession?.messages || [] // Sync deviceConfig changes to chat settings useEffect(() => { setSelectedModel(deviceConfig.model) setSystemPrompt(deviceConfig.description) setTemperature(deviceConfig.temperature) setMaxTokens(deviceConfig.maxTokens) }, [deviceConfig, setSelectedModel, setSystemPrompt, setTemperature, setMaxTokens]) const renderStepIndicator = () => (
= 1 ? 'text-purple-600' : 'text-gray-400'}`}>
= 1 ? 'bg-purple-600 text-white border-purple-600' : 'border-gray-300' }`}> 1
Configuration
= 2 ? 'bg-purple-600' : 'bg-gray-300'}`} />
= 2 ? 'text-purple-600' : 'text-gray-400'}`}>
= 2 ? 'bg-purple-600 text-white border-purple-600' : 'border-gray-300' }`}> 2
Test performance
= 3 ? 'bg-purple-600' : 'bg-gray-300'}`} />
= 3 ? 'text-purple-600' : 'text-gray-400'}`}>
= 3 ? 'bg-purple-600 text-white border-purple-600' : 'border-gray-300' }`}> 3
Deploy to device
) const renderStep1 = () => (
{/* Load Assistant */}
{/* Parameters */}

Parameters

{/* Model Selection */}
{/* Temperature */}
setDeviceConfig(prev => ({ ...prev, temperature: value[0] }))} max={1} min={0} step={0.1} className="w-full" />
{/* Max Tokens */}
setDeviceConfig(prev => ({ ...prev, maxTokens: parseInt(e.target.value) || 1024 }))} min={1} max={4096} />
{/* Description */}

Description

setDeviceConfig(prev => ({ ...prev, role: e.target.value }))} placeholder="e.g., Senior data researcher, journalist, lawyer" />
setDeviceConfig(prev => ({ ...prev, goal: e.target.value }))} placeholder="Describe the main goal or objective" />