Buckets:
| import { useServerSync } from "@/context/server-sync" | |
| import { decode64 } from "@/utils/base64" | |
| import { useParams } from "@solidjs/router" | |
| import { Iterable, pipe } from "effect" | |
| 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 serverSync = useServerSync() | |
| const params = useParams() | |
| const dir = createMemo(() => decode64(params.dir) ?? "") | |
| const providers = () => { | |
| if (dir()) { | |
| const [projectStore] = serverSync.child(dir()) | |
| if (projectStore.provider_ready) return projectStore.provider | |
| } | |
| return serverSync.data.provider | |
| } | |
| return { | |
| all: () => providers().all, | |
| default: () => providers().default, | |
| popular: () => | |
| pipe( | |
| providers().all, | |
| Iterable.map(([, p]) => p), | |
| Iterable.filter((p) => popularProviderSet.has(p.id)), | |
| (v) => Array.from(v), | |
| ), | |
| connected: () => { | |
| const connected = new Set(providers().connected) | |
| return pipe( | |
| providers().all, | |
| Iterable.map(([, p]) => p), | |
| Iterable.filter((p) => connected.has(p.id)), | |
| (v) => Array.from(v), | |
| ) | |
| }, | |
| paid: () => { | |
| const connected = new Set(providers().connected) | |
| return [ | |
| ...Iterable.filter( | |
| providers().all, | |
| ([id]) => | |
| connected.has(id) && | |
| (id !== "opencode" || Object.values(providers().all.get(id)?.models ?? {}).some((m) => m.cost?.input)), | |
| ), | |
| ] | |
| }, | |
| } | |
| } | |
Xet Storage Details
- Size:
- 1.67 kB
- Xet hash:
- 4267a78cb178ace01e221175f49249c4ca87d87dd5678009b87655e4b23a14e7
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.