Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 29 additions & 9 deletions app-prefixable/src/context/providers.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ interface ProviderContextValue {
const ProviderContext = createContext<ProviderContextValue>()

export function ProviderProvider(props: ParentProps) {
const { client, directory } = useSDK()
const { client, global: globalClient, directory } = useSDK()
const cfg = useConfig()
const storageKey = modelsStorageKey(directory)
const variantKey = variantsStorageKey(directory)
Expand Down Expand Up @@ -225,20 +225,40 @@ export function ProviderProvider(props: ParentProps) {
}
})

function normalizeProviderData(data: ProviderListData) {
const all = data.all.map((provider) => ({
...provider,
models: Object.fromEntries(
Object.entries(provider.models).map(([k, m]) => [k, { ...m, providerID: provider.id }])
),
}))
return { ...data, all }
}

// Fetch providers
const [providerData, { mutate: setProviderData, refetch: refetchProviders }] = createResource(async () => {
try {
const res = await client.provider.list()
const data = res.data as ProviderListData | undefined
if (!data) return undefined
// Inject providerID into each model since the SDK response doesn't include it
const all = data.all.map((provider) => ({
...provider,
models: Object.fromEntries(
Object.entries(provider.models).map(([k, m]) => [k, { ...m, providerID: provider.id }])
),
}))
return { ...data, all }

if (directory) {
try {
const globalRes = await globalClient.provider.list()
const globalData = globalRes.data as ProviderListData | undefined
const stale = (globalData?.connected ?? []).some((id) => !data.connected.includes(id))
if (stale) {
await client.instance.dispose()
Comment on lines +247 to +251
const refreshed = await client.provider.list()
const refreshedData = refreshed.data as ProviderListData | undefined
Comment on lines +245 to +253
if (refreshedData) return normalizeProviderData(refreshedData)
}
} catch (e) {
console.warn("Failed to refresh stale directory provider state:", e)
Comment on lines +246 to +257
}
}

return normalizeProviderData(data)
} catch (e) {
console.error("Failed to fetch providers:", e)
return undefined
Expand Down