Spaces:
Running
Running
| import { json } from '@remix-run/cloudflare'; | |
| import { LLMManager } from '~/lib/modules/llm/manager'; | |
| import type { ModelInfo } from '~/lib/modules/llm/types'; | |
| import type { ProviderInfo } from '~/types/model'; | |
| import { getApiKeysFromCookie, getProviderSettingsFromCookie } from '~/lib/api/cookies'; | |
| interface ModelsResponse { | |
| modelList: ModelInfo[]; | |
| providers: ProviderInfo[]; | |
| defaultProvider: ProviderInfo; | |
| } | |
| let cachedProviders: ProviderInfo[] | null = null; | |
| let cachedDefaultProvider: ProviderInfo | null = null; | |
| function getProviderInfo(llmManager: LLMManager) { | |
| if (!cachedProviders) { | |
| cachedProviders = llmManager.getAllProviders().map((provider) => ({ | |
| name: provider.name, | |
| staticModels: provider.staticModels, | |
| getApiKeyLink: provider.getApiKeyLink, | |
| labelForGetApiKey: provider.labelForGetApiKey, | |
| icon: provider.icon, | |
| })); | |
| } | |
| if (!cachedDefaultProvider) { | |
| const defaultProvider = llmManager.getDefaultProvider(); | |
| cachedDefaultProvider = { | |
| name: defaultProvider.name, | |
| staticModels: defaultProvider.staticModels, | |
| getApiKeyLink: defaultProvider.getApiKeyLink, | |
| labelForGetApiKey: defaultProvider.labelForGetApiKey, | |
| icon: defaultProvider.icon, | |
| }; | |
| } | |
| return { providers: cachedProviders, defaultProvider: cachedDefaultProvider }; | |
| } | |
| export async function loader({ | |
| request, | |
| params, | |
| context, | |
| }: { | |
| request: Request; | |
| params: { provider?: string }; | |
| context: { | |
| cloudflare?: { | |
| env: Record<string, string>; | |
| }; | |
| }; | |
| }): Promise<Response> { | |
| const llmManager = LLMManager.getInstance(context.cloudflare?.env); | |
| // Get client side maintained API keys and provider settings from cookies | |
| const cookieHeader = request.headers.get('Cookie'); | |
| const apiKeys = getApiKeysFromCookie(cookieHeader); | |
| const providerSettings = getProviderSettingsFromCookie(cookieHeader); | |
| const { providers, defaultProvider } = getProviderInfo(llmManager); | |
| let modelList: ModelInfo[] = []; | |
| if (params.provider) { | |
| // Only update models for the specific provider | |
| const provider = llmManager.getProvider(params.provider); | |
| if (provider) { | |
| modelList = await llmManager.getModelListFromProvider(provider, { | |
| apiKeys, | |
| providerSettings, | |
| serverEnv: context.cloudflare?.env, | |
| }); | |
| } | |
| } else { | |
| // Update all models | |
| modelList = await llmManager.updateModelList({ | |
| apiKeys, | |
| providerSettings, | |
| serverEnv: context.cloudflare?.env, | |
| }); | |
| } | |
| return json<ModelsResponse>({ | |
| modelList, | |
| providers, | |
| defaultProvider, | |
| }); | |
| } | |