32 lines
1.2 KiB
TypeScript
32 lines
1.2 KiB
TypeScript
import { useGlobalSync } from "@/context/global-sync"
|
|
import { decode64 } from "@/utils/base64"
|
|
import { useParams } from "@solidjs/router"
|
|
import { createMemo } from "solid-js"
|
|
|
|
export const popularProviders = ["opencode", "anthropic", "github-copilot", "openai", "google", "openrouter", "vercel"]
|
|
|
|
export function useProviders() {
|
|
const globalSync = useGlobalSync()
|
|
const params = useParams()
|
|
const currentDirectory = createMemo(() => decode64(params.dir) ?? "")
|
|
const providers = createMemo(() => {
|
|
if (currentDirectory()) {
|
|
const [projectStore] = globalSync.child(currentDirectory())
|
|
return projectStore.provider
|
|
}
|
|
return globalSync.data.provider
|
|
})
|
|
const connected = createMemo(() => providers().all.filter((p) => providers().connected.includes(p.id)))
|
|
const paid = createMemo(() =>
|
|
connected().filter((p) => p.id !== "opencode" || Object.values(p.models).find((m) => m.cost?.input)),
|
|
)
|
|
const popular = createMemo(() => providers().all.filter((p) => popularProviders.includes(p.id)))
|
|
return {
|
|
all: createMemo(() => providers().all),
|
|
default: createMemo(() => providers().default),
|
|
popular,
|
|
connected,
|
|
paid,
|
|
}
|
|
}
|