102 lines
2.8 KiB
TypeScript
102 lines
2.8 KiB
TypeScript
import i18n from '@renderer/i18n'
|
|
import store from '@renderer/store'
|
|
import { updateAgent } from '@renderer/store/agents'
|
|
import { updateAssistant } from '@renderer/store/assistants'
|
|
import { Agent, Assistant, Model, Provider, Topic } from '@renderer/types'
|
|
import { getLeadingEmoji, removeLeadingEmoji, uuid } from '@renderer/utils'
|
|
|
|
export function getDefaultAssistant(): Assistant {
|
|
return {
|
|
id: 'default',
|
|
name: i18n.t('chat.default.name'),
|
|
prompt: '',
|
|
topics: [getDefaultTopic()]
|
|
}
|
|
}
|
|
|
|
export function getDefaultTopic(): Topic {
|
|
return {
|
|
id: uuid(),
|
|
name: i18n.t('chat.default.topic.name'),
|
|
messages: []
|
|
}
|
|
}
|
|
|
|
export function getDefaultProvider() {
|
|
return getProviderByModel(getDefaultModel())
|
|
}
|
|
|
|
export function getDefaultModel() {
|
|
return store.getState().llm.defaultModel
|
|
}
|
|
|
|
export function getTopNamingModel() {
|
|
return store.getState().llm.topicNamingModel
|
|
}
|
|
|
|
export function getTranslateModel() {
|
|
return store.getState().llm.translateModel
|
|
}
|
|
|
|
export function getAssistantProvider(assistant: Assistant): Provider {
|
|
const providers = store.getState().llm.providers
|
|
const provider = providers.find((p) => p.id === assistant.model?.provider)
|
|
return provider || getDefaultProvider()
|
|
}
|
|
|
|
export function getProviderByModel(model?: Model) {
|
|
const providers = store.getState().llm.providers
|
|
const providerId = model ? model.provider : getDefaultProvider().id
|
|
return providers.find((p) => p.id === providerId) as Provider
|
|
}
|
|
|
|
export function getProviderByModelId(modelId?: string) {
|
|
const providers = store.getState().llm.providers
|
|
const _modelId = modelId || getDefaultModel().id
|
|
return providers.find((p) => p.models.find((m) => m.id === _modelId)) as Provider
|
|
}
|
|
|
|
export function covertAgentToAssistant(agent: Agent): Assistant {
|
|
return {
|
|
...getDefaultAssistant(),
|
|
...agent,
|
|
name: getAssistantNameWithAgent(agent),
|
|
id: agent.group === 'system' ? uuid() : String(agent.id)
|
|
}
|
|
}
|
|
|
|
export function getAssistantNameWithAgent(agent: Agent) {
|
|
return agent.emoji ? agent.emoji + ' ' + agent.name : agent.name
|
|
}
|
|
|
|
export function syncAsistantToAgent(assistant: Assistant) {
|
|
const agents = store.getState().agents.agents
|
|
const agent = agents.find((a) => a.id === assistant.id)
|
|
|
|
if (agent) {
|
|
store.dispatch(
|
|
updateAgent({
|
|
...agent,
|
|
emoji: getLeadingEmoji(assistant.name),
|
|
name: removeLeadingEmoji(assistant.name),
|
|
prompt: assistant.prompt
|
|
})
|
|
)
|
|
}
|
|
}
|
|
|
|
export function syncAgentToAssistant(agent: Agent) {
|
|
const assistants = store.getState().assistants.assistants
|
|
const assistant = assistants.find((a) => a.id === agent.id)
|
|
|
|
if (assistant) {
|
|
store.dispatch(
|
|
updateAssistant({
|
|
...assistant,
|
|
name: getAssistantNameWithAgent(agent),
|
|
prompt: agent.prompt
|
|
})
|
|
)
|
|
}
|
|
}
|