// Xiaomi setup module handles plugin onboarding behavior. import { createDefaultModelsPresetAppliers, type OpenClawConfig, } from "openclaw/plugin-sdk/provider-onboard"; import { buildXiaomiProvider, buildXiaomiTokenPlanProvider, resolveXiaomiTokenPlanBaseUrl, XIAOMI_DEFAULT_MODEL_ID, XIAOMI_PROVIDER_ID, XIAOMI_TOKEN_PLAN_DEFAULT_MODEL_ID, XIAOMI_TOKEN_PLAN_PROVIDER_ID, type XiaomiTokenPlanRegion, } from "./provider-catalog.js"; export const XIAOMI_DEFAULT_MODEL_REF = `${XIAOMI_PROVIDER_ID}/${XIAOMI_DEFAULT_MODEL_ID}`; export const XIAOMI_TOKEN_PLAN_DEFAULT_MODEL_REF = `${XIAOMI_TOKEN_PLAN_PROVIDER_ID}/${XIAOMI_TOKEN_PLAN_DEFAULT_MODEL_ID}`; const xiaomiPresetAppliers = createDefaultModelsPresetAppliers({ primaryModelRef: XIAOMI_DEFAULT_MODEL_REF, resolveParams: (_cfg: OpenClawConfig) => { const defaultProvider = buildXiaomiProvider(); return { providerId: XIAOMI_PROVIDER_ID, api: defaultProvider.api ?? "openai-completions", baseUrl: defaultProvider.baseUrl, defaultModels: defaultProvider.models ?? [], defaultModelId: XIAOMI_DEFAULT_MODEL_ID, aliases: [{ modelRef: XIAOMI_DEFAULT_MODEL_REF, alias: "Xiaomi" }], }; }, }); const xiaomiTokenPlanPresetAppliers = createDefaultModelsPresetAppliers({ primaryModelRef: XIAOMI_TOKEN_PLAN_DEFAULT_MODEL_REF, resolveParams: (_cfg: OpenClawConfig) => { const defaultProvider = buildXiaomiTokenPlanProvider(); return { providerId: XIAOMI_TOKEN_PLAN_PROVIDER_ID, api: defaultProvider.api ?? "openai-completions", baseUrl: defaultProvider.baseUrl, defaultModels: defaultProvider.models ?? [], defaultModelId: XIAOMI_TOKEN_PLAN_DEFAULT_MODEL_ID, aliases: (() => { const defaultModel = defaultProvider.models?.find( (m) => m.id === XIAOMI_TOKEN_PLAN_DEFAULT_MODEL_ID, ); return [ { modelRef: XIAOMI_TOKEN_PLAN_DEFAULT_MODEL_REF, alias: defaultModel?.name ?? "MiMo V2.5 Pro", }, ]; })(), }; }, }); function withProviderBaseUrl( cfg: OpenClawConfig, providerId: string, baseUrl: string, ): OpenClawConfig { const providers: Record = { ...cfg.models?.providers, [providerId]: { ...cfg.models?.providers?.[providerId], baseUrl, }, }; return { ...cfg, models: { ...cfg.models, providers, }, } as OpenClawConfig; } export function applyXiaomiProviderConfig(cfg: OpenClawConfig): OpenClawConfig { return xiaomiPresetAppliers.applyProviderConfig(cfg); } export function applyXiaomiConfig(cfg: OpenClawConfig): OpenClawConfig { return xiaomiPresetAppliers.applyConfig(cfg); } export function applyXiaomiTokenPlanProviderConfig( cfg: OpenClawConfig, region: XiaomiTokenPlanRegion, ): OpenClawConfig { return withProviderBaseUrl( xiaomiTokenPlanPresetAppliers.applyProviderConfig(cfg), XIAOMI_TOKEN_PLAN_PROVIDER_ID, resolveXiaomiTokenPlanBaseUrl(region), ); } export function applyXiaomiTokenPlanConfig( cfg: OpenClawConfig, region: XiaomiTokenPlanRegion, ): OpenClawConfig { return withProviderBaseUrl( xiaomiTokenPlanPresetAppliers.applyConfig(cfg), XIAOMI_TOKEN_PLAN_PROVIDER_ID, resolveXiaomiTokenPlanBaseUrl(region), ); }