mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2026-01-10 15:49:29 +08:00
refactor: improve llmodel group assignment logic and sorting
This commit is contained in:
parent
4df39179bb
commit
21ad4cfecc
@ -7,7 +7,7 @@ import { useProviders } from '@renderer/hooks/useProvider'
|
|||||||
import { getModelUniqId } from '@renderer/services/ModelService'
|
import { getModelUniqId } from '@renderer/services/ModelService'
|
||||||
import { Model } from '@renderer/types'
|
import { Model } from '@renderer/types'
|
||||||
import { Avatar, Divider, Empty, Input, InputRef, Menu, MenuProps, Modal } from 'antd'
|
import { Avatar, Divider, Empty, Input, InputRef, Menu, MenuProps, Modal } from 'antd'
|
||||||
import { first, reverse, sortBy } from 'lodash'
|
import { first, sortBy } from 'lodash'
|
||||||
import { useEffect, useRef, useState } from 'react'
|
import { useEffect, useRef, useState } from 'react'
|
||||||
import { useTranslation } from 'react-i18next'
|
import { useTranslation } from 'react-i18next'
|
||||||
import styled from 'styled-components'
|
import styled from 'styled-components'
|
||||||
@ -47,7 +47,7 @@ const PopupContainer: React.FC<PopupContainerProps> = ({ model, resolve }) => {
|
|||||||
await db.settings.put({ id: 'pinned:models', value: validPinnedModels })
|
await db.settings.put({ id: 'pinned:models', value: validPinnedModels })
|
||||||
}
|
}
|
||||||
|
|
||||||
setPinnedModels(validPinnedModels)
|
setPinnedModels(sortBy(validPinnedModels, ['group', 'name']))
|
||||||
}
|
}
|
||||||
loadPinnedModels()
|
loadPinnedModels()
|
||||||
}, [providers])
|
}, [providers])
|
||||||
@ -58,13 +58,13 @@ const PopupContainer: React.FC<PopupContainerProps> = ({ model, resolve }) => {
|
|||||||
: [...pinnedModels, modelId]
|
: [...pinnedModels, modelId]
|
||||||
|
|
||||||
await db.settings.put({ id: 'pinned:models', value: newPinnedModels })
|
await db.settings.put({ id: 'pinned:models', value: newPinnedModels })
|
||||||
setPinnedModels(newPinnedModels)
|
setPinnedModels(sortBy(newPinnedModels, ['group', 'name']))
|
||||||
}
|
}
|
||||||
|
|
||||||
const filteredItems: MenuItem[] = providers
|
const filteredItems: MenuItem[] = providers
|
||||||
.filter((p) => p.models && p.models.length > 0)
|
.filter((p) => p.models && p.models.length > 0)
|
||||||
.map((p) => {
|
.map((p) => {
|
||||||
const filteredModels = reverse(sortBy(p.models, 'name'))
|
const filteredModels = sortBy(p.models, ['group', 'name'])
|
||||||
.filter((m) =>
|
.filter((m) =>
|
||||||
[m.name + m.provider + t('provider.' + p.id)].join('').toLowerCase().includes(searchText.toLowerCase())
|
[m.name + m.provider + t('provider.' + p.id)].join('').toLowerCase().includes(searchText.toLowerCase())
|
||||||
)
|
)
|
||||||
|
|||||||
@ -26,7 +26,7 @@ const persistedReducer = persistReducer(
|
|||||||
{
|
{
|
||||||
key: 'cherry-studio',
|
key: 'cherry-studio',
|
||||||
storage,
|
storage,
|
||||||
version: 46,
|
version: 47,
|
||||||
blacklist: ['runtime'],
|
blacklist: ['runtime'],
|
||||||
migrate
|
migrate
|
||||||
},
|
},
|
||||||
|
|||||||
@ -3,7 +3,7 @@ import { TRANSLATE_PROMPT } from '@renderer/config/prompts'
|
|||||||
import db from '@renderer/databases'
|
import db from '@renderer/databases'
|
||||||
import i18n from '@renderer/i18n'
|
import i18n from '@renderer/i18n'
|
||||||
import { Assistant } from '@renderer/types'
|
import { Assistant } from '@renderer/types'
|
||||||
import { runAsyncFunction, uuid } from '@renderer/utils'
|
import { getDefaultGroupName, runAsyncFunction, uuid } from '@renderer/utils'
|
||||||
import { isEmpty } from 'lodash'
|
import { isEmpty } from 'lodash'
|
||||||
import { createMigrate } from 'redux-persist'
|
import { createMigrate } from 'redux-persist'
|
||||||
|
|
||||||
@ -718,6 +718,14 @@ const migrateConfig = {
|
|||||||
state.settings.translateModelPrompt = TRANSLATE_PROMPT
|
state.settings.translateModelPrompt = TRANSLATE_PROMPT
|
||||||
}
|
}
|
||||||
return state
|
return state
|
||||||
|
},
|
||||||
|
'47': (state: RootState) => {
|
||||||
|
state.llm.providers.forEach((provider) => {
|
||||||
|
provider.models.forEach((model) => {
|
||||||
|
model.group = getDefaultGroupName(model.id)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
return state
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -75,13 +75,17 @@ export const compressImage = async (file: File) => {
|
|||||||
// Converts 'gpt-3.5-turbo-16k-0613' to 'GPT-3.5-Turbo'
|
// Converts 'gpt-3.5-turbo-16k-0613' to 'GPT-3.5-Turbo'
|
||||||
// Converts 'qwen2:1.5b' to 'QWEN2'
|
// Converts 'qwen2:1.5b' to 'QWEN2'
|
||||||
export const getDefaultGroupName = (id: string) => {
|
export const getDefaultGroupName = (id: string) => {
|
||||||
|
if (id.includes('/')) {
|
||||||
|
return id.split('/')[0]
|
||||||
|
}
|
||||||
|
|
||||||
if (id.includes(':')) {
|
if (id.includes(':')) {
|
||||||
return id.split(':')[0].toUpperCase()
|
return id.split(':')[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
if (id.includes('-')) {
|
if (id.includes('-')) {
|
||||||
const parts = id.split('-')
|
const parts = id.split('-')
|
||||||
return parts[0].toUpperCase() + '-' + parts[1].toUpperCase()
|
return parts[0] + '-' + parts[1]
|
||||||
}
|
}
|
||||||
|
|
||||||
return id
|
return id
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user