fix: update quick assistant ID handling and improve error management in HomeWindow

This commit is contained in:
fullex 2025-06-18 17:35:05 +08:00
parent 4d553beb85
commit 97b7eebf7d
3 changed files with 32 additions and 6 deletions

View File

@ -170,7 +170,7 @@ const ModelSettings: FC = () => {
<HStack alignItems="center" gap={0}>
<StyledButton
type={!quickAssistantId ? 'primary' : 'default'}
onClick={() => dispatch(setQuickAssistantId(null))}
onClick={() => dispatch(setQuickAssistantId(''))}
selected={!quickAssistantId}>
{t('settings.models.use_model')}
</StyledButton>

View File

@ -29,7 +29,7 @@ export interface LlmState {
defaultModel: Model
topicNamingModel: Model
translateModel: Model
quickAssistantId: string | null
quickAssistantId: string
settings: LlmSettings
}
@ -534,7 +534,7 @@ export const initialState: LlmState = {
defaultModel: SYSTEM_MODELS.defaultModel[0],
topicNamingModel: SYSTEM_MODELS.defaultModel[1],
translateModel: SYSTEM_MODELS.defaultModel[2],
quickAssistantId: null,
quickAssistantId: '',
providers: INITIAL_PROVIDERS,
settings: {
ollama: {
@ -650,7 +650,7 @@ const llmSlice = createSlice({
state.translateModel = action.payload.model
},
setQuickAssistantId: (state, action: PayloadAction<string | null>) => {
setQuickAssistantId: (state, action: PayloadAction<string>) => {
state.quickAssistantId = action.payload
},
setOllamaKeepAliveTime: (state, action: PayloadAction<number>) => {

View File

@ -56,6 +56,8 @@ const HomeWindow: FC = () => {
//indicator for wether the first message is outputted
const [isOutputted, setIsOutputted] = useState(false)
const [error, setError] = useState<string | null>(null)
const { quickAssistantId } = useAppSelector((state) => state.llm)
const currentAssistant = useRef<Assistant | null>(null)
const currentTopic = useRef<Topic | null>(null)
@ -206,6 +208,11 @@ const HomeWindow: FC = () => {
setUserInputText(e.target.value)
}
const handleError = (error: Error) => {
setIsLoading(false)
setError(error.message)
}
const handleSendMessage = useCallback(
async (prompt?: string) => {
if (isEmpty(content) || !currentAssistant.current || !currentTopic.current) {
@ -247,6 +254,7 @@ const HomeWindow: FC = () => {
setIsLoading(true)
setIsOutputted(false)
setError(null)
setIsFirstMessage(false)
setUserInputText('')
@ -332,8 +340,12 @@ const HomeWindow: FC = () => {
)
}
break
case ChunkType.BLOCK_COMPLETE:
case ChunkType.ERROR:
if (!isAbortError(chunk.error)) {
throw new Error(chunk.error.message)
}
//fall through
case ChunkType.BLOCK_COMPLETE:
setIsLoading(false)
setIsOutputted(true)
currentAskId.current = ''
@ -343,7 +355,7 @@ const HomeWindow: FC = () => {
})
} catch (err) {
if (isAbortError(err)) return
// onError(err instanceof Error ? err : new Error('An error occurred'))
handleError(err instanceof Error ? err : new Error('An error occurred'))
console.error('Error fetching result:', err)
} finally {
setIsLoading(false)
@ -371,6 +383,7 @@ const HomeWindow: FC = () => {
currentTopic.current = getDefaultTopic(currentAssistant.current.id)
}
setError(null)
setRoute('home')
setUserInputText('')
}
@ -443,6 +456,8 @@ const HomeWindow: FC = () => {
topic={currentTopic.current!}
isOutputted={isOutputted}
/>
{error && <ErrorMsg>{error}</ErrorMsg>}
<Divider style={{ margin: '10px 0' }} />
<Footer key="footer" route={route} loading={isLoading} onEsc={handleEsc} />
</Container>
@ -514,4 +529,15 @@ const Main = styled.main`
overflow: hidden;
`
const ErrorMsg = styled.div`
color: var(--color-error);
background: rgba(255, 0, 0, 0.15);
border: 1px solid var(--color-error);
padding: 8px 12px;
border-radius: 4px;
margin-bottom: 12px;
font-size: 13px;
word-break: break-all;
`
export default HomeWindow