"use client"; import React, { useState } from 'react'; import { Database, Upload, Search, Zap, Brain, Settings, CheckCircle, Activity, ArrowRight, FileUp, BarChart3, Eye, Download, Play } from 'lucide-react'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Textarea } from "@/components/ui/textarea"; import { Badge } from "@/components/ui/badge"; export default function DatasetArchitect() { const [searchQuery, setSearchQuery] = useState(''); const [isSearching, setIsSearching] = useState(false); const [uploadedFiles, setUploadedFiles] = useState([]); const [architectAnalysis, setArchitectAnalysis] = useState(null); const [wizardConfig, setWizardConfig] = useState(null); const [customDataPriority, setCustomDataPriority] = useState(0.7); // Option 1: Find matching data from portal const handlePortalSearch = async () => { if (!searchQuery.trim()) return setIsSearching(true) try { const response = await fetch(`${process.env.NEXT_PUBLIC_TRAINING_API_BASE || 'http://localhost:9006'}/api/dataset-architect/option-1/find-data`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ query: searchQuery, task_type: null }) }) const result = await response.json() setArchitectAnalysis(result) } catch (error) { console.error('Portal search failed:', error) } finally { setIsSearching(false) } } // Option 2: Upload data const handleFileUpload = async (files: FileList) => { const fileArray = Array.from(files) setUploadedFiles(fileArray) const formData = new FormData() fileArray.forEach(file => formData.append('files', file)) formData.append('dataset_name', 'Uploaded Dataset') formData.append('dataset_description', 'User uploaded dataset for analysis') try { const response = await fetch(`${process.env.NEXT_PUBLIC_TRAINING_API_BASE || 'http://localhost:9006'}/api/dataset-architect/option-2/upload-data`, { method: 'POST', body: formData }) const result = await response.json() setArchitectAnalysis(result) } catch (error) { console.error('Upload failed:', error) } } // Option 3: Hybrid approach const handleHybridApproach = async () => { if (!searchQuery.trim() && uploadedFiles.length === 0) return try { const formData = new FormData() uploadedFiles.forEach(file => formData.append('files', file)) const response = await fetch(`${process.env.NEXT_PUBLIC_TRAINING_API_BASE || 'http://localhost:9006'}/api/dataset-architect/option-3/hybrid-approach`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ query: searchQuery, custom_data_priority: customDataPriority, metadata: { name: 'Hybrid Dataset', description: 'Combined portal and custom data' } }) }) const result = await response.json() setArchitectAnalysis(result) } catch (error) { console.error('Hybrid approach failed:', error) } } // Open preprocessing wizard const openPreprocessingWizard = async () => { if (!architectAnalysis) return try { const response = await fetch(`${process.env.NEXT_PUBLIC_TRAINING_API_BASE || 'http://localhost:9006'}/api/dataset-architect/open-wizard`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ architect_analysis: architectAnalysis, dataset_info: { name: 'Current Dataset' } }) }) const result = await response.json() setWizardConfig(result) } catch (error) { console.error('Wizard open failed:', error) } } return (
{/* Neon grid overlay */}
{/* Custom scrollbar styles */}