()
| 1966 | // ── Plan / Tier Settings Tab ──────────────────────────────────────────── |
| 1967 | |
| 1968 | function PlanTab() { |
| 1969 | const { |
| 1970 | tierInfo, |
| 1971 | fetchTierInfo, |
| 1972 | ultraplinianApiUrl, |
| 1973 | ultraplinianApiKey |
| 1974 | } = useStore() |
| 1975 | |
| 1976 | const [loading, setLoading] = useState(false) |
| 1977 | |
| 1978 | const handleRefresh = async () => { |
| 1979 | setLoading(true) |
| 1980 | await fetchTierInfo() |
| 1981 | setLoading(false) |
| 1982 | } |
| 1983 | |
| 1984 | useEffect(() => { |
| 1985 | if (ultraplinianApiUrl && ultraplinianApiKey && !tierInfo) { |
| 1986 | handleRefresh() |
| 1987 | } |
| 1988 | }, [ultraplinianApiUrl, ultraplinianApiKey]) |
| 1989 | |
| 1990 | const plans = [ |
| 1991 | { |
| 1992 | tier: 'free' as const, |
| 1993 | label: 'Free', |
| 1994 | color: 'text-gray-400 border-gray-500/30 bg-gray-500/5', |
| 1995 | limits: '5 total, 10/min, 50/day', |
| 1996 | features: [ |
| 1997 | 'Single-model chat', |
| 1998 | 'AutoTune + Parseltongue + STM', |
| 1999 | 'ULTRAPLINIAN fast tier (12 models)', |
| 2000 | ], |
| 2001 | locked: [ |
| 2002 | 'Dataset export', |
| 2003 | 'Research API', |
| 2004 | 'ULTRAPLINIAN standard/smart/power/ultra tiers', |
| 2005 | 'Metadata event log', |
| 2006 | 'Corpus download', |
| 2007 | ], |
| 2008 | }, |
| 2009 | { |
| 2010 | tier: 'pro' as const, |
| 2011 | label: 'Pro', |
| 2012 | color: 'text-cyan-400 border-cyan-500/30 bg-cyan-500/5', |
| 2013 | limits: 'Unlimited total, 60/min, 1000/day', |
| 2014 | features: [ |
| 2015 | 'Everything in Free', |
| 2016 | 'ULTRAPLINIAN fast + standard + smart + power (49 models)', |
| 2017 | 'Dataset export (JSON)', |
| 2018 | 'Research API (read: stats, batches)', |
| 2019 | ], |
| 2020 | locked: [ |
| 2021 | 'ULTRAPLINIAN ultra tier (all 56 models)', |
| 2022 | 'Corpus query + download', |
| 2023 | 'Force-flush to HuggingFace', |
| 2024 | 'Metadata event log', |
| 2025 | ], |
nothing calls this directly
no test coverage detected