Spaces:
Sleeping
Sleeping
| import { useState, useEffect } from "react"; | |
| import "./App.css"; | |
| import Options from "./components/Options"; | |
| import Recipe from "./components/Recipe"; | |
| import { setModelLayers } from "./utils/modelCookies"; | |
| import { useAPI } from "./hooks/useAPI"; | |
| import { devError } from "./utils/devLogger"; | |
| function App() { | |
| const [models, setModels] = useState([]); | |
| const [selectedModel1, setSelectedModel1] = useState(""); | |
| const [selectedModel2, setSelectedModel2] = useState(""); | |
| const [layerRecipe, setLayerRecipe] = useState([]); | |
| const [embeddingLambdas, setEmbeddingLambdas] = useState([0.5, 0.5]); | |
| const [linearLambdas, setLinearLambdas] = useState([0.5, 0.5]); | |
| const [mergedName, setMergedName] = useState("merged"); | |
| const [numLayers, setNumLayers] = useState(12); | |
| const [isSpaceLoading, setIsSpaceLoading] = useState(true); | |
| const { fetchModels, checkTaskStatus } = useAPI(); | |
| useEffect(() => { | |
| setModelLayers("svamp", 24); | |
| setModelLayers("tinystories", 24); | |
| const loadModels = async () => { | |
| try { | |
| const taskId = await fetchModels(); | |
| if (taskId) { | |
| checkTaskStatus( | |
| taskId, | |
| (result) => { | |
| if (result && Array.isArray(result.response)) { | |
| setModels(result.response); | |
| setIsSpaceLoading(false); | |
| } | |
| }, | |
| (error) => { | |
| devError("Failed to load models:", error); | |
| setIsSpaceLoading(false); // Set to false even on error | |
| } | |
| ); | |
| } else { | |
| setIsSpaceLoading(false); | |
| } | |
| } catch (error) { | |
| devError("Error fetching models:", error); | |
| setIsSpaceLoading(false); // Set to false even on error | |
| } | |
| }; | |
| loadModels(); | |
| }, [fetchModels, checkTaskStatus]); | |
| return ( | |
| <div className="h-screen bg-secondary-50 overflow-hidden"> | |
| {/* GitHub Corner */} | |
| <a | |
| href="https://github.com/tcmmichaelb139/evolutiontransformer" | |
| className="github-corner group absolute top-0 right-0 z-50" | |
| aria-label="View source on GitHub" | |
| target="_blank" | |
| rel="noopener noreferrer" | |
| > | |
| <svg | |
| width="40" | |
| height="40" | |
| viewBox="0 0 250 250" | |
| className="fill-primary-500 text-background absolute top-0 right-0 border-0" | |
| aria-hidden="true" | |
| > | |
| <path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z" /> | |
| <path | |
| d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" | |
| fill="currentColor" | |
| className="group-hover:animate-pulse origin-[130px_106px] transition-transform duration-300" | |
| /> | |
| <path | |
| d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" | |
| fill="currentColor" | |
| className="octo-body" | |
| /> | |
| </svg> | |
| </a> | |
| {/* Loading Overlay */} | |
| {isSpaceLoading && ( | |
| <div className="fixed inset-0 bg-background/90 backdrop-blur-sm z-50 flex items-center justify-center"> | |
| <div className="text-center"> | |
| <div className="animate-spin w-12 h-12 border-4 border-primary-500 border-t-transparent rounded-full mx-auto mb-4"></div> | |
| <h2 className="text-xl font-semibold text-foreground mb-2"> | |
| Space is starting up... | |
| </h2> | |
| <p className="text-secondary-600"> | |
| Initializing Evolution Transformer | |
| </p> | |
| </div> | |
| </div> | |
| )} | |
| <Options | |
| models={models} | |
| selectedModel1={selectedModel1} | |
| selectedModel2={selectedModel2} | |
| setSelectedModel1={setSelectedModel1} | |
| setSelectedModel2={setSelectedModel2} | |
| numLayers={numLayers} | |
| setNumLayers={setNumLayers} | |
| layerRecipe={layerRecipe} | |
| embeddingLambdas={embeddingLambdas} | |
| linearLambdas={linearLambdas} | |
| setModels={setModels} | |
| mergedName={mergedName} | |
| setMergedName={setMergedName} | |
| isSpaceLoading={isSpaceLoading} | |
| /> | |
| <Recipe | |
| layerRecipe={layerRecipe} | |
| setLayerRecipe={setLayerRecipe} | |
| embeddingLambdas={embeddingLambdas} | |
| setEmbeddingLambdas={setEmbeddingLambdas} | |
| linearLambdas={linearLambdas} | |
| setLinearLambdas={setLinearLambdas} | |
| numLayers={numLayers} | |
| selectedModel1={selectedModel1} | |
| selectedModel2={selectedModel2} | |
| /> | |
| <div className="max-w-6xl mx-auto"></div> | |
| </div> | |
| ); | |
| } | |
| export default App; | |