provider-context.tsx 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. 'use client'
  2. import { createContext, useContext } from 'use-context-selector'
  3. import useSWR from 'swr'
  4. import { fetchDefaultModal, fetchModelList } from '@/service/common'
  5. import { ModelFeature, ModelType } from '@/app/components/header/account-setting/model-page/declarations'
  6. import type { BackendModel } from '@/app/components/header/account-setting/model-page/declarations'
  7. const ProviderContext = createContext<{
  8. textGenerationModelList: BackendModel[]
  9. embeddingsModelList: BackendModel[]
  10. speech2textModelList: BackendModel[]
  11. agentThoughtModelList: BackendModel[]
  12. updateModelList: (type: ModelType) => void
  13. embeddingsDefaultModel?: BackendModel
  14. mutateEmbeddingsDefaultModel: () => void
  15. speech2textDefaultModel?: BackendModel
  16. mutateSpeech2textDefaultModel: () => void
  17. }>({
  18. textGenerationModelList: [],
  19. embeddingsModelList: [],
  20. speech2textModelList: [],
  21. agentThoughtModelList: [],
  22. updateModelList: () => {},
  23. speech2textDefaultModel: undefined,
  24. mutateSpeech2textDefaultModel: () => {},
  25. embeddingsDefaultModel: undefined,
  26. mutateEmbeddingsDefaultModel: () => {},
  27. })
  28. export const useProviderContext = () => useContext(ProviderContext)
  29. type ProviderContextProviderProps = {
  30. children: React.ReactNode
  31. }
  32. export const ProviderContextProvider = ({
  33. children,
  34. }: ProviderContextProviderProps) => {
  35. const { data: embeddingsDefaultModel, mutate: mutateEmbeddingsDefaultModel } = useSWR('/workspaces/current/default-model?model_type=embeddings', fetchDefaultModal)
  36. const { data: speech2textDefaultModel, mutate: mutateSpeech2textDefaultModel } = useSWR('/workspaces/current/default-model?model_type=speech2text', fetchDefaultModal)
  37. const fetchModelListUrlPrefix = '/workspaces/current/models/model-type/'
  38. const { data: textGenerationModelList, mutate: mutateTextGenerationModelList } = useSWR(`${fetchModelListUrlPrefix}${ModelType.textGeneration}`, fetchModelList)
  39. const { data: embeddingsModelList, mutate: mutateEmbeddingsModelList } = useSWR(`${fetchModelListUrlPrefix}${ModelType.embeddings}`, fetchModelList)
  40. const { data: speech2textModelList } = useSWR(`${fetchModelListUrlPrefix}${ModelType.speech2text}`, fetchModelList)
  41. const agentThoughtModelList = textGenerationModelList?.filter((item) => {
  42. return item.features?.includes(ModelFeature.agentThought)
  43. })
  44. const updateModelList = (type: ModelType) => {
  45. if (type === ModelType.textGeneration)
  46. mutateTextGenerationModelList()
  47. if (type === ModelType.embeddings)
  48. mutateEmbeddingsModelList()
  49. }
  50. return (
  51. <ProviderContext.Provider value={{
  52. textGenerationModelList: textGenerationModelList || [],
  53. embeddingsModelList: embeddingsModelList || [],
  54. speech2textModelList: speech2textModelList || [],
  55. agentThoughtModelList: agentThoughtModelList || [],
  56. updateModelList,
  57. embeddingsDefaultModel,
  58. mutateEmbeddingsDefaultModel,
  59. speech2textDefaultModel,
  60. mutateSpeech2textDefaultModel,
  61. }}>
  62. {children}
  63. </ProviderContext.Provider>
  64. )
  65. }
  66. export default ProviderContext