Files
e2b-dev--e2b/hooks/useModelProviderArgs.ts
T
2023-04-14 19:27:05 +00:00

35 lines
855 B
TypeScript

import { useCallback } from 'react'
import { useLocalStorage } from 'usehooks-ts'
import produce from 'immer'
import { ArgValue, ModelArgs, ModelProvider } from 'state/model'
export type Creds = {
[model in keyof typeof ModelProvider]?: {
creds?: ModelArgs
}
}
export interface MergeCreds {
(provider: ModelProvider, key: string, value?: ArgValue): void
}
function useModelProviderArgs(): [Creds, MergeCreds] {
const [creds, setCreds] = useLocalStorage<Creds>('e2b-model-creds', {})
const mergeCreds = useCallback<MergeCreds>((provider, key, value) => {
setCreds(produce(creds, d => {
if (!d[provider]?.creds) {
d[provider] = { creds: { [key]: value } }
return
}
d[provider]!.creds![key] = value
}))
}, [creds, setCreds])
return [creds, mergeCreds]
}
export default useModelProviderArgs