fix(ai): switch xiaomi models to openai completions

closes #4505
This commit is contained in:
Mario Zechner
2026-05-18 00:14:31 +02:00
parent 266234047a
commit ed3904ddd3
3 changed files with 69 additions and 65 deletions

View File

@@ -2,6 +2,10 @@
## [Unreleased] ## [Unreleased]
### Fixed
- Fixed Xiaomi MiMo model metadata to use the OpenAI-compatible endpoints and `openai-completions` API, restoring multi-turn thinking/tool-call sessions ([#4505](https://github.com/earendil-works/pi/issues/4505)).
## [0.75.0] - 2026-05-17 ## [0.75.0] - 2026-05-17
### Breaking Changes ### Breaking Changes

View File

@@ -1074,10 +1074,10 @@ async function loadModelsDevData(): Promise<Model<any>[]> {
// keys from platform.xiaomimimo.com). The three `xiaomi-token-plan-*` // keys from platform.xiaomimimo.com). The three `xiaomi-token-plan-*`
// providers cover prepaid Token Plan endpoints in cn / ams / sgp. // providers cover prepaid Token Plan endpoints in cn / ams / sgp.
const xiaomiVariants = [ const xiaomiVariants = [
{ provider: "xiaomi", baseUrl: "https://api.xiaomimimo.com/anthropic" }, { provider: "xiaomi", baseUrl: "https://api.xiaomimimo.com/v1" },
{ provider: "xiaomi-token-plan-cn", baseUrl: "https://token-plan-cn.xiaomimimo.com/anthropic" }, { provider: "xiaomi-token-plan-cn", baseUrl: "https://token-plan-cn.xiaomimimo.com/v1" },
{ provider: "xiaomi-token-plan-ams", baseUrl: "https://token-plan-ams.xiaomimimo.com/anthropic" }, { provider: "xiaomi-token-plan-ams", baseUrl: "https://token-plan-ams.xiaomimimo.com/v1" },
{ provider: "xiaomi-token-plan-sgp", baseUrl: "https://token-plan-sgp.xiaomimimo.com/anthropic" }, { provider: "xiaomi-token-plan-sgp", baseUrl: "https://token-plan-sgp.xiaomimimo.com/v1" },
] as const; ] as const;
if (data.xiaomi?.models) { if (data.xiaomi?.models) {
@@ -1089,7 +1089,7 @@ async function loadModelsDevData(): Promise<Model<any>[]> {
models.push({ models.push({
id: modelId, id: modelId,
name: m.name || modelId, name: m.name || modelId,
api: "anthropic-messages", api: "openai-completions",
provider, provider,
baseUrl, baseUrl,
reasoning: m.reasoning === true, reasoning: m.reasoning === true,

View File

@@ -15876,9 +15876,9 @@ export const MODELS = {
"mimo-v2-flash": { "mimo-v2-flash": {
id: "mimo-v2-flash", id: "mimo-v2-flash",
name: "MiMo-V2-Flash", name: "MiMo-V2-Flash",
api: "anthropic-messages", api: "openai-completions",
provider: "xiaomi", provider: "xiaomi",
baseUrl: "https://api.xiaomimimo.com/anthropic", baseUrl: "https://api.xiaomimimo.com/v1",
reasoning: true, reasoning: true,
input: ["text"], input: ["text"],
cost: { cost: {
@@ -15889,13 +15889,13 @@ export const MODELS = {
}, },
contextWindow: 262144, contextWindow: 262144,
maxTokens: 65536, maxTokens: 65536,
} satisfies Model<"anthropic-messages">, } satisfies Model<"openai-completions">,
"mimo-v2-omni": { "mimo-v2-omni": {
id: "mimo-v2-omni", id: "mimo-v2-omni",
name: "MiMo-V2-Omni", name: "MiMo-V2-Omni",
api: "anthropic-messages", api: "openai-completions",
provider: "xiaomi", provider: "xiaomi",
baseUrl: "https://api.xiaomimimo.com/anthropic", baseUrl: "https://api.xiaomimimo.com/v1",
reasoning: true, reasoning: true,
input: ["text", "image"], input: ["text", "image"],
cost: { cost: {
@@ -15906,13 +15906,13 @@ export const MODELS = {
}, },
contextWindow: 262144, contextWindow: 262144,
maxTokens: 131072, maxTokens: 131072,
} satisfies Model<"anthropic-messages">, } satisfies Model<"openai-completions">,
"mimo-v2-pro": { "mimo-v2-pro": {
id: "mimo-v2-pro", id: "mimo-v2-pro",
name: "MiMo-V2-Pro", name: "MiMo-V2-Pro",
api: "anthropic-messages", api: "openai-completions",
provider: "xiaomi", provider: "xiaomi",
baseUrl: "https://api.xiaomimimo.com/anthropic", baseUrl: "https://api.xiaomimimo.com/v1",
reasoning: true, reasoning: true,
input: ["text"], input: ["text"],
cost: { cost: {
@@ -15923,13 +15923,13 @@ export const MODELS = {
}, },
contextWindow: 1048576, contextWindow: 1048576,
maxTokens: 131072, maxTokens: 131072,
} satisfies Model<"anthropic-messages">, } satisfies Model<"openai-completions">,
"mimo-v2.5": { "mimo-v2.5": {
id: "mimo-v2.5", id: "mimo-v2.5",
name: "MiMo-V2.5", name: "MiMo-V2.5",
api: "anthropic-messages", api: "openai-completions",
provider: "xiaomi", provider: "xiaomi",
baseUrl: "https://api.xiaomimimo.com/anthropic", baseUrl: "https://api.xiaomimimo.com/v1",
reasoning: true, reasoning: true,
input: ["text", "image"], input: ["text", "image"],
cost: { cost: {
@@ -15940,13 +15940,13 @@ export const MODELS = {
}, },
contextWindow: 1048576, contextWindow: 1048576,
maxTokens: 131072, maxTokens: 131072,
} satisfies Model<"anthropic-messages">, } satisfies Model<"openai-completions">,
"mimo-v2.5-pro": { "mimo-v2.5-pro": {
id: "mimo-v2.5-pro", id: "mimo-v2.5-pro",
name: "MiMo-V2.5-Pro", name: "MiMo-V2.5-Pro",
api: "anthropic-messages", api: "openai-completions",
provider: "xiaomi", provider: "xiaomi",
baseUrl: "https://api.xiaomimimo.com/anthropic", baseUrl: "https://api.xiaomimimo.com/v1",
reasoning: true, reasoning: true,
input: ["text"], input: ["text"],
cost: { cost: {
@@ -15957,15 +15957,15 @@ export const MODELS = {
}, },
contextWindow: 1048576, contextWindow: 1048576,
maxTokens: 131072, maxTokens: 131072,
} satisfies Model<"anthropic-messages">, } satisfies Model<"openai-completions">,
}, },
"xiaomi-token-plan-ams": { "xiaomi-token-plan-ams": {
"mimo-v2-flash": { "mimo-v2-flash": {
id: "mimo-v2-flash", id: "mimo-v2-flash",
name: "MiMo-V2-Flash", name: "MiMo-V2-Flash",
api: "anthropic-messages", api: "openai-completions",
provider: "xiaomi-token-plan-ams", provider: "xiaomi-token-plan-ams",
baseUrl: "https://token-plan-ams.xiaomimimo.com/anthropic", baseUrl: "https://token-plan-ams.xiaomimimo.com/v1",
reasoning: true, reasoning: true,
input: ["text"], input: ["text"],
cost: { cost: {
@@ -15976,13 +15976,13 @@ export const MODELS = {
}, },
contextWindow: 262144, contextWindow: 262144,
maxTokens: 65536, maxTokens: 65536,
} satisfies Model<"anthropic-messages">, } satisfies Model<"openai-completions">,
"mimo-v2-omni": { "mimo-v2-omni": {
id: "mimo-v2-omni", id: "mimo-v2-omni",
name: "MiMo-V2-Omni", name: "MiMo-V2-Omni",
api: "anthropic-messages", api: "openai-completions",
provider: "xiaomi-token-plan-ams", provider: "xiaomi-token-plan-ams",
baseUrl: "https://token-plan-ams.xiaomimimo.com/anthropic", baseUrl: "https://token-plan-ams.xiaomimimo.com/v1",
reasoning: true, reasoning: true,
input: ["text", "image"], input: ["text", "image"],
cost: { cost: {
@@ -15993,13 +15993,13 @@ export const MODELS = {
}, },
contextWindow: 262144, contextWindow: 262144,
maxTokens: 131072, maxTokens: 131072,
} satisfies Model<"anthropic-messages">, } satisfies Model<"openai-completions">,
"mimo-v2-pro": { "mimo-v2-pro": {
id: "mimo-v2-pro", id: "mimo-v2-pro",
name: "MiMo-V2-Pro", name: "MiMo-V2-Pro",
api: "anthropic-messages", api: "openai-completions",
provider: "xiaomi-token-plan-ams", provider: "xiaomi-token-plan-ams",
baseUrl: "https://token-plan-ams.xiaomimimo.com/anthropic", baseUrl: "https://token-plan-ams.xiaomimimo.com/v1",
reasoning: true, reasoning: true,
input: ["text"], input: ["text"],
cost: { cost: {
@@ -16010,13 +16010,13 @@ export const MODELS = {
}, },
contextWindow: 1048576, contextWindow: 1048576,
maxTokens: 131072, maxTokens: 131072,
} satisfies Model<"anthropic-messages">, } satisfies Model<"openai-completions">,
"mimo-v2.5": { "mimo-v2.5": {
id: "mimo-v2.5", id: "mimo-v2.5",
name: "MiMo-V2.5", name: "MiMo-V2.5",
api: "anthropic-messages", api: "openai-completions",
provider: "xiaomi-token-plan-ams", provider: "xiaomi-token-plan-ams",
baseUrl: "https://token-plan-ams.xiaomimimo.com/anthropic", baseUrl: "https://token-plan-ams.xiaomimimo.com/v1",
reasoning: true, reasoning: true,
input: ["text", "image"], input: ["text", "image"],
cost: { cost: {
@@ -16027,13 +16027,13 @@ export const MODELS = {
}, },
contextWindow: 1048576, contextWindow: 1048576,
maxTokens: 131072, maxTokens: 131072,
} satisfies Model<"anthropic-messages">, } satisfies Model<"openai-completions">,
"mimo-v2.5-pro": { "mimo-v2.5-pro": {
id: "mimo-v2.5-pro", id: "mimo-v2.5-pro",
name: "MiMo-V2.5-Pro", name: "MiMo-V2.5-Pro",
api: "anthropic-messages", api: "openai-completions",
provider: "xiaomi-token-plan-ams", provider: "xiaomi-token-plan-ams",
baseUrl: "https://token-plan-ams.xiaomimimo.com/anthropic", baseUrl: "https://token-plan-ams.xiaomimimo.com/v1",
reasoning: true, reasoning: true,
input: ["text"], input: ["text"],
cost: { cost: {
@@ -16044,15 +16044,15 @@ export const MODELS = {
}, },
contextWindow: 1048576, contextWindow: 1048576,
maxTokens: 131072, maxTokens: 131072,
} satisfies Model<"anthropic-messages">, } satisfies Model<"openai-completions">,
}, },
"xiaomi-token-plan-cn": { "xiaomi-token-plan-cn": {
"mimo-v2-flash": { "mimo-v2-flash": {
id: "mimo-v2-flash", id: "mimo-v2-flash",
name: "MiMo-V2-Flash", name: "MiMo-V2-Flash",
api: "anthropic-messages", api: "openai-completions",
provider: "xiaomi-token-plan-cn", provider: "xiaomi-token-plan-cn",
baseUrl: "https://token-plan-cn.xiaomimimo.com/anthropic", baseUrl: "https://token-plan-cn.xiaomimimo.com/v1",
reasoning: true, reasoning: true,
input: ["text"], input: ["text"],
cost: { cost: {
@@ -16063,13 +16063,13 @@ export const MODELS = {
}, },
contextWindow: 262144, contextWindow: 262144,
maxTokens: 65536, maxTokens: 65536,
} satisfies Model<"anthropic-messages">, } satisfies Model<"openai-completions">,
"mimo-v2-omni": { "mimo-v2-omni": {
id: "mimo-v2-omni", id: "mimo-v2-omni",
name: "MiMo-V2-Omni", name: "MiMo-V2-Omni",
api: "anthropic-messages", api: "openai-completions",
provider: "xiaomi-token-plan-cn", provider: "xiaomi-token-plan-cn",
baseUrl: "https://token-plan-cn.xiaomimimo.com/anthropic", baseUrl: "https://token-plan-cn.xiaomimimo.com/v1",
reasoning: true, reasoning: true,
input: ["text", "image"], input: ["text", "image"],
cost: { cost: {
@@ -16080,13 +16080,13 @@ export const MODELS = {
}, },
contextWindow: 262144, contextWindow: 262144,
maxTokens: 131072, maxTokens: 131072,
} satisfies Model<"anthropic-messages">, } satisfies Model<"openai-completions">,
"mimo-v2-pro": { "mimo-v2-pro": {
id: "mimo-v2-pro", id: "mimo-v2-pro",
name: "MiMo-V2-Pro", name: "MiMo-V2-Pro",
api: "anthropic-messages", api: "openai-completions",
provider: "xiaomi-token-plan-cn", provider: "xiaomi-token-plan-cn",
baseUrl: "https://token-plan-cn.xiaomimimo.com/anthropic", baseUrl: "https://token-plan-cn.xiaomimimo.com/v1",
reasoning: true, reasoning: true,
input: ["text"], input: ["text"],
cost: { cost: {
@@ -16097,13 +16097,13 @@ export const MODELS = {
}, },
contextWindow: 1048576, contextWindow: 1048576,
maxTokens: 131072, maxTokens: 131072,
} satisfies Model<"anthropic-messages">, } satisfies Model<"openai-completions">,
"mimo-v2.5": { "mimo-v2.5": {
id: "mimo-v2.5", id: "mimo-v2.5",
name: "MiMo-V2.5", name: "MiMo-V2.5",
api: "anthropic-messages", api: "openai-completions",
provider: "xiaomi-token-plan-cn", provider: "xiaomi-token-plan-cn",
baseUrl: "https://token-plan-cn.xiaomimimo.com/anthropic", baseUrl: "https://token-plan-cn.xiaomimimo.com/v1",
reasoning: true, reasoning: true,
input: ["text", "image"], input: ["text", "image"],
cost: { cost: {
@@ -16114,13 +16114,13 @@ export const MODELS = {
}, },
contextWindow: 1048576, contextWindow: 1048576,
maxTokens: 131072, maxTokens: 131072,
} satisfies Model<"anthropic-messages">, } satisfies Model<"openai-completions">,
"mimo-v2.5-pro": { "mimo-v2.5-pro": {
id: "mimo-v2.5-pro", id: "mimo-v2.5-pro",
name: "MiMo-V2.5-Pro", name: "MiMo-V2.5-Pro",
api: "anthropic-messages", api: "openai-completions",
provider: "xiaomi-token-plan-cn", provider: "xiaomi-token-plan-cn",
baseUrl: "https://token-plan-cn.xiaomimimo.com/anthropic", baseUrl: "https://token-plan-cn.xiaomimimo.com/v1",
reasoning: true, reasoning: true,
input: ["text"], input: ["text"],
cost: { cost: {
@@ -16131,15 +16131,15 @@ export const MODELS = {
}, },
contextWindow: 1048576, contextWindow: 1048576,
maxTokens: 131072, maxTokens: 131072,
} satisfies Model<"anthropic-messages">, } satisfies Model<"openai-completions">,
}, },
"xiaomi-token-plan-sgp": { "xiaomi-token-plan-sgp": {
"mimo-v2-flash": { "mimo-v2-flash": {
id: "mimo-v2-flash", id: "mimo-v2-flash",
name: "MiMo-V2-Flash", name: "MiMo-V2-Flash",
api: "anthropic-messages", api: "openai-completions",
provider: "xiaomi-token-plan-sgp", provider: "xiaomi-token-plan-sgp",
baseUrl: "https://token-plan-sgp.xiaomimimo.com/anthropic", baseUrl: "https://token-plan-sgp.xiaomimimo.com/v1",
reasoning: true, reasoning: true,
input: ["text"], input: ["text"],
cost: { cost: {
@@ -16150,13 +16150,13 @@ export const MODELS = {
}, },
contextWindow: 262144, contextWindow: 262144,
maxTokens: 65536, maxTokens: 65536,
} satisfies Model<"anthropic-messages">, } satisfies Model<"openai-completions">,
"mimo-v2-omni": { "mimo-v2-omni": {
id: "mimo-v2-omni", id: "mimo-v2-omni",
name: "MiMo-V2-Omni", name: "MiMo-V2-Omni",
api: "anthropic-messages", api: "openai-completions",
provider: "xiaomi-token-plan-sgp", provider: "xiaomi-token-plan-sgp",
baseUrl: "https://token-plan-sgp.xiaomimimo.com/anthropic", baseUrl: "https://token-plan-sgp.xiaomimimo.com/v1",
reasoning: true, reasoning: true,
input: ["text", "image"], input: ["text", "image"],
cost: { cost: {
@@ -16167,13 +16167,13 @@ export const MODELS = {
}, },
contextWindow: 262144, contextWindow: 262144,
maxTokens: 131072, maxTokens: 131072,
} satisfies Model<"anthropic-messages">, } satisfies Model<"openai-completions">,
"mimo-v2-pro": { "mimo-v2-pro": {
id: "mimo-v2-pro", id: "mimo-v2-pro",
name: "MiMo-V2-Pro", name: "MiMo-V2-Pro",
api: "anthropic-messages", api: "openai-completions",
provider: "xiaomi-token-plan-sgp", provider: "xiaomi-token-plan-sgp",
baseUrl: "https://token-plan-sgp.xiaomimimo.com/anthropic", baseUrl: "https://token-plan-sgp.xiaomimimo.com/v1",
reasoning: true, reasoning: true,
input: ["text"], input: ["text"],
cost: { cost: {
@@ -16184,13 +16184,13 @@ export const MODELS = {
}, },
contextWindow: 1048576, contextWindow: 1048576,
maxTokens: 131072, maxTokens: 131072,
} satisfies Model<"anthropic-messages">, } satisfies Model<"openai-completions">,
"mimo-v2.5": { "mimo-v2.5": {
id: "mimo-v2.5", id: "mimo-v2.5",
name: "MiMo-V2.5", name: "MiMo-V2.5",
api: "anthropic-messages", api: "openai-completions",
provider: "xiaomi-token-plan-sgp", provider: "xiaomi-token-plan-sgp",
baseUrl: "https://token-plan-sgp.xiaomimimo.com/anthropic", baseUrl: "https://token-plan-sgp.xiaomimimo.com/v1",
reasoning: true, reasoning: true,
input: ["text", "image"], input: ["text", "image"],
cost: { cost: {
@@ -16201,13 +16201,13 @@ export const MODELS = {
}, },
contextWindow: 1048576, contextWindow: 1048576,
maxTokens: 131072, maxTokens: 131072,
} satisfies Model<"anthropic-messages">, } satisfies Model<"openai-completions">,
"mimo-v2.5-pro": { "mimo-v2.5-pro": {
id: "mimo-v2.5-pro", id: "mimo-v2.5-pro",
name: "MiMo-V2.5-Pro", name: "MiMo-V2.5-Pro",
api: "anthropic-messages", api: "openai-completions",
provider: "xiaomi-token-plan-sgp", provider: "xiaomi-token-plan-sgp",
baseUrl: "https://token-plan-sgp.xiaomimimo.com/anthropic", baseUrl: "https://token-plan-sgp.xiaomimimo.com/v1",
reasoning: true, reasoning: true,
input: ["text"], input: ["text"],
cost: { cost: {
@@ -16218,7 +16218,7 @@ export const MODELS = {
}, },
contextWindow: 1048576, contextWindow: 1048576,
maxTokens: 131072, maxTokens: 131072,
} satisfies Model<"anthropic-messages">, } satisfies Model<"openai-completions">,
}, },
"zai": { "zai": {
"glm-4.5-air": { "glm-4.5-air": {