69 lines · 2.0 KB · TypeScript
RawDownload
import {  DEFAULT_MODEL_BY_PROVIDER,  type ModelCapabilities,  type ProviderKind,  type ServerProvider,  type ServerProviderModel,} from "@t3tools/contracts";import { normalizeModelSlug } from "@t3tools/shared/model"; const EMPTY_CAPABILITIES: ModelCapabilities = {  reasoningEffortLevels: [],  supportsFastMode: false,  supportsThinkingToggle: false,  contextWindowOptions: [],  promptInjectedEffortLevels: [],}; export function getProviderModels(  providers: ReadonlyArray<ServerProvider>,  provider: ProviderKind,): ReadonlyArray<ServerProviderModel> {  return providers.find((candidate) => candidate.provider === provider)?.models ?? [];} export function getProviderSnapshot(  providers: ReadonlyArray<ServerProvider>,  provider: ProviderKind,): ServerProvider | undefined {  return providers.find((candidate) => candidate.provider === provider);} export function isProviderEnabled(  providers: ReadonlyArray<ServerProvider>,  provider: ProviderKind,): boolean {  return getProviderSnapshot(providers, provider)?.enabled ?? true;} export function resolveSelectableProvider(  providers: ReadonlyArray<ServerProvider>,  provider: ProviderKind | null | undefined,): ProviderKind {  const requested = provider ?? "codex";  if (isProviderEnabled(providers, requested)) {    return requested;  }  return providers.find((candidate) => candidate.enabled)?.provider ?? requested;} export function getProviderModelCapabilities(  models: ReadonlyArray<ServerProviderModel>,  model: string | null | undefined,  provider: ProviderKind,): ModelCapabilities {  const slug = normalizeModelSlug(model, provider);  return models.find((candidate) => candidate.slug === slug)?.capabilities ?? EMPTY_CAPABILITIES;} export function getDefaultServerModel(  providers: ReadonlyArray<ServerProvider>,  provider: ProviderKind,): string {  const models = getProviderModels(providers, provider);  return (    models.find((model) => !model.isCustom)?.slug ??    models[0]?.slug ??    DEFAULT_MODEL_BY_PROVIDER[provider]  );}