78 lines
2.6 KiB
TypeScript
78 lines
2.6 KiB
TypeScript
export const PRODUCT_PLANNING_AI_MODEL_CONFIG_KEY = "product_planning_ai_model_config";
|
|
export const PRODUCT_PLANNING_AI_MODEL_DEFAULT_BASE_URL = "http://103.118.245.6:6081";
|
|
export const PRODUCT_PLANNING_AI_MODEL_DEFAULT_MODEL_ID = "Qwen3-VL-4B-Instruct";
|
|
|
|
export type ProductPlanningAiModelConfig = {
|
|
enabled: boolean;
|
|
providerName: string;
|
|
baseUrl: string;
|
|
apiKey: string;
|
|
modelId: string;
|
|
displayName: string;
|
|
};
|
|
|
|
function normalizeUrl(value: unknown, fallback: string) {
|
|
const normalized = String(value || "").trim().replace(/\/+$/, "");
|
|
const normalizedFallback = String(fallback || "").trim().replace(/\/+$/, "");
|
|
return normalized || normalizedFallback;
|
|
}
|
|
|
|
function normalizeSecret(value: unknown, fallback = "") {
|
|
const normalized = String(value || "").trim();
|
|
const normalizedFallback = String(fallback || "").trim();
|
|
return normalized || normalizedFallback;
|
|
}
|
|
|
|
export function defaultProductPlanningAiModelConfig(): ProductPlanningAiModelConfig {
|
|
return {
|
|
enabled: false,
|
|
providerName: "Product Planning Qwen3-VL",
|
|
baseUrl: PRODUCT_PLANNING_AI_MODEL_DEFAULT_BASE_URL,
|
|
apiKey: "",
|
|
modelId: PRODUCT_PLANNING_AI_MODEL_DEFAULT_MODEL_ID,
|
|
displayName: "商品策划专用 Qwen3-VL",
|
|
};
|
|
}
|
|
|
|
export function normalizeProductPlanningAiModelConfig(
|
|
value: unknown,
|
|
fallback?: Partial<ProductPlanningAiModelConfig>
|
|
): ProductPlanningAiModelConfig {
|
|
const raw =
|
|
value && typeof value === "object" && !Array.isArray(value)
|
|
? (value as Record<string, unknown>)
|
|
: {};
|
|
|
|
return {
|
|
enabled: raw.enabled === true,
|
|
providerName:
|
|
normalizeSecret(
|
|
raw.providerName,
|
|
fallback?.providerName || defaultProductPlanningAiModelConfig().providerName
|
|
) || defaultProductPlanningAiModelConfig().providerName,
|
|
baseUrl: normalizeUrl(
|
|
raw.baseUrl,
|
|
fallback?.baseUrl || PRODUCT_PLANNING_AI_MODEL_DEFAULT_BASE_URL
|
|
),
|
|
apiKey: normalizeSecret(raw.apiKey, fallback?.apiKey || ""),
|
|
modelId:
|
|
normalizeSecret(
|
|
raw.modelId,
|
|
fallback?.modelId || PRODUCT_PLANNING_AI_MODEL_DEFAULT_MODEL_ID
|
|
) || PRODUCT_PLANNING_AI_MODEL_DEFAULT_MODEL_ID,
|
|
displayName:
|
|
normalizeSecret(
|
|
raw.displayName,
|
|
fallback?.displayName || defaultProductPlanningAiModelConfig().displayName
|
|
) || defaultProductPlanningAiModelConfig().displayName,
|
|
};
|
|
}
|
|
|
|
export function toProductPlanningOpenAIBaseUrl(baseUrl: string) {
|
|
const normalized = normalizeUrl(baseUrl, PRODUCT_PLANNING_AI_MODEL_DEFAULT_BASE_URL);
|
|
if (/\/v1$/i.test(normalized)) {
|
|
return normalized;
|
|
}
|
|
return `${normalized}/v1`;
|
|
}
|