@lobehub/chat
Version:
Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.
40 lines (33 loc) • 1.43 kB
text/typescript
import isEqual from 'fast-deep-equal';
import { useContext } from 'react';
import { isDeprecatedEdition } from '@/const/version';
import { aiProviderSelectors, useAiInfraStore } from '@/store/aiInfra';
import { useUserStore } from '@/store/user';
import { keyVaultsConfigSelectors } from '@/store/user/selectors';
import { LoadingContext } from './LoadingContext';
export const useApiKey = (provider: string) => {
const [apiKey, baseURL, setConfig] = useUserStore((s) => [
keyVaultsConfigSelectors.getVaultByProvider(provider as any)(s)?.apiKey,
keyVaultsConfigSelectors.getVaultByProvider(provider as any)(s)?.baseURL,
s.updateKeyVaultConfig,
]);
const { setLoading } = useContext(LoadingContext);
const updateAiProviderConfig = useAiInfraStore((s) => s.updateAiProviderConfig);
const data = useAiInfraStore(aiProviderSelectors.providerConfigById(provider), isEqual);
// TODO: remove this in V2
if (isDeprecatedEdition) return { apiKey, baseURL, setConfig };
//
return {
apiKey: data?.keyVaults.apiKey,
baseURL: data?.keyVaults?.baseURL,
setConfig: async (id: string, params: Record<string, string>) => {
const next = { ...data?.keyVaults, ...params };
if (isEqual(data?.keyVaults, next)) return;
setLoading(true);
await updateAiProviderConfig(id, {
keyVaults: { ...data?.keyVaults, ...params },
});
setLoading(false);
},
};
};