farion1231/cc-switch · warning · PiFormValidationError
pi.form.positiveNumberRequired
Error message
pi.form.positiveNumberRequired
What it means
positiveNumber in the Pi form rejects values that are empty, non-finite, or <= 0, throwing PiFormValidationError with the localized 'pi.form.positiveNumberRequired' message, the offending field's selector (e.g. '#pi-model-context-window-<key>' or '#pi-model-max-tokens-<key>'), and revealAdvanced=true so the UI can open the advanced panel. Applied to per-model contextWindow and maxTokens fields.
Source
Thrown at src/components/providers/forms/PiProviderForm.tsx:241
let parsed: URL;
try {
parsed = new URL(value);
} catch {
throw new Error(errorMessage);
}
if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
throw new Error(errorMessage);
}
}
function positiveNumber(
value: string,
errorMessage: string,
fieldSelector: string,
): number {
const parsed = Number(value);
if (value.trim() === "" || !Number.isFinite(parsed) || parsed <= 0) {
throw new PiFormValidationError(errorMessage, fieldSelector, true);
}
return parsed;
}
function supportsImageInput(value: unknown): boolean {
return Array.isArray(value) && value.includes("image");
}
function withImageInput(value: unknown, enabled: boolean): string[] {
const additionalInputTypes = Array.isArray(value)
? value.filter(
(item): item is string =>
typeof item === "string" && item !== "text" && item !== "image",
)
: [];
return [
"text",
...(enabled ? ["image"] : []),View on GitHub (pinned to a2e22f3302)
Solutions
- Enter a plain positive number without units or letters
- Validate on change and strip non-numeric characters from the field
- Default the field to a sane positive value so it is never empty
Example fix
// before
contextWindow = "10k"; // Number('10k') -> NaN -> error
// after
contextWindow = "10000"; Defensive patterns
Strategy: validation
Validate before calling
function isPositiveNumberValue(value: string): boolean {
const parsed = Number(value);
return value.trim() !== "" && Number.isFinite(parsed) && parsed > 0;
}
if (!isPositiveNumberValue(model.contextWindow)) {
setFieldError(
`#pi-model-context-window-${model.key}`,
"Enter a positive number (no units)",
);
} Type guard
function isPositiveNumberString(v: string): v is `${number}` {
const n = Number(v);
return v.trim() !== "" && Number.isFinite(n) && n > 0;
} Try / catch
try {
buildPiProviderConfig(form);
} catch (e) {
if (e instanceof PiFormValidationError && e.message.includes("positiveNumberRequired")) {
focusField(e.fieldSelector); // e.g. '#pi-model-context-window-<key>'
revealAdvancedPanel(e.revealAdvanced);
} else {
throw e;
}
} Prevention
- Enter plain numbers - strip units like 'k' or 's' before submit
- Default numeric fields to a sane positive value so they are never empty
- Filter non-numeric characters on change for contextWindow/maxTokens inputs
When it happens
Trigger: contextWindow or maxTokens field set to '0', '-1', 'abc', '' , or '1e999' (Number() -> Infinity) - Number(value) yields empty/NaN/Infinity/negative.
Common situations: Clearing a numeric field and submitting; pasting values with units ('10s', '8k'); minus-sign typos.
Related errors
- pi.form.absoluteHttpUrlRequired
- OPENCLAW_ENV_EMPTY
- OPENCLAW_ENV_INVALID_JSON
- Unsupported URL scheme
- Invalid URL
AI-assisted analysis of farion1231/cc-switch@a2e22f3302 (2026-08-16).
Data as JSON: /api/errors/eff133c4956b26d3.
Report an issue: GitHub.