* Copyright (c) 2026 The OpenDesk Team
* OpenDesk is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at: http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/
* 模型请求默认超时时间(秒)。用户未在模型配置中填写 timeout 时使用该值。
*/
export const DEFAULT_MODEL_TIMEOUT_SECONDS = 300;
* 解析 token 数输入:支持纯数字(如 128000)或整数带 k/K 后缀(如 128k、256K,按 ×1000 计算)。
* 空字符串/空白或非法格式返回 undefined(调用方按"自动估算"处理)。
*/
export function parseTokenCount(raw: string | undefined | null): number | undefined {
if (raw === undefined || raw === null) return undefined;
const trimmed = raw.trim();
if (!trimmed) return undefined;
const match = /^(\d+)([kK])?$/.exec(trimmed);
if (!match) return undefined;
const num = parseInt(match[1], 10);
const total = match[2] ? num * 1000 : num;
return Number.isSafeInteger(total) ? total : undefined;
}
* 判断 token 数输入是否非法。空值/空白视为合法(调用方按"自动估算"处理),
* 非空但无法解析为合法的非负整数或 k 格式时返回 true。
*/
export function isInvalidTokenCount(raw: string | undefined | null): boolean {
if (raw === undefined || raw === null) return false;
const trimmed = raw.trim();
if (!trimmed) return false;
return parseTokenCount(trimmed) === undefined;
}
* 解析模型请求超时时间输入(单位:秒),只接受正整数。
* 空字符串/空白或非法格式返回 undefined(调用方按默认超时处理)。
*/
export function parseTimeoutSeconds(raw: string | number | undefined | null): number | undefined {
if (raw === undefined || raw === null) return undefined;
const trimmed = String(raw).trim();
if (!trimmed) return undefined;
if (!/^\d+$/.test(trimmed)) return undefined;
const seconds = parseInt(trimmed, 10);
if (seconds <= 0 || !Number.isSafeInteger(seconds)) return undefined;
return seconds;
}
* 判断超时时间输入是否非法。空值/空白视为合法(调用方按默认超时处理),
* 非空但无法解析为正整数秒时返回 true。
*/
export function isInvalidTimeoutSeconds(raw: string | number | undefined | null): boolean {
if (raw === undefined || raw === null) return false;
const trimmed = String(raw).trim();
if (!trimmed) return false;
return parseTimeoutSeconds(trimmed) === undefined;
}