feat(llm,ui): add Xiaomi MiMo provider and wire icons for xiaomi-mimo / hunyuan-3d / opencode

This commit is contained in:
matevip 2026-05-07 08:18:07 +08:00
parent ad1264ff51
commit bf2ffbd62b
9 changed files with 89 additions and 0 deletions

View File

@ -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);

View File

@ -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);

View File

@ -0,0 +1 @@
<svg height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Hunyuan</title><circle cx="12" cy="12" fill="#0055E9" r="12"></circle><path d="M12 0c.518 0 1.028.033 1.528.096A6.188 6.188 0 0112.12 12.28l-.12.001c-2.99 0-5.242 2.179-5.554 5.11-.223 2.086.353 4.412 2.242 6.146C3.672 22.1 0 17.479 0 12 0 5.373 5.373 0 12 0z" fill="#A8DFF5"></path><path d="M5.286 5a2.438 2.438 0 01.682 3.38c-3.962 5.966-3.215 10.743 2.648 15.136C3.636 22.056 0 17.452 0 12c0-1.787.39-3.482 1.09-5.006.253-.435.525-.872.817-1.311A2.438 2.438 0 015.286 5z" fill="#0055E9"></path><path d="M12.98.04c.272.021.543.053.81.093.583.106 1.117.254 1.538.44 6.638 2.927 8.07 10.052 1.748 15.642a4.125 4.125 0 01-5.822-.358c-1.51-1.706-1.3-4.184.357-5.822.858-.848 3.108-1.223 4.045-2.441 1.257-1.634 2.122-6.009-2.523-7.506L12.98.039z" fill="#00BCFF"></path><path d="M13.528.096A6.187 6.187 0 0112 12.281a5.75 5.75 0 00-1.71.255c.147-.905.595-1.784 1.321-2.501.858-.848 3.108-1.223 4.045-2.441 1.27-1.651 2.14-6.104-2.676-7.554.184.014.367.033.548.056z" fill="#ECECEE"></path></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1 @@
<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>opencode</title><path d="M16 6H8v12h8V6zm4 16H4V2h16v20z"></path></svg>

After

Width:  |  Height:  |  Size: 235 B

View File

@ -0,0 +1 @@
<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>XiaomiMiMo</title><path d="M.958 15.936a.459.459 0 01.459.44v2.729a.46.46 0 01-.918 0v-2.729a.459.459 0 01.459-.44zm4.814-2.035a.46.46 0 01.553.45v4.754a.458.458 0 11-.918 0V15.48L3.74 17.202a.462.462 0 01-.655.016.462.462 0 01-.065-.082L.628 14.67a.459.459 0 01.658-.637l2.124 2.187 2.127-2.188a.46.46 0 01.235-.13zm2.068.004a.46.46 0 01.458.445v4.755a.46.46 0 01-.458.458.459.459 0 01-.458-.458V14.35a.459.459 0 01.458-.445zm1.973 2.014a.46.46 0 01.46.457v2.729a.46.46 0 01-.784.324.46.46 0 01-.134-.324v-2.729a.46.46 0 01.458-.458zm.002-2.045a.458.458 0 01.328.157l2.127 2.19 2.125-2.19a.459.459 0 01.784.318v4.756a.46.46 0 01-.455.458.46.46 0 01-.458-.458V15.48l-1.667 1.723a.46.46 0 01-.65.008l-.005-.005c0-.002-.002-.002-.004-.003l-2.455-2.534a.46.46 0 01-.008-.667.461.461 0 01.338-.128zm6.797 1.206a.46.46 0 01.53.651A1.966 1.966 0 0019.81 18.4a.462.462 0 01.623.18.46.46 0 01-.181.624 2.863 2.863 0 01-1.38.353l-.142-.004a2.88 2.88 0 01-2.393-4.263.461.461 0 01.274-.21zm.864-.931a2.884 2.884 0 013.915 3.914.46.46 0 01-.402.24l-.057-.004a.458.458 0 01-.164-.055.46.46 0 01-.182-.622 1.967 1.967 0 00-2.669-2.67.459.459 0 11-.441-.803zM9.59 6.368c1.481 0 1.696 1.202 1.696 1.654v2.648h-.917v-.432c-.26.346-.792.535-1.36.535-.133 0-1.289-.03-1.384-1.136-.082-.932.675-1.61 2.053-1.61h.691c0-.563-.367-.886-.983-.886-.44.013-.864.174-1.2.458l-.36-.664c.484-.379 1.012-.567 1.764-.567zm4.427.1c1.263 0 2.082.97 2.083 2.15 0 1.181-.824 2.154-2.083 2.154-1.26 0-2.084-.972-2.084-2.152 0-1.18.82-2.153 2.084-2.153zm6.801.015c.68 0 1.202.465 1.197 1.548v2.642H21.1V8.29c0-.312-.002-.98-.63-.98s-.628.667-.628.838v2.524h-.89V8.148c0-.17-.001-.838-.63-.838-.628 0-.628.668-.628.98v2.383h-.917v-4.03h.917V7a1.22 1.22 0 01.947-.516c.398 0 .76.193.982.686a1.321 1.321 0 011.195-.686zm-18.093.872l1.457-1.772H5.32L3.311 8.07l2.14 2.602H4.24L2.725 8.796 1.21 10.672H0L2.138 8.07.13 5.583h1.138l1.458 1.772zm4.149 3.317h-.916V6.644h.916v4.028zm16.99 0h-.916V6.644h.916v4.028zM9.925 8.71c-1.055 0-1.359.412-1.326.742.032.329.324.537.757.537a1.013 1.013 0 001.014-.968l.002-.31h-.447zM14.018 7.3c-.663 0-1.184.487-1.184 1.32 0 .832.52 1.32 1.184 1.32.662 0 1.182-.49 1.182-1.32 0-.832-.52-1.32-1.182-1.32zM6.417 5.001a.568.568 0 01.587.582.588.588 0 01-1.175 0A.57.57 0 016.417 5zm16.991 0a.57.57 0 01.592.582.588.588 0 01-1.174 0 .57.57 0 01.357-.542.572.572 0 01.225-.04z"></path></svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -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: {

View File

@ -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/v1OpenAI 兼容协议API Key 在 platform.xiaomimimo.com 申请',
openaiCompatible: '兼容 OpenAI 协议的服务通常使用 /v1 结尾的 Base URL',
},
discovery: {

View File

@ -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')
})

View File

@ -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',