Files
Moltbot/src/infra/provider-usage.shared.ts

64 lines
1.5 KiB
TypeScript

import type { UsageProviderId } from "./provider-usage.types.js";
import { normalizeProviderId } from "../agents/model-selection.js";
export const DEFAULT_TIMEOUT_MS = 5000;
export const PROVIDER_LABELS: Record<UsageProviderId, string> = {
anthropic: "Claude",
"github-copilot": "Copilot",
"google-gemini-cli": "Gemini",
"google-antigravity": "Antigravity",
minimax: "MiniMax",
"openai-codex": "Codex",
xiaomi: "Xiaomi",
zai: "z.ai",
};
export const usageProviders: UsageProviderId[] = [
"anthropic",
"github-copilot",
"google-gemini-cli",
"google-antigravity",
"minimax",
"openai-codex",
"xiaomi",
"zai",
];
export function resolveUsageProviderId(provider?: string | null): UsageProviderId | undefined {
if (!provider) {
return undefined;
}
const normalized = normalizeProviderId(provider);
return usageProviders.includes(normalized as UsageProviderId)
? (normalized as UsageProviderId)
: undefined;
}
export const ignoredErrors = new Set([
"No credentials",
"No token",
"No API key",
"Not logged in",
"No auth",
]);
export const clampPercent = (value: number) =>
Math.max(0, Math.min(100, Number.isFinite(value) ? value : 0));
export const withTimeout = async <T>(work: Promise<T>, ms: number, fallback: T): Promise<T> => {
let timeout: NodeJS.Timeout | undefined;
try {
return await Promise.race([
work,
new Promise<T>((resolve) => {
timeout = setTimeout(() => resolve(fallback), ms);
}),
]);
} finally {
if (timeout) {
clearTimeout(timeout);
}
}
};