diff --git a/mateclaw-server/src/main/resources/db/migration/h2/V93__xiaomi_mimo_provider.sql b/mateclaw-server/src/main/resources/db/migration/h2/V93__xiaomi_mimo_provider.sql new file mode 100644 index 00000000..ea019707 --- /dev/null +++ b/mateclaw-server/src/main/resources/db/migration/h2/V93__xiaomi_mimo_provider.sql @@ -0,0 +1,36 @@ +-- V93: register Xiaomi MiMo as an OpenAI-compatible provider with a +-- pre-seeded model catalog covering the MiMo-V2.5 and MiMo-V2 families. +-- +-- Endpoint: https://api.xiaomimimo.com/v1 (OpenAI-compatible chat +-- completions schema). API keys issued by the Xiaomi MiMo platform are +-- accepted directly as bearer tokens; no special prefix is enforced. +-- Model discovery and connection check both follow the standard +-- OpenAI /v1/models contract, so they are enabled by default. + +-- -- Provider -------------------------------------------------------------- +MERGE INTO mate_model_provider (provider_id, name, api_key_prefix, chat_model, api_key, base_url, generate_kwargs, is_custom, is_local, support_model_discovery, support_connection_check, freeze_url, require_api_key, create_time, update_time) +KEY (provider_id) +VALUES ( + 'xiaomi-mimo', + 'Xiaomi MiMo', + '', + 'OpenAIChatModel', + '', + 'https://api.xiaomimimo.com/v1', + '{}', + FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, + NOW(), NOW() +); + +-- -- Model catalog --------------------------------------------------------- +-- Five entries covering the V2.5 and V2 families. Temperature defaults to +-- 0.7 to match peer OpenAI-compatible providers; max_tokens 4096 follows +-- the same conservative default used by other built-in entries. +MERGE INTO mate_model_config (id, name, provider, model_name, description, temperature, max_tokens, top_p, builtin, enabled, is_default, create_time, update_time, deleted) +KEY (id) +VALUES + (1000001200, 'MiMo V2.5 Pro', 'xiaomi-mimo', 'mimo-v2.5-pro', 'Xiaomi MiMo V2.5 Pro — latest flagship reasoning + coding model', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0), + (1000001201, 'MiMo V2.5', 'xiaomi-mimo', 'mimo-v2.5', 'Xiaomi MiMo V2.5 — balanced model in the V2.5 family', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0), + (1000001202, 'MiMo V2 Pro', 'xiaomi-mimo', 'mimo-v2-pro', 'Xiaomi MiMo V2 Pro — 1M token context window flagship', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0), + (1000001203, 'MiMo V2 Omni', 'xiaomi-mimo', 'mimo-v2-omni', 'Xiaomi MiMo V2 Omni — multimodal variant supporting text, vision, audio', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0), + (1000001204, 'MiMo V2 Flash', 'xiaomi-mimo', 'mimo-v2-flash', 'Xiaomi MiMo V2 Flash — fast, low-latency variant with 262K context', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0); diff --git a/mateclaw-server/src/main/resources/db/migration/mysql/V93__xiaomi_mimo_provider.sql b/mateclaw-server/src/main/resources/db/migration/mysql/V93__xiaomi_mimo_provider.sql new file mode 100644 index 00000000..06005447 --- /dev/null +++ b/mateclaw-server/src/main/resources/db/migration/mysql/V93__xiaomi_mimo_provider.sql @@ -0,0 +1,43 @@ +-- V93: register Xiaomi MiMo as an OpenAI-compatible provider with a +-- pre-seeded model catalog. See the H2 copy for full background. + +-- -- Provider -------------------------------------------------------------- +INSERT INTO mate_model_provider (provider_id, name, api_key_prefix, chat_model, api_key, base_url, generate_kwargs, is_custom, is_local, support_model_discovery, support_connection_check, freeze_url, require_api_key, create_time, update_time) +VALUES ( + 'xiaomi-mimo', + 'Xiaomi MiMo', + '', + 'OpenAIChatModel', + '', + 'https://api.xiaomimimo.com/v1', + '{}', + FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, + NOW(), NOW() +) +ON DUPLICATE KEY UPDATE + name = VALUES(name), + api_key_prefix = VALUES(api_key_prefix), + chat_model = VALUES(chat_model), + base_url = VALUES(base_url), + generate_kwargs = VALUES(generate_kwargs), + support_model_discovery = VALUES(support_model_discovery), + support_connection_check = VALUES(support_connection_check), + freeze_url = VALUES(freeze_url), + require_api_key = VALUES(require_api_key), + update_time = VALUES(update_time); + +-- -- Model catalog --------------------------------------------------------- +INSERT INTO mate_model_config (id, name, provider, model_name, description, temperature, max_tokens, top_p, builtin, enabled, is_default, create_time, update_time, deleted) +VALUES + (1000001200, 'MiMo V2.5 Pro', 'xiaomi-mimo', 'mimo-v2.5-pro', 'Xiaomi MiMo V2.5 Pro — latest flagship reasoning + coding model', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0), + (1000001201, 'MiMo V2.5', 'xiaomi-mimo', 'mimo-v2.5', 'Xiaomi MiMo V2.5 — balanced model in the V2.5 family', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0), + (1000001202, 'MiMo V2 Pro', 'xiaomi-mimo', 'mimo-v2-pro', 'Xiaomi MiMo V2 Pro — 1M token context window flagship', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0), + (1000001203, 'MiMo V2 Omni', 'xiaomi-mimo', 'mimo-v2-omni', 'Xiaomi MiMo V2 Omni — multimodal variant supporting text, vision, audio', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0), + (1000001204, 'MiMo V2 Flash', 'xiaomi-mimo', 'mimo-v2-flash', 'Xiaomi MiMo V2 Flash — fast, low-latency variant with 262K context', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0) +ON DUPLICATE KEY UPDATE + name = VALUES(name), + model_name = VALUES(model_name), + description = VALUES(description), + builtin = VALUES(builtin), + enabled = VALUES(enabled), + update_time = VALUES(update_time); diff --git a/mateclaw-ui/public/icons/providers/hunyuan-color.svg b/mateclaw-ui/public/icons/providers/hunyuan-color.svg new file mode 100644 index 00000000..42edd6cd --- /dev/null +++ b/mateclaw-ui/public/icons/providers/hunyuan-color.svg @@ -0,0 +1 @@ +Hunyuan \ No newline at end of file diff --git a/mateclaw-ui/public/icons/providers/opencode.svg b/mateclaw-ui/public/icons/providers/opencode.svg new file mode 100644 index 00000000..9c4cb89e --- /dev/null +++ b/mateclaw-ui/public/icons/providers/opencode.svg @@ -0,0 +1 @@ +opencode \ No newline at end of file diff --git a/mateclaw-ui/public/icons/providers/xiaomimimo.svg b/mateclaw-ui/public/icons/providers/xiaomimimo.svg new file mode 100644 index 00000000..b8ba03b8 --- /dev/null +++ b/mateclaw-ui/public/icons/providers/xiaomimimo.svg @@ -0,0 +1 @@ +XiaomiMiMo \ No newline at end of file diff --git a/mateclaw-ui/src/i18n/locales/en-US.ts b/mateclaw-ui/src/i18n/locales/en-US.ts index e2067d9d..915c0d65 100644 --- a/mateclaw-ui/src/i18n/locales/en-US.ts +++ b/mateclaw-ui/src/i18n/locales/en-US.ts @@ -645,6 +645,7 @@ export default { zhipu: 'Zhipu AI defaults to https://open.bigmodel.cn/api/paas/v4', zhipuIntl: 'Zhipu AI International uses https://open.z.ai/api/paas/v4', volcengine: 'Volcano Engine (Doubao) defaults to https://ark.cn-beijing.volces.com/api/v3, requires an endpoint created on the Volcengine Ark platform', + xiaomiMimo: 'Xiaomi MiMo defaults to https://api.xiaomimimo.com/v1 (OpenAI-compatible). API keys are issued at platform.xiaomimimo.com', openaiCompatible: 'OpenAI-compatible services usually use a Base URL ending with /v1', }, discovery: { diff --git a/mateclaw-ui/src/i18n/locales/zh-CN.ts b/mateclaw-ui/src/i18n/locales/zh-CN.ts index 7d43e5fb..3ff982e3 100644 --- a/mateclaw-ui/src/i18n/locales/zh-CN.ts +++ b/mateclaw-ui/src/i18n/locales/zh-CN.ts @@ -531,6 +531,7 @@ export default { zhipu: '智谱 AI 默认使用 https://open.bigmodel.cn/api/paas/v4', zhipuIntl: '智谱 AI 国际版使用 https://open.z.ai/api/paas/v4', volcengine: '火山引擎(豆包)默认使用 https://ark.cn-beijing.volces.com/api/v3,需要在火山方舟平台创建接入点', + xiaomiMimo: '小米 MiMo 默认使用 https://api.xiaomimimo.com/v1,OpenAI 兼容协议,API Key 在 platform.xiaomimimo.com 申请', openaiCompatible: '兼容 OpenAI 协议的服务通常使用 /v1 结尾的 Base URL', }, discovery: { diff --git a/mateclaw-ui/src/views/Settings/Models/composables/useProviderForm.ts b/mateclaw-ui/src/views/Settings/Models/composables/useProviderForm.ts index 6d5979bf..43477b6b 100644 --- a/mateclaw-ui/src/views/Settings/Models/composables/useProviderForm.ts +++ b/mateclaw-ui/src/views/Settings/Models/composables/useProviderForm.ts @@ -73,6 +73,7 @@ export function useProviderForm(deps: ListDeps) { if (id === 'zhipu-cn-codingplan') return 'https://open.bigmodel.cn/api/coding/paas/v4' if (id === 'zhipu-intl-codingplan') return 'https://api.z.ai/api/coding/paas/v4' if (id === 'volcengine') return 'https://ark.cn-beijing.volces.com/api/v3' + if (id === 'xiaomi-mimo') return 'https://api.xiaomimimo.com/v1' return 'https://example.com/v1' }) @@ -88,6 +89,7 @@ export function useProviderForm(deps: ListDeps) { if (id === 'zhipu-cn') return t('settings.model.hints.zhipu') if (id === 'zhipu-intl') return t('settings.model.hints.zhipuIntl') if (id === 'volcengine') return t('settings.model.hints.volcengine') + if (id === 'xiaomi-mimo') return t('settings.model.hints.xiaomiMimo') return t('settings.model.hints.openaiCompatible') }) diff --git a/mateclaw-ui/src/views/Settings/Models/composables/useProviderList.ts b/mateclaw-ui/src/views/Settings/Models/composables/useProviderList.ts index 5f8c07a1..e43534ba 100644 --- a/mateclaw-ui/src/views/Settings/Models/composables/useProviderList.ts +++ b/mateclaw-ui/src/views/Settings/Models/composables/useProviderList.ts @@ -100,6 +100,9 @@ export function useProviderList() { 'volcengine': '/icons/providers/volcengine.svg', // volcengine-plan = "Volcano Engine Coding Plan" — same brand, reuse mark. 'volcengine-plan': '/icons/providers/volcengine.svg', + 'xiaomi-mimo': '/icons/providers/xiaomimimo.svg', + 'hunyuan-3d': '/icons/providers/hunyuan-color.svg', + 'opencode': '/icons/providers/opencode.svg', 'siliconflow-cn': '/icons/providers/siliconcloud.svg', 'siliconflow-intl': '/icons/providers/siliconcloud.svg', 'openai-chatgpt': '/icons/providers/openai.svg',