Spaces:
Sleeping
Sleeping
import React, { useEffect, useState } from 'react'; | |
import { healthCheck, getModelInfo } from '../api/api'; | |
import { HealthResponse, ModelInfoResponse } from '../types/api'; | |
const Home: React.FC = () => { | |
const [health, setHealth] = useState<HealthResponse | null>(null); | |
const [modelInfo, setModelInfo] = useState<ModelInfoResponse | null>(null); | |
const [loading, setLoading] = useState(true); | |
const [error, setError] = useState<string | null>(null); | |
useEffect(() => { | |
const fetchData = async () => { | |
try { | |
const [healthData, modelData] = await Promise.all([ | |
healthCheck(), | |
getModelInfo() | |
]); | |
setHealth(healthData); | |
setModelInfo(modelData); | |
} catch (err) { | |
setError('Failed to fetch data from the server'); | |
} finally { | |
setLoading(false); | |
} | |
}; | |
fetchData(); | |
}, []); | |
if (loading) { | |
return ( | |
<div className="flex justify-center items-center h-64"> | |
<div className="animate-spin rounded-full h-12 w-12 border-b-2 border-primary-500"></div> | |
</div> | |
); | |
} | |
if (error) { | |
return ( | |
<div className="bg-red-50 border-l-4 border-red-400 p-4"> | |
<div className="flex"> | |
<div className="flex-shrink-0"> | |
<svg className="h-5 w-5 text-red-400" viewBox="0 0 20 20" fill="currentColor"> | |
<path fillRule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z" clipRule="evenodd" /> | |
</svg> | |
</div> | |
<div className="ml-3"> | |
<p className="text-sm text-red-700">{error}</p> | |
</div> | |
</div> | |
</div> | |
); | |
} | |
return ( | |
<div className="space-y-6"> | |
<div className="bg-white shadow overflow-hidden sm:rounded-lg"> | |
<div className="px-4 py-5 sm:px-6"> | |
<h3 className="text-lg leading-6 font-medium text-gray-900">System Status</h3> | |
</div> | |
<div className="border-t border-gray-200"> | |
<dl> | |
<div className="bg-gray-50 px-4 py-5 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6"> | |
<dt className="text-sm font-medium text-gray-500">Status</dt> | |
<dd className="mt-1 text-sm text-gray-900 sm:mt-0 sm:col-span-2"> | |
{health?.status} | |
</dd> | |
</div> | |
<div className="bg-white px-4 py-5 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6"> | |
<dt className="text-sm font-medium text-gray-500">Model Ready</dt> | |
<dd className="mt-1 text-sm text-gray-900 sm:mt-0 sm:col-span-2"> | |
{health?.model_ready ? 'Yes' : 'No'} | |
</dd> | |
</div> | |
<div className="bg-gray-50 px-4 py-5 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6"> | |
<dt className="text-sm font-medium text-gray-500">API Key Configured</dt> | |
<dd className="mt-1 text-sm text-gray-900 sm:mt-0 sm:col-span-2"> | |
{health?.api_key_configured ? 'Yes' : 'No'} | |
</dd> | |
</div> | |
</dl> | |
</div> | |
</div> | |
<div className="bg-white shadow overflow-hidden sm:rounded-lg"> | |
<div className="px-4 py-5 sm:px-6"> | |
<h3 className="text-lg leading-6 font-medium text-gray-900">Model Information</h3> | |
</div> | |
<div className="border-t border-gray-200"> | |
<dl> | |
<div className="bg-gray-50 px-4 py-5 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6"> | |
<dt className="text-sm font-medium text-gray-500">Model Name</dt> | |
<dd className="mt-1 text-sm text-gray-900 sm:mt-0 sm:col-span-2"> | |
{modelInfo?.model_name} | |
</dd> | |
</div> | |
<div className="bg-white px-4 py-5 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6"> | |
<dt className="text-sm font-medium text-gray-500">Model Version</dt> | |
<dd className="mt-1 text-sm text-gray-900 sm:mt-0 sm:col-span-2"> | |
{modelInfo?.model_version} | |
</dd> | |
</div> | |
<div className="bg-gray-50 px-4 py-5 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6"> | |
<dt className="text-sm font-medium text-gray-500">Max Tokens</dt> | |
<dd className="mt-1 text-sm text-gray-900 sm:mt-0 sm:col-span-2"> | |
{modelInfo?.max_tokens} | |
</dd> | |
</div> | |
<div className="bg-white px-4 py-5 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6"> | |
<dt className="text-sm font-medium text-gray-500">Temperature</dt> | |
<dd className="mt-1 text-sm text-gray-900 sm:mt-0 sm:col-span-2"> | |
{modelInfo?.temperature} | |
</dd> | |
</div> | |
</dl> | |
</div> | |
</div> | |
</div> | |
); | |
}; | |
export default Home; |