Vokturz's picture
Add error handling and message improvements
63dbafb
import { useEffect, useState } from 'react'
import { Settings } from 'lucide-react'
import ZeroShotClassification from './components/pipelines/ZeroShotClassification'
import TextClassification from './components/pipelines/TextClassification'
import Header from './Header'
import { useModel } from './contexts/ModelContext'
import { getModelsByPipeline } from './lib/huggingface'
import TextGeneration from './components/pipelines/TextGeneration'
import FeatureExtraction from './components/pipelines/FeatureExtraction'
import ImageClassification from './components/pipelines/ImageClassification'
import TextToSpeech from './components/pipelines/TextToSpeech'
import Sidebar from './components/Sidebar'
import ModelReadme from './components/ModelReadme'
import { PipelineLayout } from './components/PipelineLayout'
import Footer from './Footer'
import ModelCode from './components/ModelCode'
function App() {
const [isSidebarOpen, setIsSidebarOpen] = useState(false)
const [isModalOpen, setIsModalOpen] = useState(false)
const [isCodeModalOpen, setIsCodeModalOpen] = useState(false)
const {
pipeline,
setModels,
setModelInfo,
modelInfo,
setIsFetching,
setErrorText,
setStatus
} = useModel()
useEffect(() => {
setModelInfo(null)
setModels([])
setIsFetching(true)
setStatus('initiate')
setErrorText('')
const fetchModels = async () => {
try {
const fetchedModels = await getModelsByPipeline(pipeline)
setModels(fetchedModels)
} catch (error) {
console.error('Error fetching models:', error)
setIsFetching(false)
}
}
fetchModels()
}, [
setModels,
setModelInfo,
setIsFetching,
setStatus,
setErrorText,
pipeline
])
return (
<div className="relative min-h-screen flex flex-col bg-gradient-to-br from-blue-50 to-indigo-100">
<Header />
<PipelineLayout>
<div className=" flex h-[calc(100vh-6.6rem)]">
{/* Main Content */}
<main className="flex-1 overflow-auto">
<div className="h-full px-4 sm:px-6 lg:px-8 py-2 lg:pr-4 max-w-none">
{/* Mobile menu button */}
<div className="absolute right-0 top-16 lg:hidden mb-4">
<button
onClick={() => setIsSidebarOpen(true)}
className="flex items-center px-2 py-2 bg-white border border-gray-300 rounded-l-lg shadow-sm text-sm font-medium text-gray-700 hover:bg-gray-50"
>
<Settings className="w-5 h-5" />
</button>
</div>
{/* Pipeline Component */}
<div className="bg-white rounded-lg shadow-sm border overflow-hidden">
<p className="text-xs text-gray-400 pl-4 pt-2 mb-[-20px]">
{modelInfo?.name}
</p>
{pipeline === 'zero-shot-classification' && (
<ZeroShotClassification />
)}
{pipeline === 'text-classification' && <TextClassification />}
{pipeline === 'text-generation' && <TextGeneration />}
{pipeline === 'feature-extraction' && <FeatureExtraction />}
{pipeline === 'image-classification' && <ImageClassification />}
{pipeline === 'text-to-speech' && <TextToSpeech />}
</div>
</div>
</main>
{/* Sidebar */}
<Sidebar
isOpen={isSidebarOpen}
onClose={() => setIsSidebarOpen(false)}
setIsModalOpen={setIsModalOpen}
setIsCodeModalOpen={setIsCodeModalOpen}
/>
<ModelCode
isCodeModalOpen={isCodeModalOpen}
setIsCodeModalOpen={setIsCodeModalOpen}
/>
</div>
</PipelineLayout>
<Footer />
{modelInfo?.readme && (
<ModelReadme
readme={modelInfo.readme}
modelName={modelInfo.baseId ? modelInfo.baseId : modelInfo.name}
isModalOpen={isModalOpen}
setIsModalOpen={setIsModalOpen}
/>
)}
</div>
)
}
export default App