mirror of
https://gitea.toothfairyai.com/ToothFairyAI/tf_code.git
synced 2026-04-11 03:08:41 +00:00
45 lines
1.3 KiB
TypeScript
45 lines
1.3 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",
|
|
"opencode-go",
|
|
"anthropic",
|
|
"github-copilot",
|
|
"openai",
|
|
"google",
|
|
"openrouter",
|
|
"vercel",
|
|
]
|
|
const popularProviderSet = new Set(popularProviders)
|
|
|
|
export function useProviders() {
|
|
const globalSync = useGlobalSync()
|
|
const params = useParams()
|
|
const dir = createMemo(() => decode64(params.dir) ?? "")
|
|
const providers = () => {
|
|
if (dir()) {
|
|
const [projectStore] = globalSync.child(dir())
|
|
return projectStore.provider
|
|
}
|
|
return globalSync.data.provider
|
|
}
|
|
return {
|
|
all: () => providers().all,
|
|
default: () => providers().default,
|
|
popular: () => providers().all.filter((p) => popularProviderSet.has(p.id)),
|
|
connected: () => {
|
|
const connected = new Set(providers().connected)
|
|
return providers().all.filter((p) => connected.has(p.id))
|
|
},
|
|
paid: () => {
|
|
const connected = new Set(providers().connected)
|
|
return providers().all.filter(
|
|
(p) => connected.has(p.id) && (p.id !== "opencode" || Object.values(p.models).some((m) => m.cost?.input)),
|
|
)
|
|
},
|
|
}
|
|
}
|