@@ -8,8 +8,19 @@ import { redirect } from "next/navigation";
88
99import { ModelCard } from "@/components/modelCard" ;
1010import { OpenRouterModelList } from "@/components/OpenRouterModelList" ;
11+ import { OllamaModelList } from "@/components/OllamaModelList" ;
1112import { OpenRouterBadge } from "@/components/OpenRouterConfigButton" ;
1213
14+ import { validateOllamaHost } from "@/actions/ollama" ;
15+
16+ //@ts -ignore
17+ interface OllamaModelWithStatus extends prisma . customProvider {
18+ isAvailable : boolean ;
19+ endpoint : string ;
20+ modelCount : number ;
21+ id : string ;
22+ }
23+
1324export default async function Home ( ) {
1425 const { claims } = await getLogtoContext ( logtoConfig ) ;
1526
@@ -23,12 +34,12 @@ export default async function Home() {
2334 } ,
2435 } ) ;
2536
26- const userOllamaModels = await prisma . customProvider . findMany ( {
37+ let userOllamaModels = ( await prisma . customProvider . findMany ( {
2738 where : {
2839 userId : claims ?. sub ,
2940 type : "ollama" ,
3041 } ,
31- } ) ;
42+ } ) ) as unknown as OllamaModelWithStatus [ ] ;
3243
3344 const userOpenRouterModels = await prisma . customProvider . findMany ( {
3445 where : {
@@ -37,6 +48,16 @@ export default async function Home() {
3748 } ,
3849 } ) ;
3950
51+ for ( const model of userOllamaModels ) {
52+ try {
53+ const hostInfo = await validateOllamaHost ( model . endpoint ) ;
54+ model . isAvailable = hostInfo . isValid ;
55+ model . modelCount = hostInfo . modelCount ;
56+ } catch ( error ) {
57+ model . isAvailable = false ;
58+ }
59+ }
60+
4061 return (
4162 < div className = "container mx-auto p-4" >
4263 < h1 className = { "text-base-content text-4xl" } > Model Settings</ h1 >
@@ -71,6 +92,9 @@ export default async function Home() {
7192 < h2 className = { "text-base-content text-xl mt-5 mb-2" } >
7293 Custom Provider
7394 </ h2 >
95+ < div className = "grid space-y-2" >
96+ < OllamaModelList models = { userOllamaModels } />
97+ </ div >
7498 </ div >
7599 ) ;
76100}
0 commit comments