Files
openclaw/extensions/xiaomi/onboard.ts
NianJiu da5d1a6215 feat(xiaomi): add Token Plan provider support
Adds first-class Xiaomi Token Plan provider support with regional onboarding/configuration, token-plan key prefix validation, runtime pricing/catalog metadata, and docs/test coverage.

Keeps Token Plan model catalog discovery runtime-owned so region-specific base URLs are required and the provider cannot silently fall back to the static SGP manifest catalog.

Fixes #86169.

Verification:
- node scripts/run-vitest.mjs src/plugins/provider-discovery.runtime.test.ts extensions/xiaomi/index.test.ts src/plugins/manifest-model-catalog.test.ts src/model-catalog/manifest-planner.test.ts
- git diff --check
- autoreview --mode local: clean, no accepted/actionable findings
- CI run 26678998539: all relevant checks passed; check-prod-types failed on unrelated browser unused-function issue already present on origin/main

Co-authored-by: NianJiuZst <3235467914@qq.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-05-30 11:37:36 +02:00

109 lines
3.2 KiB
TypeScript

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<string, unknown> = {
...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),
);
}