"use client"; import { useEffect, useState } from "react"; import { Card } from "@/components/ui/card"; import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Button } from "@/components/ui/button"; import { Sun } from "lucide-react"; import { Wifi, WifiOff } from "lucide-react"; import GameComponent from "@/components/game-component"; import { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectTrigger, SelectValue, } from "@/components/ui/select"; const API_BASE = "http://localhost:8000/"; // Available AI models const aiModels = [ { id: "gpt-4o", name: "GPT-4o", category: "OpenAI" }, { id: "claude-3-5-sonnet", name: "Claude 3.5 Sonnet", category: "Anthropic" }, { id: "gemini-1.5-pro", name: "Gemini 1.5 Pro", category: "Google" }, { id: "llama-3-70b", name: "Llama 3 70B", category: "Meta" }, { id: "mistral-large", name: "Mistral Large", category: "Mistral AI" }, ]; export default function PlayTab() { const [player, setPlayer] = useState<"me" | "model">("me"); const [selectedModel, setSelectedModel] = useState(); const [maxHops, setMaxHops] = useState(20); const [nodeList, setNodeList] = useState("default"); const [isGameStarted, setIsGameStarted] = useState(false); const [startPage, setStartPage] = useState("Dogs"); const [targetPage, setTargetPage] = useState("Canada"); const [maxTokens, setMaxTokens] = useState(1024); const [maxLinks, setMaxLinks] = useState(200); const [isServerConnected, setIsServerConnected] = useState(false); const [modelList, setModelList] = useState<{id: string, name: string, author: string, likes: number, trendingScore: number}[]>([]); // Server connection check useEffect(() => { fetchAvailableModels(); const checkServerConnection = async () => { try { const response = await fetch(API_BASE); setIsServerConnected(response.ok); } catch { setIsServerConnected(false); } }; // Check immediately and then every 30 seconds checkServerConnection(); const interval = setInterval(checkServerConnection, 30000); return () => clearInterval(interval); }, []); const handleStartGame = () => { setIsGameStarted(true); }; const handleResetGame = () => { setIsGameStarted(false); }; const handlePlayerChange = (value: string) => { setPlayer(value as "me" | "model"); }; const fetchAvailableModels = async () => { const response = await fetch( "https://huggingface.co/api/models?inference_provider=all&pipeline_tag=text-generation" ); const models = await response.json() const filteredModels = models.filter((m: any) => m.tags.includes('text-generation')) const modelList = filteredModels.map((m: any) => ({ id: m.id, likes: m.likes, trendingScore: m.trendingScore, author: m.id.split('/')[0], name: m.id.split('/')[1], })); console.log("got model list", modelList); setModelList(modelList); } return (
{!isGameStarted ? (
Me Model
{isServerConnected ? ( ) : ( )} {isServerConnected ? "Connected" : "Disconnected"}
setMaxHops(Number.parseInt(e.target.value))} min={1} max={100} />
Default Custom
{player === "model" && (
setMaxTokens(Number.parseInt(e.target.value))} min={1} max={10000} />
setMaxLinks(Number.parseInt(e.target.value))} min={1} max={1000} />
)}
setStartPage(e.target.value)} placeholder="e.g. Dogs" />
setTargetPage(e.target.value)} placeholder="e.g. Canada" />
) : ( )}
); }