pi-mono/packages/ai/scripts/model-generation/providers/xiaomi.ts
Claude 8d95fd138b
feat(ai): declare model catalog generation as providers and rules
Replace the single 3300-line generate-models.ts with declarative provider
definitions and ordered rule packs under scripts/model-generation/.

Each provider is a defineProvider() call: an upstream source (usually the
generic modelsDev() mapper), static models upstream lacks, and rules scoped
to that provider. Cross-provider facts live in rule packs applied in a fixed
order. Every rule() carries a why, matches models with plain data, and
patches them with typed set/replace/apply semantics.

Generated model data is unchanged: 1443 models across 41 providers compare
equal against a snapshot of the same upstream responses, apart from a now
stable key order. Committed models.generated.ts and provider shards are
byte-identical.

Also:
- Bring packages/ai/scripts under tsgo and biome; the old generator had 20+
  type errors that nothing checked.
- Add --upstream-snapshot <dir> to record and replay upstream catalogs and
  --explain <provider>:<model> to list the rules applied to a model.
- Report rules that matched no model so stale corrections get removed.
- Export parseRadiusGatewayConfig so the generator can replay Radius too.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ExCU9zaZnN8vB5fKpTAjP
2026-09-20 16:03:22 +00:00

30 lines
1.2 KiB
TypeScript

import type { OpenAICompletionsCompat } from "../../../src/types.ts";
import { defineProvider, type ProviderDefinition } from "../dsl.ts";
import { modelsDev } from "../models-dev.ts";
// Built-in `xiaomi` targets the API billing endpoint (single stable URL, keys from
// platform.xiaomimimo.com). The three `xiaomi-token-plan-*` providers cover prepaid
// Token Plan endpoints in cn / ams / sgp.
const XIAOMI_COMPAT: OpenAICompletionsCompat = {
requiresReasoningContentOnAssistantMessages: true,
thinkingFormat: "deepseek",
};
function xiaomiProvider(id: string, baseUrl: string): ProviderDefinition {
return defineProvider({
id,
source: modelsDev({
provider: id,
key: id,
api: "openai-completions",
baseUrl,
compat: XIAOMI_COMPAT,
skipDeprecated: true,
}),
});
}
export const xiaomi = xiaomiProvider("xiaomi", "https://api.xiaomimimo.com/v1");
export const xiaomiTokenPlanCn = xiaomiProvider("xiaomi-token-plan-cn", "https://token-plan-cn.xiaomimimo.com/v1");
export const xiaomiTokenPlanAms = xiaomiProvider("xiaomi-token-plan-ams", "https://token-plan-ams.xiaomimimo.com/v1");
export const xiaomiTokenPlanSgp = xiaomiProvider("xiaomi-token-plan-sgp", "https://token-plan-sgp.xiaomimimo.com/v1");