feat: add updateAssistantSettings to useAssistant hook
This commit is contained in:
parent
c1a8198575
commit
e9a7735fce
@ -1,4 +1,4 @@
|
|||||||
import { useAppInitEffect } from '@renderer/hooks/useAppInitEffect'
|
import { useAppInit } from '@renderer/hooks/useAppInit'
|
||||||
import { message, Modal } from 'antd'
|
import { message, Modal } from 'antd'
|
||||||
import { findIndex, pullAt } from 'lodash'
|
import { findIndex, pullAt } from 'lodash'
|
||||||
import React, { useEffect, useState } from 'react'
|
import React, { useEffect, useState } from 'react'
|
||||||
@ -29,7 +29,7 @@ const TopViewContainer: React.FC<Props> = ({ children }) => {
|
|||||||
const [messageApi, messageContextHolder] = message.useMessage()
|
const [messageApi, messageContextHolder] = message.useMessage()
|
||||||
const [modal, modalContextHolder] = Modal.useModal()
|
const [modal, modalContextHolder] = Modal.useModal()
|
||||||
|
|
||||||
useAppInitEffect()
|
useAppInit()
|
||||||
|
|
||||||
onPop = () => {
|
onPop = () => {
|
||||||
const views = [...elements]
|
const views = [...elements]
|
||||||
|
|||||||
@ -5,7 +5,7 @@ import { setAvatar } from '@renderer/store/runtime'
|
|||||||
import { runAsyncFunction } from '@renderer/utils'
|
import { runAsyncFunction } from '@renderer/utils'
|
||||||
import { useEffect } from 'react'
|
import { useEffect } from 'react'
|
||||||
|
|
||||||
export function useAppInitEffect() {
|
export function useAppInit() {
|
||||||
const dispatch = useAppDispatch()
|
const dispatch = useAppDispatch()
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@ -1,20 +1,21 @@
|
|||||||
import { getDefaultTopic } from '@renderer/services/assistant'
|
import { getDefaultTopic } from '@renderer/services/assistant'
|
||||||
import { useAppDispatch, useAppSelector } from '@renderer/store'
|
import { useAppDispatch, useAppSelector } from '@renderer/store'
|
||||||
import {
|
import {
|
||||||
addTopic as _addTopic,
|
|
||||||
removeAllTopics as _removeAllTopics,
|
|
||||||
removeTopic as _removeTopic,
|
|
||||||
setModel as _setModel,
|
|
||||||
updateAssistants as _updateAssistants,
|
|
||||||
updateDefaultAssistant as _updateDefaultAssistant,
|
|
||||||
updateTopic as _updateTopic,
|
|
||||||
updateTopics as _updateTopics,
|
|
||||||
addAssistant,
|
addAssistant,
|
||||||
|
addTopic,
|
||||||
|
removeAllTopics,
|
||||||
removeAssistant,
|
removeAssistant,
|
||||||
updateAssistant
|
removeTopic,
|
||||||
|
setModel,
|
||||||
|
updateAssistant,
|
||||||
|
updateAssistants,
|
||||||
|
updateAssistantSettings,
|
||||||
|
updateDefaultAssistant,
|
||||||
|
updateTopic,
|
||||||
|
updateTopics
|
||||||
} from '@renderer/store/assistants'
|
} from '@renderer/store/assistants'
|
||||||
import { setDefaultModel as _setDefaultModel, setTopicNamingModel as _setTopicNamingModel } from '@renderer/store/llm'
|
import { setDefaultModel as _setDefaultModel, setTopicNamingModel as _setTopicNamingModel } from '@renderer/store/llm'
|
||||||
import { Assistant, Model, Topic } from '@renderer/types'
|
import { Assistant, AssistantSettings, Model, Topic } from '@renderer/types'
|
||||||
import localforage from 'localforage'
|
import localforage from 'localforage'
|
||||||
|
|
||||||
export function useAssistants() {
|
export function useAssistants() {
|
||||||
@ -23,9 +24,8 @@ export function useAssistants() {
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
assistants,
|
assistants,
|
||||||
updateAssistants: (assistants: Assistant[]) => dispatch(_updateAssistants(assistants)),
|
updateAssistants: (assistants: Assistant[]) => dispatch(updateAssistants(assistants)),
|
||||||
addAssistant: (assistant: Assistant) => dispatch(addAssistant(assistant)),
|
addAssistant: (assistant: Assistant) => dispatch(addAssistant(assistant)),
|
||||||
updateAssistant: (assistant: Assistant) => dispatch(updateAssistant(assistant)),
|
|
||||||
removeAssistant: (id: string) => {
|
removeAssistant: (id: string) => {
|
||||||
dispatch(removeAssistant({ id }))
|
dispatch(removeAssistant({ id }))
|
||||||
const assistant = assistants.find((a) => a.id === id)
|
const assistant = assistants.find((a) => a.id === id)
|
||||||
@ -44,17 +44,21 @@ export function useAssistant(id: string) {
|
|||||||
return {
|
return {
|
||||||
assistant,
|
assistant,
|
||||||
model: assistant?.model ?? defaultModel,
|
model: assistant?.model ?? defaultModel,
|
||||||
addTopic: (topic: Topic) => dispatch(_addTopic({ assistantId: assistant.id, topic })),
|
addTopic: (topic: Topic) => dispatch(addTopic({ assistantId: assistant.id, topic })),
|
||||||
removeTopic: (topic: Topic) => dispatch(_removeTopic({ assistantId: assistant.id, topic })),
|
removeTopic: (topic: Topic) => dispatch(removeTopic({ assistantId: assistant.id, topic })),
|
||||||
updateTopic: (topic: Topic) => dispatch(_updateTopic({ assistantId: assistant.id, topic })),
|
updateTopic: (topic: Topic) => dispatch(updateTopic({ assistantId: assistant.id, topic })),
|
||||||
updateTopics: (topics: Topic[]) => dispatch(_updateTopics({ assistantId: assistant.id, topics })),
|
updateTopics: (topics: Topic[]) => dispatch(updateTopics({ assistantId: assistant.id, topics })),
|
||||||
removeAllTopics: () => dispatch(_removeAllTopics({ assistantId: assistant.id })),
|
removeAllTopics: () => dispatch(removeAllTopics({ assistantId: assistant.id })),
|
||||||
setModel: (model: Model) => dispatch(_setModel({ assistantId: assistant.id, model }))
|
setModel: (model: Model) => dispatch(setModel({ assistantId: assistant.id, model })),
|
||||||
|
updateAssistant: (assistant: Assistant) => dispatch(updateAssistant(assistant)),
|
||||||
|
updateAssistantSettings: (settings: AssistantSettings) => {
|
||||||
|
dispatch(updateAssistantSettings({ assistantId: assistant.id, settings }))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function useDefaultAssistant() {
|
export function useDefaultAssistant() {
|
||||||
const { defaultAssistant } = useAppSelector((state) => state.assistants)
|
const defaultAssistant = useAppSelector((state) => state.assistants.defaultAssistant)
|
||||||
const dispatch = useAppDispatch()
|
const dispatch = useAppDispatch()
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@ -62,7 +66,7 @@ export function useDefaultAssistant() {
|
|||||||
...defaultAssistant,
|
...defaultAssistant,
|
||||||
topics: [getDefaultTopic()]
|
topics: [getDefaultTopic()]
|
||||||
},
|
},
|
||||||
updateDefaultAssistant: (assistant: Assistant) => dispatch(_updateDefaultAssistant({ assistant }))
|
updateDefaultAssistant: (assistant: Assistant) => dispatch(updateDefaultAssistant({ assistant }))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,11 +1,11 @@
|
|||||||
import { useAppDispatch, useAppSelector } from '@renderer/store'
|
import { useAppDispatch, useAppSelector } from '@renderer/store'
|
||||||
import {
|
import {
|
||||||
addModel as _addModel,
|
addModel,
|
||||||
removeModel as _removeModel,
|
|
||||||
updateProvider as _updateProvider,
|
|
||||||
updateProviders as _updateProviders,
|
|
||||||
addProvider,
|
addProvider,
|
||||||
removeProvider
|
removeModel,
|
||||||
|
removeProvider,
|
||||||
|
updateProvider,
|
||||||
|
updateProviders
|
||||||
} from '@renderer/store/llm'
|
} from '@renderer/store/llm'
|
||||||
import { Assistant, Model, Provider } from '@renderer/types'
|
import { Assistant, Model, Provider } from '@renderer/types'
|
||||||
import { useDefaultModel } from './useAssistant'
|
import { useDefaultModel } from './useAssistant'
|
||||||
@ -24,8 +24,8 @@ export function useProviders() {
|
|||||||
providers,
|
providers,
|
||||||
addProvider: (provider: Provider) => dispatch(addProvider(provider)),
|
addProvider: (provider: Provider) => dispatch(addProvider(provider)),
|
||||||
removeProvider: (provider: Provider) => dispatch(removeProvider(provider)),
|
removeProvider: (provider: Provider) => dispatch(removeProvider(provider)),
|
||||||
updateProvider: (provider: Provider) => dispatch(_updateProvider(provider)),
|
updateProvider: (provider: Provider) => dispatch(updateProvider(provider)),
|
||||||
updateProviders: (providers: Provider[]) => dispatch(_updateProviders(providers))
|
updateProviders: (providers: Provider[]) => dispatch(updateProviders(providers))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -48,9 +48,9 @@ export function useProvider(id: string) {
|
|||||||
return {
|
return {
|
||||||
provider,
|
provider,
|
||||||
models: provider.models,
|
models: provider.models,
|
||||||
updateProvider: (provider: Provider) => dispatch(_updateProvider(provider)),
|
updateProvider: (provider: Provider) => dispatch(updateProvider(provider)),
|
||||||
addModel: (model: Model) => dispatch(_addModel({ providerId: id, model })),
|
addModel: (model: Model) => dispatch(addModel({ providerId: id, model })),
|
||||||
removeModel: (model: Model) => dispatch(_removeModel({ providerId: id, model }))
|
removeModel: (model: Model) => dispatch(removeModel({ providerId: id, model }))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
import { QuestionCircleOutlined } from '@ant-design/icons'
|
import { QuestionCircleOutlined } from '@ant-design/icons'
|
||||||
import { DEFAULT_CONEXTCOUNT, DEFAULT_TEMPERATURE } from '@renderer/config/constant'
|
import { DEFAULT_CONEXTCOUNT, DEFAULT_TEMPERATURE } from '@renderer/config/constant'
|
||||||
import { useAssistant, useAssistants } from '@renderer/hooks/useAssistant'
|
import { useAssistant } from '@renderer/hooks/useAssistant'
|
||||||
import { Assistant } from '@renderer/types'
|
import { Assistant } from '@renderer/types'
|
||||||
import { Button, Col, InputNumber, Popover, Row, Slider, Tooltip } from 'antd'
|
import { Button, Col, InputNumber, Popover, Row, Slider, Tooltip } from 'antd'
|
||||||
import { debounce } from 'lodash'
|
import { debounce } from 'lodash'
|
||||||
@ -13,8 +13,7 @@ interface Props {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const PopoverContent: FC<Props> = (props) => {
|
const PopoverContent: FC<Props> = (props) => {
|
||||||
const { assistant } = useAssistant(props.assistant.id)
|
const { assistant, updateAssistantSettings, updateAssistant } = useAssistant(props.assistant.id)
|
||||||
const { updateAssistant } = useAssistants()
|
|
||||||
const [temperature, setTemperature] = useState(assistant?.settings?.temperature ?? DEFAULT_TEMPERATURE)
|
const [temperature, setTemperature] = useState(assistant?.settings?.temperature ?? DEFAULT_TEMPERATURE)
|
||||||
const [contextCount, setConextCount] = useState(assistant?.settings?.contextCount ?? DEFAULT_CONEXTCOUNT)
|
const [contextCount, setConextCount] = useState(assistant?.settings?.contextCount ?? DEFAULT_CONEXTCOUNT)
|
||||||
const { t } = useTranslation()
|
const { t } = useTranslation()
|
||||||
@ -22,17 +21,17 @@ const PopoverContent: FC<Props> = (props) => {
|
|||||||
const onUpdateAssistantSettings = useCallback(
|
const onUpdateAssistantSettings = useCallback(
|
||||||
debounce(
|
debounce(
|
||||||
({ _temperature, _contextCount }: { _temperature?: number; _contextCount?: number }) => {
|
({ _temperature, _contextCount }: { _temperature?: number; _contextCount?: number }) => {
|
||||||
updateAssistant({
|
updateAssistantSettings({
|
||||||
...assistant,
|
...assistant.settings,
|
||||||
settings: {
|
temperature: _temperature ?? temperature,
|
||||||
...assistant.settings,
|
contextCount: _contextCount ?? contextCount
|
||||||
temperature: _temperature ?? temperature,
|
|
||||||
contextCount: _contextCount ?? contextCount
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
1000,
|
1000,
|
||||||
{ leading: false, trailing: true }
|
{
|
||||||
|
leading: false,
|
||||||
|
trailing: true
|
||||||
|
}
|
||||||
),
|
),
|
||||||
[]
|
[]
|
||||||
)
|
)
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { CopyOutlined, DeleteOutlined, EditOutlined } from '@ant-design/icons'
|
import { CopyOutlined, DeleteOutlined, EditOutlined } from '@ant-design/icons'
|
||||||
import { DragDropContext, Draggable, Droppable, DropResult } from '@hello-pangea/dnd'
|
import { DragDropContext, Draggable, Droppable, DropResult } from '@hello-pangea/dnd'
|
||||||
import AssistantSettingPopup from '@renderer/components/Popups/AssistantSettingPopup'
|
import AssistantSettingPopup from '@renderer/components/Popups/AssistantSettingPopup'
|
||||||
import { useAssistants } from '@renderer/hooks/useAssistant'
|
import { useAssistant, useAssistants } from '@renderer/hooks/useAssistant'
|
||||||
import { getDefaultTopic } from '@renderer/services/assistant'
|
import { getDefaultTopic } from '@renderer/services/assistant'
|
||||||
import { Assistant } from '@renderer/types'
|
import { Assistant } from '@renderer/types'
|
||||||
import { droppableReorder, uuid } from '@renderer/utils'
|
import { droppableReorder, uuid } from '@renderer/utils'
|
||||||
@ -19,7 +19,8 @@ interface Props {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const Assistants: FC<Props> = ({ activeAssistant, setActiveAssistant, onCreateAssistant }) => {
|
const Assistants: FC<Props> = ({ activeAssistant, setActiveAssistant, onCreateAssistant }) => {
|
||||||
const { assistants, removeAssistant, updateAssistant, addAssistant, updateAssistants } = useAssistants()
|
const { assistants, removeAssistant, addAssistant, updateAssistants } = useAssistants()
|
||||||
|
const { updateAssistant } = useAssistant(activeAssistant.id)
|
||||||
|
|
||||||
const { t } = useTranslation()
|
const { t } = useTranslation()
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { createSlice, PayloadAction } from '@reduxjs/toolkit'
|
import { createSlice, PayloadAction } from '@reduxjs/toolkit'
|
||||||
import { getDefaultAssistant, getDefaultTopic } from '@renderer/services/assistant'
|
import { getDefaultAssistant, getDefaultTopic } from '@renderer/services/assistant'
|
||||||
import LocalStorage from '@renderer/services/storage'
|
import LocalStorage from '@renderer/services/storage'
|
||||||
import { Assistant, Model, Topic } from '@renderer/types'
|
import { Assistant, AssistantSettings, Model, Topic } from '@renderer/types'
|
||||||
import { uniqBy } from 'lodash'
|
import { uniqBy } from 'lodash'
|
||||||
|
|
||||||
export interface AssistantsState {
|
export interface AssistantsState {
|
||||||
@ -33,6 +33,16 @@ const assistantsSlice = createSlice({
|
|||||||
updateAssistant: (state, action: PayloadAction<Assistant>) => {
|
updateAssistant: (state, action: PayloadAction<Assistant>) => {
|
||||||
state.assistants = state.assistants.map((c) => (c.id === action.payload.id ? action.payload : c))
|
state.assistants = state.assistants.map((c) => (c.id === action.payload.id ? action.payload : c))
|
||||||
},
|
},
|
||||||
|
updateAssistantSettings: (state, action: PayloadAction<{ assistantId: string; settings: AssistantSettings }>) => {
|
||||||
|
state.assistants = state.assistants.map((assistant) =>
|
||||||
|
assistant.id === action.payload.assistantId
|
||||||
|
? {
|
||||||
|
...assistant,
|
||||||
|
settings: action.payload.settings
|
||||||
|
}
|
||||||
|
: assistant
|
||||||
|
)
|
||||||
|
},
|
||||||
addTopic: (state, action: PayloadAction<{ assistantId: string; topic: Topic }>) => {
|
addTopic: (state, action: PayloadAction<{ assistantId: string; topic: Topic }>) => {
|
||||||
state.assistants = state.assistants.map((assistant) =>
|
state.assistants = state.assistants.map((assistant) =>
|
||||||
assistant.id === action.payload.assistantId
|
assistant.id === action.payload.assistantId
|
||||||
@ -111,7 +121,8 @@ export const {
|
|||||||
updateTopic,
|
updateTopic,
|
||||||
updateTopics,
|
updateTopics,
|
||||||
removeAllTopics,
|
removeAllTopics,
|
||||||
setModel
|
setModel,
|
||||||
|
updateAssistantSettings
|
||||||
} = assistantsSlice.actions
|
} = assistantsSlice.actions
|
||||||
|
|
||||||
export default assistantsSlice.reducer
|
export default assistantsSlice.reducer
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user