From 544612770535ac1657a2769d8feef1c5722faa9d Mon Sep 17 00:00:00 2001 From: yyh Date: Tue, 9 Dec 2025 16:23:37 +0800 Subject: [PATCH] fix: review --- web/app/components/app/log/index.tsx | 32 +++++++++++++++++----------- web/app/components/app/log/list.tsx | 6 ++---- web/service/log.ts | 4 ++-- web/service/use-log.ts | 15 +++++++++---- 4 files changed, 35 insertions(+), 22 deletions(-) diff --git a/web/app/components/app/log/index.tsx b/web/app/components/app/log/index.tsx index 98a794a6bd..8cff8f3037 100644 --- a/web/app/components/app/log/index.tsx +++ b/web/app/components/app/log/index.tsx @@ -15,6 +15,7 @@ import { useChatConversations, useCompletionConversations } from '@/service/use- import { APP_PAGE_LIMIT } from '@/config' import type { App } from '@/types/app' import { AppModeEnum } from '@/types/app' +import type { ChatConversationsRequest, CompletionConversationsRequest } from '@/models/log' export type ILogsProps = { appDetail: App } @@ -71,23 +72,30 @@ const Logs: FC = ({ appDetail }) => { // Get the app type first const isChatMode = appDetail.mode !== AppModeEnum.COMPLETION - const query = useMemo(() => ({ + const completionQuery = useMemo(() => ({ page: currPage + 1, limit, - ...((debouncedQueryParams.period !== '9') - ? { - start: dayjs().subtract(TIME_PERIOD_MAPPING[debouncedQueryParams.period].value, 'day').startOf('day').format('YYYY-MM-DD HH:mm'), - end: dayjs().endOf('day').format('YYYY-MM-DD HH:mm'), - } - : {}), - ...(isChatMode ? { sort_by: debouncedQueryParams.sort_by } : {}), - ...omit(debouncedQueryParams, ['period']), - }), [currPage, debouncedQueryParams, isChatMode, limit]) + keyword: debouncedQueryParams.keyword ?? '', + annotation_status: debouncedQueryParams.annotation_status ?? 'all', + start: debouncedQueryParams.period !== '9' + ? dayjs().subtract(TIME_PERIOD_MAPPING[debouncedQueryParams.period].value, 'day').startOf('day').format('YYYY-MM-DD HH:mm') + : '', + end: debouncedQueryParams.period !== '9' + ? dayjs().endOf('day').format('YYYY-MM-DD HH:mm') + : '', + ...omit(debouncedQueryParams, ['period', 'sort_by', 'keyword', 'annotation_status']), + }), [currPage, debouncedQueryParams, limit]) + + const chatQuery = useMemo(() => ({ + ...completionQuery, + sort_by: debouncedQueryParams.sort_by, + message_count: (debouncedQueryParams as any).message_count ?? 0, + }), [completionQuery, debouncedQueryParams.sort_by, isChatMode]) // When the details are obtained, proceed to the next request - const { data: chatConversations, refetch: refetchChatList } = useChatConversations(appDetail.id, query as any, isChatMode) + const { data: chatConversations, refetch: refetchChatList } = useChatConversations(appDetail.id, chatQuery, isChatMode) - const { data: completionConversations, refetch: refetchCompletionList } = useCompletionConversations(appDetail.id, query as any, !isChatMode) + const { data: completionConversations, refetch: refetchCompletionList } = useCompletionConversations(appDetail.id, completionQuery, !isChatMode) const total = isChatMode ? chatConversations?.total : completionConversations?.total diff --git a/web/app/components/app/log/list.tsx b/web/app/components/app/log/list.tsx index 59779006ef..5907c9451a 100644 --- a/web/app/components/app/log/list.tsx +++ b/web/app/components/app/log/list.tsx @@ -935,14 +935,12 @@ const ConversationList: FC = ({ logs, appDetail, onRefresh }) router.push(buildUrlWithConversation(log.id), { scroll: false }) }, [buildUrlWithConversation, conversationIdInUrl, currentConversation, router, showDrawer]) - const currentConversationId = currentConversation?.id - useEffect(() => { if (!conversationIdInUrl) { if (pendingConversationIdRef.current) return - if (showDrawer || currentConversationId) { + if (showDrawer || currentConversation?.id) { setShowDrawer(false) setCurrentConversation(undefined) } @@ -970,7 +968,7 @@ const ConversationList: FC = ({ logs, appDetail, onRefresh }) if (pendingConversationCacheRef.current?.id === conversationIdInUrl || matchedConversation) pendingConversationCacheRef.current = undefined - }, [conversationIdInUrl, currentConversation, currentConversationId, isChatMode, logs?.data, showDrawer]) + }, [conversationIdInUrl, currentConversation, isChatMode, logs?.data, showDrawer]) const onCloseDrawer = useCallback(() => { onRefresh() diff --git a/web/service/log.ts b/web/service/log.ts index cd7f0d9b45..59ceecc618 100644 --- a/web/service/log.ts +++ b/web/service/log.ts @@ -24,13 +24,13 @@ import type { NodeTracingListResponse } from '@/types/workflow' export const fetchConversationList = ({ appId, params }: { name: string; appId: string; params?: Record }): Promise => get(`/console/api/apps/${appId}/messages`, params) // (Text Generation Application) Session List -export const fetchCompletionConversations = ({ url, params }: { url: string; params?: CompletionConversationsRequest }): Promise => get(url, { params }) +export const fetchCompletionConversations = ({ url, params }: { url: string; params?: Partial & { sort_by?: string } }): Promise => get(url, { params }) // (Text Generation Application) Session Detail export const fetchCompletionConversationDetail = ({ url }: { url: string }): Promise => get(url, {}) // (Chat Application) Session List -export const fetchChatConversations = ({ url, params }: { url: string; params?: ChatConversationsRequest }): Promise => get(url, { params }) +export const fetchChatConversations = ({ url, params }: { url: string; params?: Partial & { sort_by?: string } }): Promise => get(url, { params }) // (Chat Application) Session Detail export const fetchChatConversationDetail = ({ url }: { url: string }): Promise => get(url, {}) diff --git a/web/service/use-log.ts b/web/service/use-log.ts index 92366ea1e5..02e377c15d 100644 --- a/web/service/use-log.ts +++ b/web/service/use-log.ts @@ -35,15 +35,18 @@ type AnnotationPayload = { value: string } -export const chatConversationsKey = (appId?: string, params?: ChatConversationsRequest): QueryKey => ['chat-conversations', appId, params] -export const completionConversationsKey = (appId?: string, params?: CompletionConversationsRequest): QueryKey => ['completion-conversations', appId, params] +type ChatConversationsParams = Partial & { sort_by?: string } +type CompletionConversationsParams = Partial & { sort_by?: string } + +export const chatConversationsKey = (appId?: string, params?: ChatConversationsParams): QueryKey => ['chat-conversations', appId, params] +export const completionConversationsKey = (appId?: string, params?: CompletionConversationsParams): QueryKey => ['completion-conversations', appId, params] export const completionConversationDetailKey = (appId?: string, conversationId?: string): QueryKey => ['completion-conversation-detail', appId, conversationId] export const chatConversationDetailKey = (appId?: string, conversationId?: string): QueryKey => ['chat-conversation-detail', appId, conversationId] export const annotationsCountKey = (appId?: string): QueryKey => ['annotations-count', appId] -export const useChatConversations = (appId?: string, params?: ChatConversationsRequest, enabled = true) => { +export const useChatConversations = (appId?: string, params?: ChatConversationsParams, enabled = true) => { const queryKey = chatConversationsKey(appId, params) const queryResult = useQuery({ queryKey, @@ -54,7 +57,7 @@ export const useChatConversations = (appId?: string, params?: ChatConversationsR return { ...queryResult, queryKey } } -export const useCompletionConversations = (appId?: string, params?: CompletionConversationsRequest, enabled = true) => { +export const useCompletionConversations = (appId?: string, params?: CompletionConversationsParams, enabled = true) => { const queryKey = completionConversationsKey(appId, params) const queryResult = useQuery({ queryKey, @@ -103,6 +106,8 @@ export const useUpdateLogMessageFeedback = (appId?: string, invalidateKey?: Quer return useMutation({ mutationFn: async ({ mid, rating, content }: FeedbackPayload) => { + if (!appId) + throw new Error('appId is required to update message feedback.') return await updateLogMessageFeedbacks({ url: `/apps/${appId}/feedbacks`, body: { message_id: mid, rating, content: content ?? undefined }, @@ -120,6 +125,8 @@ export const useUpdateLogMessageAnnotation = (appId?: string, invalidateKey?: Qu return useMutation({ mutationFn: async ({ mid, value }: AnnotationPayload) => { + if (!appId) + throw new Error('appId is required to update message annotation.') return await updateLogMessageAnnotations({ url: `/apps/${appId}/annotations`, body: { message_id: mid, content: value },