@@ -31,7 +31,7 @@ import {
3131 tryFixVariableSlicer ,
3232 workOutTimeRangeSlicers
3333} from '@metad/ocap-core'
34- import { race } from '@metad/server-common'
34+ import { getErrorMessage , race } from '@metad/server-common'
3535import { firstValueFrom , Subject , takeUntil } from 'rxjs'
3636import { ChatBIConversation } from '../conversation'
3737import { ChatLarkMessage } from '../message'
@@ -63,52 +63,46 @@ export function createChatAnswerTool(context: ChatContext, larkContext: ChatBILa
6363 async ( answer ) : Promise < string > => {
6464 logger . debug ( `Execute copilot action 'answerQuestion':` , JSON . stringify ( answer , null , 2 ) )
6565 try {
66- try {
67- // 限制总体超时时间
68- return await race (
69- ChatBIConversation . toolCallTimeout ,
70- ( async ( ) => {
71- let entityType = null
72- if ( answer . dataSettings ) {
73- // Make sure datasource exists
74- const _dataSource = await dsCoreService . _getDataSource ( answer . dataSettings . dataSource )
75- const entity = await firstValueFrom (
76- dsCoreService . selectEntitySet (
77- answer . dataSettings . dataSource ,
78- answer . dataSettings . entitySet
79- )
66+ // 限制总体超时时间
67+ return await race (
68+ ChatBIConversation . toolCallTimeout ,
69+ ( async ( ) => {
70+ let entityType = null
71+ if ( answer . dataSettings ) {
72+ // Make sure datasource exists
73+ const _dataSource = await dsCoreService . _getDataSource ( answer . dataSettings . dataSource )
74+ const entity = await firstValueFrom (
75+ dsCoreService . selectEntitySet (
76+ answer . dataSettings . dataSource ,
77+ answer . dataSettings . entitySet
8078 )
81- entityType = entity . entityType
82- }
83-
84- // Fetch data for chart or table or kpi
85- if ( answer . dimensions ?. length || answer . measures ?. length ) {
86- const { categoryMembers } = await drawChartMessage (
87- { ...context , entityType : entityType || context . entityType } ,
88- conversation ,
89- answer as ChatAnswer
90- )
91- // Max limit 20 members
92- const members = categoryMembers
93- ? JSON . stringify ( Object . values ( categoryMembers ) . slice ( 0 , 20 ) )
94- : 'Empty'
79+ )
80+ entityType = entity . entityType
81+ }
9582
96- return `The analysis data has been displayed to the user. The dimension members involved in this data analysis are:
83+ // Fetch data for chart or table or kpi
84+ if ( answer . dimensions ?. length || answer . measures ?. length ) {
85+ const { categoryMembers } = await drawChartMessage (
86+ { ...context , entityType : entityType || context . entityType } ,
87+ conversation ,
88+ answer as ChatAnswer
89+ )
90+ // Max limit 20 members
91+ const members = categoryMembers
92+ ? JSON . stringify ( Object . values ( categoryMembers ) . slice ( 0 , 20 ) )
93+ : 'Empty'
94+
95+ return `The analysis data has been displayed to the user. The dimension members involved in this data analysis are:
9796${ members }
9897Please give more analysis suggestions about other dimensions or filter by dimensioin members, 3 will be enough.`
99- }
100-
101- return `图表答案已经回复给用户了,请不要重复回答了。`
102- } ) ( )
103- )
104- } catch ( err ) {
105- throw new Error (
106- `Timeout in getting cube context (dataSource=${ answer . dataSettings . dataSource } , cube=${ answer . dataSettings . entitySet } )`
107- )
108- }
98+ }
99+
100+ return `图表答案已经回复给用户了,请不要重复回答了。`
101+ } ) ( )
102+ )
109103 } catch ( err ) {
110- logger . error ( err )
111- return `Error: ${ err } 。如果需要用户提供更多信息,请直接提醒用户。 `
104+ logger . debug ( getErrorMessage ( err ) )
105+ return `Error: ${ getErrorMessage ( err ) } ; If more information is needed from the user, remind the user directly. `
112106 }
113107 } ,
114108 {
0 commit comments