omnidev / lib /best-provider.ts
kalhdrawi's picture
Reupload OmniDev clean version
743dad3
raw
history blame
1.5 kB
export const getBestProvider = async (model: string, provider?: string) => {
const lower = model?.toLowerCase?.() ?? "";
// Handle Google models without querying HF router
if (
lower.startsWith("gemini-") ||
lower.startsWith("gemma-") ||
lower.startsWith("learnlm-")
) {
return {
provider: provider && provider !== "auto" ? provider : "google",
status: "live",
// Generous context length for Gemini models; exact value varies by SKU
context_length: 1_000_000,
};
}
try {
const response = await fetch(`https://router.huggingface.co/v1/models/${model}`)
const { data } = await response.json()
let bestProvider = null;
if (provider === "auto") {
const sortedProviders = data.providers.sort((a: any, b: any) => {
if (a.status === "live" && b.status !== "live") return -1
if (a.status !== "live" && b.status === "live") return 1
return a?.pricing?.output - b?.pricing?.output + a?.pricing?.input - b?.pricing?.input
})
bestProvider = sortedProviders[0]
} else {
const providerData = data.providers.find((p: any) => p.provider === provider)
if (providerData?.status === "live") {
bestProvider = providerData
} else {
bestProvider = data.providers?.find((p: any) => p.status === "live")
}
}
return bestProvider
} catch {
// Graceful fallback
return { provider: provider || "auto", status: "unknown", context_length: 4096 }
}
}