From f088069fb34e1cd79b3c711e3cfc293780b89adc Mon Sep 17 00:00:00 2001 From: Sipan <4354898+cafe3310@users.noreply.github.com> Date: Wed, 22 Oct 2025 18:25:11 +0800 Subject: [PATCH] Feature/add ling series support (#10863) * feat(Miniapp): add Ling app and according migration support. * feat(models): add Ling model support and related reasoning checks Signed-off-by: cafe3310 <4354898+cafe3310@users.noreply.github.com> * fix: resolved lint findings; simplifying model reasoning check. --------- Signed-off-by: cafe3310 <4354898+cafe3310@users.noreply.github.com> --- src/renderer/src/assets/images/apps/ling.png | Bin 0 -> 14545 bytes .../src/assets/images/models/ling.png | Bin 0 -> 14545 bytes .../src/config/__test__/reasoning.test.ts | 59 +++++++++++++++++- src/renderer/src/config/minapps.ts | 11 ++++ src/renderer/src/config/models/logo.ts | 3 + src/renderer/src/config/models/reasoning.ts | 9 +++ src/renderer/src/config/models/tooluse.ts | 4 +- src/renderer/src/i18n/locales/en-us.json | 1 + src/renderer/src/i18n/locales/zh-cn.json | 1 + src/renderer/src/i18n/locales/zh-tw.json | 1 + src/renderer/src/i18n/translate/el-gr.json | 1 + src/renderer/src/i18n/translate/es-es.json | 1 + src/renderer/src/i18n/translate/fr-fr.json | 1 + src/renderer/src/i18n/translate/ja-jp.json | 1 + src/renderer/src/i18n/translate/pt-pt.json | 1 + src/renderer/src/i18n/translate/ru-ru.json | 1 + src/renderer/src/store/migrate.ts | 9 +++ 17 files changed, 102 insertions(+), 2 deletions(-) create mode 100644 src/renderer/src/assets/images/apps/ling.png create mode 100644 src/renderer/src/assets/images/models/ling.png diff --git a/src/renderer/src/assets/images/apps/ling.png b/src/renderer/src/assets/images/apps/ling.png new file mode 100644 index 0000000000000000000000000000000000000000..22ab70692ba8562441d6a998a42f0ea19ffb1b08 GIT binary patch literal 14545 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 S@Jr_4U$eHbGp{tIME@TKX>b?- literal 0 HcmV?d00001 diff --git a/src/renderer/src/assets/images/models/ling.png b/src/renderer/src/assets/images/models/ling.png new file mode 100644 index 0000000000000000000000000000000000000000..22ab70692ba8562441d6a998a42f0ea19ffb1b08 GIT binary patch literal 14545 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 S@Jr_4U$eHbGp{tIME@TKX>b?- literal 0 HcmV?d00001 diff --git a/src/renderer/src/config/__test__/reasoning.test.ts b/src/renderer/src/config/__test__/reasoning.test.ts index 96fad861f3..e9f4bb7b73 100644 --- a/src/renderer/src/config/__test__/reasoning.test.ts +++ b/src/renderer/src/config/__test__/reasoning.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from 'vitest' -import { isDoubaoSeedAfter251015, isDoubaoThinkingAutoModel } from '../models/reasoning' +import { isDoubaoSeedAfter251015, isDoubaoThinkingAutoModel, isLingReasoningModel } from '../models/reasoning' // FIXME: Idk why it's imported. Maybe circular dependency somewhere vi.mock('@renderer/services/AssistantService.ts', () => ({ @@ -164,3 +164,60 @@ describe('Doubao Models', () => { }) }) }) +describe('Ling Models', () => { + describe('isLingReasoningModel', () => { + it('should return false for ling variants', () => { + expect( + isLingReasoningModel({ + id: 'ling-1t', + name: '', + provider: '', + group: '' + }) + ).toBe(false) + expect( + isLingReasoningModel({ + id: 'ling-flash-2.0', + name: '', + provider: '', + group: '' + }) + ).toBe(false) + expect( + isLingReasoningModel({ + id: 'ling-mini-2.0', + name: '', + provider: '', + group: '' + }) + ).toBe(false) + }) + + it('should return true for ring variants', () => { + expect( + isLingReasoningModel({ + id: 'ring-1t', + name: '', + provider: '', + group: '' + }) + ).toBe(true) + expect( + isLingReasoningModel({ + id: 'ring-flash-2.0', + name: '', + provider: '', + group: '' + }) + ).toBe(true) + expect( + isLingReasoningModel({ + id: 'ring-mini-2.0', + name: '', + provider: '', + group: '' + }) + ).toBe(true) + }) + }) +}) diff --git a/src/renderer/src/config/minapps.ts b/src/renderer/src/config/minapps.ts index 1d1a269e7c..3174e22057 100644 --- a/src/renderer/src/config/minapps.ts +++ b/src/renderer/src/config/minapps.ts @@ -25,6 +25,7 @@ import GrokXAppLogo from '@renderer/assets/images/apps/grok-x.png?url' import KimiAppLogo from '@renderer/assets/images/apps/kimi.webp?url' import LambdaChatLogo from '@renderer/assets/images/apps/lambdachat.webp?url' import LeChatLogo from '@renderer/assets/images/apps/lechat.png?url' +import LingAppLogo from '@renderer/assets/images/apps/ling.png?url' import LongCatAppLogo from '@renderer/assets/images/apps/longcat.svg?url' import MetasoAppLogo from '@renderer/assets/images/apps/metaso.webp?url' import MonicaLogo from '@renderer/assets/images/apps/monica.webp?url' @@ -460,6 +461,16 @@ const ORIGIN_DEFAULT_MIN_APPS: MinAppType[] = [ logo: LongCatAppLogo, url: 'https://longcat.chat/', bodered: true + }, + { + id: 'ling', + name: i18n.t('minapps.ant-ling'), + url: 'https://ling.tbox.cn/chat', + logo: LingAppLogo, + bodered: true, + style: { + padding: 6 + } } ] diff --git a/src/renderer/src/config/models/logo.ts b/src/renderer/src/config/models/logo.ts index ef8cc87125..9e1ef2ce21 100644 --- a/src/renderer/src/config/models/logo.ts +++ b/src/renderer/src/config/models/logo.ts @@ -84,6 +84,7 @@ import JinaModelLogo from '@renderer/assets/images/models/jina.png' import JinaModelLogoDark from '@renderer/assets/images/models/jina_dark.png' import KeLingModelLogo from '@renderer/assets/images/models/keling.png' import KeLingModelLogoDark from '@renderer/assets/images/models/keling_dark.png' +import LingModelLogo from '@renderer/assets/images/models/ling.png' import LlamaModelLogo from '@renderer/assets/images/models/llama.png' import LlamaModelLogoDark from '@renderer/assets/images/models/llama_dark.png' import LLavaModelLogo from '@renderer/assets/images/models/llava.png' @@ -289,6 +290,8 @@ export function getModelLogoById(modelId: string): string | undefined { zhipu: isLight ? ZhipuModelLogo : ZhipuModelLogoDark, longcat: LongCatAppLogo, bytedance: BytedanceModelLogo, + ling: LingModelLogo, + ring: LingModelLogo, '(V_1|V_1_TURBO|V_2|V_2A|V_2_TURBO|DESCRIBE|UPSCALE)': IdeogramModelLogo } as const satisfies Record diff --git a/src/renderer/src/config/models/reasoning.ts b/src/renderer/src/config/models/reasoning.ts index c3134b1f7d..455ec08d64 100644 --- a/src/renderer/src/config/models/reasoning.ts +++ b/src/renderer/src/config/models/reasoning.ts @@ -424,6 +424,14 @@ export const isDeepSeekHybridInferenceModel = (model: Model) => { return /deepseek-v3(?:\.\d|-\d)(?:(\.|-)\w+)?$/.test(modelId) || modelId.includes('deepseek-chat-v3.1') } +export const isLingReasoningModel = (model?: Model): boolean => { + if (!model) { + return false + } + const modelId = getLowerBaseModelName(model.id, '/') + return ['ring-1t', 'ring-mini', 'ring-flash'].some((id) => modelId.includes(id)) +} + export const isSupportedThinkingTokenDeepSeekModel = isDeepSeekHybridInferenceModel export const isZhipuReasoningModel = (model?: Model): boolean => { @@ -475,6 +483,7 @@ export function isReasoningModel(model?: Model): boolean { isZhipuReasoningModel(model) || isStepReasoningModel(model) || isDeepSeekHybridInferenceModel(model) || + isLingReasoningModel(model) || modelId.includes('magistral') || modelId.includes('minimax-m1') || modelId.includes('pangu-pro-moe') || diff --git a/src/renderer/src/config/models/tooluse.ts b/src/renderer/src/config/models/tooluse.ts index f1f27e0fd7..e2d2ffc7c6 100644 --- a/src/renderer/src/config/models/tooluse.ts +++ b/src/renderer/src/config/models/tooluse.ts @@ -25,7 +25,9 @@ export const FUNCTION_CALLING_MODELS = [ 'gemini(?:-[\\w-]+)?', // 提前排除了gemini的嵌入模型 'grok-3(?:-[\\w-]+)?', 'doubao-seed-1[.-]6(?:-[\\w-]+)?', - 'kimi-k2(?:-[\\w-]+)?' + 'kimi-k2(?:-[\\w-]+)?', + 'ling-\\w+(?:-[\\w-]+)?', + 'ring-\\w+(?:-[\\w-]+)?' ] const FUNCTION_CALLING_EXCLUDED_MODELS = [ diff --git a/src/renderer/src/i18n/locales/en-us.json b/src/renderer/src/i18n/locales/en-us.json index 84ef5a9911..e49eb7fa72 100644 --- a/src/renderer/src/i18n/locales/en-us.json +++ b/src/renderer/src/i18n/locales/en-us.json @@ -1804,6 +1804,7 @@ "title": "MinApp" }, "minapps": { + "ant-ling": "Ant Ling", "baichuan": "Baichuan", "baidu-ai-search": "Baidu AI Search", "chatglm": "ChatGLM", diff --git a/src/renderer/src/i18n/locales/zh-cn.json b/src/renderer/src/i18n/locales/zh-cn.json index b4c0864b58..e63264127e 100644 --- a/src/renderer/src/i18n/locales/zh-cn.json +++ b/src/renderer/src/i18n/locales/zh-cn.json @@ -1804,6 +1804,7 @@ "title": "小程序" }, "minapps": { + "ant-ling": "蚂蚁百灵", "baichuan": "百小应", "baidu-ai-search": "百度AI搜索", "chatglm": "智谱清言", diff --git a/src/renderer/src/i18n/locales/zh-tw.json b/src/renderer/src/i18n/locales/zh-tw.json index 749ee263cd..074b935b34 100644 --- a/src/renderer/src/i18n/locales/zh-tw.json +++ b/src/renderer/src/i18n/locales/zh-tw.json @@ -1804,6 +1804,7 @@ "title": "小工具" }, "minapps": { + "ant-ling": "Ant Ling", "baichuan": "百小應", "baidu-ai-search": "百度AI搜索", "chatglm": "智譜清言", diff --git a/src/renderer/src/i18n/translate/el-gr.json b/src/renderer/src/i18n/translate/el-gr.json index 1d5e2ea085..569820776c 100644 --- a/src/renderer/src/i18n/translate/el-gr.json +++ b/src/renderer/src/i18n/translate/el-gr.json @@ -1804,6 +1804,7 @@ "title": "Μικρόπρογραμμα" }, "minapps": { + "ant-ling": "Ant Ling", "baichuan": "Baichuan", "baidu-ai-search": "Baidu AI Search", "chatglm": "ChatGLM", diff --git a/src/renderer/src/i18n/translate/es-es.json b/src/renderer/src/i18n/translate/es-es.json index dec0ef59e5..96fdbf5127 100644 --- a/src/renderer/src/i18n/translate/es-es.json +++ b/src/renderer/src/i18n/translate/es-es.json @@ -1804,6 +1804,7 @@ "title": "Mini programa" }, "minapps": { + "ant-ling": "Ant Ling", "baichuan": "Baichuan", "baidu-ai-search": "Baidu AI Search", "chatglm": "ChatGLM", diff --git a/src/renderer/src/i18n/translate/fr-fr.json b/src/renderer/src/i18n/translate/fr-fr.json index 1f26564f5a..add50fb202 100644 --- a/src/renderer/src/i18n/translate/fr-fr.json +++ b/src/renderer/src/i18n/translate/fr-fr.json @@ -1804,6 +1804,7 @@ "title": "Mini-programme" }, "minapps": { + "ant-ling": "Ant Ling", "baichuan": "Baichuan", "baidu-ai-search": "Baidu AI Search", "chatglm": "ChatGLM", diff --git a/src/renderer/src/i18n/translate/ja-jp.json b/src/renderer/src/i18n/translate/ja-jp.json index aae0fdb3cd..154a69edf5 100644 --- a/src/renderer/src/i18n/translate/ja-jp.json +++ b/src/renderer/src/i18n/translate/ja-jp.json @@ -1804,6 +1804,7 @@ "title": "ミニアプリ" }, "minapps": { + "ant-ling": "Ant Ling", "baichuan": "百小應", "baidu-ai-search": "百度AI検索", "chatglm": "ChatGLM", diff --git a/src/renderer/src/i18n/translate/pt-pt.json b/src/renderer/src/i18n/translate/pt-pt.json index f534e7beab..75faafe889 100644 --- a/src/renderer/src/i18n/translate/pt-pt.json +++ b/src/renderer/src/i18n/translate/pt-pt.json @@ -1804,6 +1804,7 @@ "title": "Pequeno aplicativo" }, "minapps": { + "ant-ling": "Ant Ling", "baichuan": "Baichuan", "baidu-ai-search": "Baidu AI Search", "chatglm": "ChatGLM", diff --git a/src/renderer/src/i18n/translate/ru-ru.json b/src/renderer/src/i18n/translate/ru-ru.json index 04d8fde189..4b56b7b0da 100644 --- a/src/renderer/src/i18n/translate/ru-ru.json +++ b/src/renderer/src/i18n/translate/ru-ru.json @@ -1804,6 +1804,7 @@ "title": "Встроенные приложения" }, "minapps": { + "ant-ling": "Ant Ling", "baichuan": "Байчжан", "baidu-ai-search": "Baidu AI Search", "chatglm": "ChatGLM", diff --git a/src/renderer/src/store/migrate.ts b/src/renderer/src/store/migrate.ts index 09dd9cb9c9..78dee1489a 100644 --- a/src/renderer/src/store/migrate.ts +++ b/src/renderer/src/store/migrate.ts @@ -2683,6 +2683,15 @@ const migrateConfig = { logger.error('migrate 163 error', error as Error) return state } + }, + '164': (state: RootState) => { + try { + addMiniApp(state, 'ling') + return state + } catch (error) { + logger.error('migrate 164 error', error as Error) + return state + } } }