diff --git a/.gitignore b/.gitignore index 7427ecb..0e8010a 100644 --- a/.gitignore +++ b/.gitignore @@ -76,3 +76,6 @@ ai-models.json # local backups *.bak .gstack/ + +# admin panel settings (contains secrets) +data/ diff --git a/app/[lang]/admin/page.tsx b/app/[lang]/admin/page.tsx index 6045be1..58c97ce 100644 --- a/app/[lang]/admin/page.tsx +++ b/app/[lang]/admin/page.tsx @@ -90,6 +90,14 @@ interface AdminProvider { isDefault?: boolean } +// Provider defined in AI_MODELS_CONFIG / ai-models.json — shown read-only +interface EnvProvider { + name: string + provider: ProviderName + models: string[] + isDefault: boolean +} + async function adminFetch(path: string, pw: string, init?: RequestInit) { const res = await fetch(getApiEndpoint(path), { ...init, @@ -726,11 +734,13 @@ function ProviderDetail({ function ModelsSection({ providers, + envProviders, disabled, password, onChange, }: { providers: AdminProvider[] + envProviders: EnvProvider[] disabled: boolean password: string onChange: (providers: AdminProvider[]) => void @@ -739,6 +749,7 @@ function ModelsSection({ providers[0]?.id ?? null, ) const selected = providers.find((p) => p.id === selectedId) + const selectedEnv = envProviders.find((p) => `env:${p.name}` === selectedId) const addProvider = (provider: ProviderName) => { const newProvider: AdminProvider = { @@ -774,12 +785,38 @@ function ModelsSection({ {/* Provider list */}
- {providers.length === 0 && ( + {providers.length === 0 && envProviders.length === 0 && (

Add a provider to offer server-side models to all users.

)} + {envProviders.map((p) => ( + + ))} {providers.map((p) => (