provider-context.tsx 1.0 KB

123456789101112131415161718192021222324252627282930313233343536
  1. 'use client'
  2. import { createContext, useContext } from 'use-context-selector'
  3. import useSWR from 'swr'
  4. import { fetchTenantInfo } from '@/service/common'
  5. const ProviderContext = createContext<{ currentProvider: {
  6. provider: string
  7. provider_name: string
  8. token_is_set: boolean
  9. is_valid: boolean
  10. token_is_valid: boolean
  11. } | null | undefined }>({
  12. currentProvider: null,
  13. })
  14. export const useProviderContext = () => useContext(ProviderContext)
  15. type ProviderContextProviderProps = {
  16. children: React.ReactNode
  17. }
  18. export const ProviderContextProvider = ({
  19. children,
  20. }: ProviderContextProviderProps) => {
  21. const { data: userInfo } = useSWR({ url: '/info' }, fetchTenantInfo)
  22. const currentProvider = userInfo?.providers?.find(({ token_is_set, is_valid, provider_name }) => token_is_set && is_valid && (provider_name === 'openai' || provider_name === 'azure_openai'))
  23. return (
  24. <ProviderContext.Provider value={{ currentProvider }}>
  25. {children}
  26. </ProviderContext.Provider>
  27. )
  28. }
  29. export default ProviderContext