@c8y/ngx-components 1023.68.3 → 1023.68.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ai/agent-chat/index.d.ts +28 -5
- package/ai/agent-chat/index.d.ts.map +1 -1
- package/context-dashboard/index.d.ts +1 -0
- package/context-dashboard/index.d.ts.map +1 -1
- package/echart/index.d.ts +6 -2
- package/echart/index.d.ts.map +1 -1
- package/echart/models/index.d.ts +6 -1
- package/echart/models/index.d.ts.map +1 -1
- package/fesm2022/c8y-ngx-components-ai-agent-chat.mjs +33 -5
- package/fesm2022/c8y-ngx-components-ai-agent-chat.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ai-agents-html.mjs +4 -0
- package/fesm2022/c8y-ngx-components-ai-agents-html.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs +1 -0
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-echart-models.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget-ai-config.mjs +7 -2
- package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget-ai-config.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +16 -21
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/index.d.ts.map +1 -1
- package/locales/de.po +3 -0
- package/locales/es.po +3 -0
- package/locales/fr.po +3 -0
- package/locales/ja_JP.po +3 -0
- package/locales/ko.po +3 -0
- package/locales/locales.pot +3 -0
- package/locales/nl.po +3 -0
- package/locales/pl.po +3 -0
- package/locales/pt_BR.po +3 -0
- package/locales/zh_CN.po +3 -0
- package/locales/zh_TW.po +3 -0
- package/package.json +1 -1
package/ai/agent-chat/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { OnInit, OnDestroy, Type, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';
|
|
3
3
|
import { ClientAgentDefinition, ToolResult, AIMessageStreamSteps, AgentStep, AIMessage } from '@c8y/ngx-components/ai';
|
|
4
|
-
import { BehaviorSubject, OperatorFunction } from 'rxjs';
|
|
4
|
+
import { BehaviorSubject, OperatorFunction, Observable } from 'rxjs';
|
|
5
5
|
|
|
6
6
|
declare class AgentChatComponent implements OnInit, OnDestroy {
|
|
7
7
|
private _agent;
|
|
@@ -80,11 +80,34 @@ declare class WidgetAiChatSectionComponent implements OnInit {
|
|
|
80
80
|
headline: "Welcome!";
|
|
81
81
|
title: string;
|
|
82
82
|
welcomeText: any;
|
|
83
|
-
variables: {
|
|
84
|
-
[key: string]: any;
|
|
85
|
-
};
|
|
86
83
|
useContextAsVariable: boolean;
|
|
87
84
|
contextVariableName: string;
|
|
85
|
+
private variables$;
|
|
86
|
+
/**
|
|
87
|
+
* If set, the variables will be loaded async on each round-trip.
|
|
88
|
+
* This is useful if the variables depend on some async data source or if they need to be updated on each round-trip.
|
|
89
|
+
*
|
|
90
|
+
* @example
|
|
91
|
+
* ```ts
|
|
92
|
+
* variables = combineLatest([
|
|
93
|
+
* this.someService.getData(),
|
|
94
|
+
* this.anotherService.getOtherData()
|
|
95
|
+
* ]).pipe(
|
|
96
|
+
* map(([data, otherData]) => ({
|
|
97
|
+
* myVarOne: data,
|
|
98
|
+
* myVarTwo: otherData
|
|
99
|
+
* }))
|
|
100
|
+
* );
|
|
101
|
+
* ```
|
|
102
|
+
*/
|
|
103
|
+
set variables(val: Observable<{
|
|
104
|
+
[key: string]: any;
|
|
105
|
+
}> | {
|
|
106
|
+
[key: string]: any;
|
|
107
|
+
});
|
|
108
|
+
get variables(): Observable<{
|
|
109
|
+
[key: string]: any;
|
|
110
|
+
}>;
|
|
88
111
|
_renderStepComponent: Type<any>;
|
|
89
112
|
private readonly widgetConfigService;
|
|
90
113
|
private readonly alertService;
|
|
@@ -112,7 +135,7 @@ declare class WidgetAiChatSectionComponent implements OnInit {
|
|
|
112
135
|
*/
|
|
113
136
|
toolResultHandler(tool: ToolResult): void;
|
|
114
137
|
static ɵfac: i0.ɵɵFactoryDeclaration<WidgetAiChatSectionComponent, never>;
|
|
115
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<WidgetAiChatSectionComponent, "c8y-widget-ai-chat-section", never, { "suggestions": { "alias": "suggestions"; "required": false; }; "agent": { "alias": "agent"; "required": false; }; "headline": { "alias": "headline"; "required": false; }; "title": { "alias": "title"; "required": false; }; "welcomeText": { "alias": "welcomeText"; "required": false; }; "
|
|
138
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<WidgetAiChatSectionComponent, "c8y-widget-ai-chat-section", never, { "suggestions": { "alias": "suggestions"; "required": false; }; "agent": { "alias": "agent"; "required": false; }; "headline": { "alias": "headline"; "required": false; }; "title": { "alias": "title"; "required": false; }; "welcomeText": { "alias": "welcomeText"; "required": false; }; "useContextAsVariable": { "alias": "useContextAsVariable"; "required": false; }; "contextVariableName": { "alias": "contextVariableName"; "required": false; }; "variables": { "alias": "variables"; "required": false; }; "loadRenderStepComponent": { "alias": "loadRenderStepComponent"; "required": false; }; }, {}, never, never, true, never>;
|
|
116
139
|
}
|
|
117
140
|
|
|
118
141
|
export { AgentChatComponent, AgentStepFeedbackComponent, WidgetAiChatSectionComponent };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sources":["../../../ai/agent-chat/agent-chat.component.ts","../../../ai/agent-chat/agent-step-feedback.component.ts","../../../ai/agent-chat/widget-ai-chat-section.component.ts"],"sourcesContent":[null,null,null],"names":[],"mappings":";;;;;AAgDA,cAAA,kBAAA,YAAA,MAAA,EAAA,SAAA;;AAmBE,8BAAA,qBAAA;AAWS;;;;AAA6D;;;;AAI7D;AACA;AACA,yBAAA,IAAA;AAEC,oBAAA,YAAA;AACA,mBAAA,YAAA;AACA,qBAAA,YAAA;AACA,kBAAA,YAAA,CAAA,UAAA;AAEV;AAEA;;AAEG;AACH,eAAA,eAAA,CAAA,oBAAA;;AAIA,qBAAA,qBAAA;AACA;AACA;AACA;AACA;;;;;;;;;AAcA,kCAAA,gBAAA,CAAA,SAAA;AAEI,iBAAA,IAAA;;AAAgD;AAc9C,gBAAA,OAAA;;AAkDN;;AAYA,2BAAA,oBAAA;;;;AAsEA;AAoCA;;;AAyCD;;ACzUD,cAAA,0BAAA,YAAA,MAAA,EAAA,SAAA;;;AAsBW;AACA;AACA;AAET;AAMA,yBAAA,aAAA;AAMA,gCAAA,SAAA;;;AAoBD;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sources":["../../../ai/agent-chat/agent-chat.component.ts","../../../ai/agent-chat/agent-step-feedback.component.ts","../../../ai/agent-chat/widget-ai-chat-section.component.ts"],"sourcesContent":[null,null,null],"names":[],"mappings":";;;;;AAgDA,cAAA,kBAAA,YAAA,MAAA,EAAA,SAAA;;AAmBE,8BAAA,qBAAA;AAWS;;;;AAA6D;;;;AAI7D;AACA;AACA,yBAAA,IAAA;AAEC,oBAAA,YAAA;AACA,mBAAA,YAAA;AACA,qBAAA,YAAA;AACA,kBAAA,YAAA,CAAA,UAAA;AAEV;AAEA;;AAEG;AACH,eAAA,eAAA,CAAA,oBAAA;;AAIA,qBAAA,qBAAA;AACA;AACA;AACA;AACA;;;;;;;;;AAcA,kCAAA,gBAAA,CAAA,SAAA;AAEI,iBAAA,IAAA;;AAAgD;AAc9C,gBAAA,OAAA;;AAkDN;;AAYA,2BAAA,oBAAA;;;;AAsEA;AAoCA;;;AAyCD;;ACzUD,cAAA,0BAAA,YAAA,MAAA,EAAA,SAAA;;;AAsBW;AACA;AACA;AAET;AAMA,yBAAA,aAAA;AAMA,gCAAA,SAAA;;;AAoBD;;AC3DD,cAAA,4BAAA,YAAA,MAAA;;;;AAQsD;AAEpD,oBAAA,qBAAA;AAEA;;AAIA;AAEA;AAEA;;AAGA;;;;;;;;;;;;;;;;AAgBG;AACH,uBAAA,UAAA;AACgC;AAAoB;AAAM;;;AAO5B;AAAoB;AAIlD,0BAAA,IAAA;AAEA;AACA;AACA;AAEA;;;;;AAKG;;AAKH;;;;AAIG;;AAGH;;AAEG;AACG,gBAAA,OAAA;AAWN;;;AAGG;;;;AAoBJ;;;;"}
|
|
@@ -50,6 +50,7 @@ declare const DASHBOARD_SETTINGS_CHANGES: {
|
|
|
50
50
|
readonly widgetMargin: "widget margin";
|
|
51
51
|
readonly icon: "icon";
|
|
52
52
|
readonly name: "name";
|
|
53
|
+
readonly description: "description";
|
|
53
54
|
readonly priority: "priority";
|
|
54
55
|
readonly c8y_IsNavigatorNode: "navigator item";
|
|
55
56
|
readonly translateWidgetTitle: "translate widget title";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sources":["../../context-dashboard/add-dashboard.component.ts","../../context-dashboard/add-dashboard.factory.ts","../../context-dashboard/context-dashboard.model.ts","../../context-dashboard/context-dashboard.service.ts","../../context-dashboard/dashboard-detail.service.ts","../../context-dashboard/dashboard-detail.component.ts","../../context-dashboard/memento/dashboard-originator.service.ts","../../context-dashboard/memento/dashboard-caretaker.service.ts","../../context-dashboard/memento/dashboard-edit-mode.service.ts","../../context-dashboard/widget.service.ts","../../context-dashboard/context-dashboard.component.ts","../../context-dashboard/widget-config/appearance-settings.component.ts","../../context-dashboard/type-dashboard-info/type-dashboard-info.component.ts","../../context-dashboard/widget-config-hook/widget-config-hook.model.ts","../../context-dashboard/widget-config-hook/widget-config-hook.service.ts","../../context-dashboard/widget-config.service.ts","../../context-dashboard/widget-config/widget-config-root.component.ts","../../context-dashboard/widget-config.component.ts","../../context-dashboard/widget-config/widget-preview.component.ts","../../context-dashboard/widget-config/widget-config-section.component.ts","../../context-dashboard/widget-config/widget-preview-wrapper.component.ts","../../context-dashboard/paste-dashboard-action.component.ts","../../context-dashboard/context-dashboard.module.ts","../../context-dashboard/dashboard-action-bar.factory.ts","../../context-dashboard/device-info-dashboard/device-info-dashboard.component.ts","../../context-dashboard/device-info-dashboard/device-info-dashboard.module.ts","../../context-dashboard/device-management-home-dashboard/device-management-home-dashboard.component.ts","../../context-dashboard/device-management-home-dashboard/device-management-home-dashboard.module.ts","../../context-dashboard/widget-config/widget-config-appearance.component.ts","../../context-dashboard/widget-config/widget-config-general.component.ts","../../context-dashboard/widget-config/widget-asset-selector.component.ts","../../context-dashboard/new-dashboard.guard.ts","../../context-dashboard/widget-config/global-context-section.component.ts","../../context-dashboard/widget-config/widget-config-feedback.component.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAKA;AAQI;AACA;AADQ;;;;AAoBX;;ACpBD;AACE;;;;AAMM;;AAoCP;;ACzCD;AACA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sources":["../../context-dashboard/add-dashboard.component.ts","../../context-dashboard/add-dashboard.factory.ts","../../context-dashboard/context-dashboard.model.ts","../../context-dashboard/context-dashboard.service.ts","../../context-dashboard/dashboard-detail.service.ts","../../context-dashboard/dashboard-detail.component.ts","../../context-dashboard/memento/dashboard-originator.service.ts","../../context-dashboard/memento/dashboard-caretaker.service.ts","../../context-dashboard/memento/dashboard-edit-mode.service.ts","../../context-dashboard/widget.service.ts","../../context-dashboard/context-dashboard.component.ts","../../context-dashboard/widget-config/appearance-settings.component.ts","../../context-dashboard/type-dashboard-info/type-dashboard-info.component.ts","../../context-dashboard/widget-config-hook/widget-config-hook.model.ts","../../context-dashboard/widget-config-hook/widget-config-hook.service.ts","../../context-dashboard/widget-config.service.ts","../../context-dashboard/widget-config/widget-config-root.component.ts","../../context-dashboard/widget-config.component.ts","../../context-dashboard/widget-config/widget-preview.component.ts","../../context-dashboard/widget-config/widget-config-section.component.ts","../../context-dashboard/widget-config/widget-preview-wrapper.component.ts","../../context-dashboard/paste-dashboard-action.component.ts","../../context-dashboard/context-dashboard.module.ts","../../context-dashboard/dashboard-action-bar.factory.ts","../../context-dashboard/device-info-dashboard/device-info-dashboard.component.ts","../../context-dashboard/device-info-dashboard/device-info-dashboard.module.ts","../../context-dashboard/device-management-home-dashboard/device-management-home-dashboard.component.ts","../../context-dashboard/device-management-home-dashboard/device-management-home-dashboard.module.ts","../../context-dashboard/widget-config/widget-config-appearance.component.ts","../../context-dashboard/widget-config/widget-config-general.component.ts","../../context-dashboard/widget-config/widget-asset-selector.component.ts","../../context-dashboard/new-dashboard.guard.ts","../../context-dashboard/widget-config/global-context-section.component.ts","../../context-dashboard/widget-config/widget-config-feedback.component.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":[],"mappings":"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"}
|
package/echart/index.d.ts
CHANGED
|
@@ -7,8 +7,8 @@ import { AlarmDetails, EventDetails, SelectedDatapoint } from '@c8y/ngx-componen
|
|
|
7
7
|
import { TooltipFormatterCallback, ECBasicOption } from 'echarts/types/src/util/types';
|
|
8
8
|
import { TopLevelFormatterParams } from 'echarts/types/src/component/tooltip/TooltipModel';
|
|
9
9
|
import { DateTimeContext, TimeInterval, RefreshOption, GlobalContextDisplayMode } from '@c8y/ngx-components/global-context';
|
|
10
|
+
import { WidgetDisplaySettings, DynamicComponentAlertAggregator } from '@c8y/ngx-components';
|
|
10
11
|
import { Observable } from 'rxjs';
|
|
11
|
-
import { DynamicComponentAlertAggregator } from '@c8y/ngx-components';
|
|
12
12
|
import { Interval } from '@c8y/ngx-components/interval-picker';
|
|
13
13
|
import * as _c8y_ngx_components_dist_global_context from '@c8y/ngx-components/dist/global-context';
|
|
14
14
|
import { SafeHtml } from '@angular/platform-browser';
|
|
@@ -18,8 +18,9 @@ type DatapointsGraphKPIDetails = KPIDetails & {
|
|
|
18
18
|
renderType?: DatapointChartRenderType;
|
|
19
19
|
};
|
|
20
20
|
type DatapointsGraphWidgetConfig = {
|
|
21
|
+
eventSourceId?: string | null;
|
|
21
22
|
activeAlarmTypesOutOfRange?: string[];
|
|
22
|
-
aggregatedDatapoint?: DatapointsGraphKPIDetails;
|
|
23
|
+
aggregatedDatapoint?: DatapointsGraphKPIDetails | null;
|
|
23
24
|
alarmsEventsConfigs?: AlarmOrEventExtended[];
|
|
24
25
|
datapoints?: DatapointsGraphKPIDetails[] | null;
|
|
25
26
|
dataPointLegendDisplay?: string | null;
|
|
@@ -30,6 +31,8 @@ type DatapointsGraphWidgetConfig = {
|
|
|
30
31
|
displayDateSelection?: boolean | null;
|
|
31
32
|
displayMarkedLine?: boolean;
|
|
32
33
|
displayMarkedPoint?: boolean;
|
|
34
|
+
displaySettings?: WidgetDisplaySettings;
|
|
35
|
+
isGlobalContextReady?: boolean;
|
|
33
36
|
mergeMatchingDatapoints?: boolean;
|
|
34
37
|
forceMergeDatapoints?: boolean;
|
|
35
38
|
setYaxisStartToZero?: boolean;
|
|
@@ -37,6 +40,7 @@ type DatapointsGraphWidgetConfig = {
|
|
|
37
40
|
realtime?: boolean | null;
|
|
38
41
|
showLabelAndUnit?: boolean;
|
|
39
42
|
showSlider?: boolean | null;
|
|
43
|
+
source?: string | null;
|
|
40
44
|
sliderChange?: boolean | null;
|
|
41
45
|
xAxisSplitLines?: boolean | null;
|
|
42
46
|
yAxisSplitLines?: boolean | null;
|
package/echart/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sources":["../../echart/models/datapoints-graph-widget.model.ts","../../echart/models/chart.model.ts","../../echart/models/svg-icons.model.ts","../../echart/charts.component.ts","../../echart/services/chart-alarms.service.ts","../../echart/services/chart-events.service.ts","../../echart/services/chart-helpers.service.ts","../../echart/chart-alerts/chart-alerts.component.ts","../../echart/select-aggregated-datapoint/select-aggregated-datapoint.component.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null],"names":[],"mappings":";;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sources":["../../echart/models/datapoints-graph-widget.model.ts","../../echart/models/chart.model.ts","../../echart/models/svg-icons.model.ts","../../echart/charts.component.ts","../../echart/services/chart-alarms.service.ts","../../echart/services/chart-events.service.ts","../../echart/services/chart-helpers.service.ts","../../echart/chart-alerts/chart-alerts.component.ts","../../echart/select-aggregated-datapoint/select-aggregated-datapoint.component.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null],"names":[],"mappings":";;;;;;;;;;;;;;;AAoBM;;;;AAKA;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;AASA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;;;;;;;;;;AAWI;;;;;;;;;;AAUJ;;;AAIF;AAyBM;;AAEJ;AACA;;AAGI;;;AAIN;;AAEG;;AAGG;AAIN;AACE;AACA;AACD;AAED;AACM;;AAEL;AAED;;;;AAIM;;;;;;;AAQL;AAED;;;;;AAUE;;;;;AAGD;;AAGC;;AAEA;;AAEE;;AAEF;;;AACD;;;;;;;AAQC;AACA;AACD;AAEK;AACA;AAEA;AAEA;AAEN;;;;AAKA;;;;;;;;;;;;;AAcM;AACA;AAEA;;;;AAKA;;;;;;;;;;;AAYL;AAED;;;;;;;;AAUE;AACA;AACD;;AC9OD;;;;;;AAMG;AACH;AACE;;;;AAIA;;;AACD;;;AAIA;;;AAIA;AAEK;AACA;AACJ;AACE;AACD;AACF;;AAGC;AACA;AACD;AAED;AACE;AACA;AACA;AACD;;AC3CD;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACD;AAED;;;;;;;;;;;AC4DA;AA4BE;;AAEA;;;;;;;;AAQA;;;;;;AAMK;AACK;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEV;;;;AASA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AAsDA;;;;;AA2JuB;;;AAA4B;AAiDnD;AAOA;AAIA;AAwBA;AA6BA;AAWA;;;;;;AAMG;AACH;AAoCA;;;;;AAKG;AACH;;AA6CA;AAeA;AA0BA;;AA8DA;;;AA6MA;AAiEA;AAsDA;AAkBA;AAWA;AAYA;;;AA6BD;;ACriCD;AAEc;AAAQ;AAEpB;;;;;AAKG;AACG;;;AAqCP;;AC/CD;AAEc;AAAQ;AAEpB;;;;;AAKG;AACG;;;AAuBP;;AChCD;AAEE;;;;AAIG;;;;;;;;;;;AAcH;AAcA;;;AAGD;;AC9BD;;AAQmC;AAEjC;;;;AAQD;;ACVD;;AAqBW;AACC;AAEV;;AAGA;;;AAiBA;;;AAgBD;;;"}
|
package/echart/models/index.d.ts
CHANGED
|
@@ -5,14 +5,16 @@ import { AlarmDetails, EventDetails } from '@c8y/ngx-components/alarm-event-sele
|
|
|
5
5
|
import { TooltipFormatterCallback, ECBasicOption } from 'echarts/types/src/util/types';
|
|
6
6
|
import { TopLevelFormatterParams } from 'echarts/types/src/component/tooltip/TooltipModel';
|
|
7
7
|
import { DateTimeContext, TimeInterval, RefreshOption, GlobalContextDisplayMode } from '@c8y/ngx-components/global-context';
|
|
8
|
+
import { WidgetDisplaySettings } from '@c8y/ngx-components';
|
|
8
9
|
|
|
9
10
|
type DatapointsGraphKPIDetails = KPIDetails & {
|
|
10
11
|
lineType?: DatapointLineType;
|
|
11
12
|
renderType?: DatapointChartRenderType;
|
|
12
13
|
};
|
|
13
14
|
type DatapointsGraphWidgetConfig = {
|
|
15
|
+
eventSourceId?: string | null;
|
|
14
16
|
activeAlarmTypesOutOfRange?: string[];
|
|
15
|
-
aggregatedDatapoint?: DatapointsGraphKPIDetails;
|
|
17
|
+
aggregatedDatapoint?: DatapointsGraphKPIDetails | null;
|
|
16
18
|
alarmsEventsConfigs?: AlarmOrEventExtended[];
|
|
17
19
|
datapoints?: DatapointsGraphKPIDetails[] | null;
|
|
18
20
|
dataPointLegendDisplay?: string | null;
|
|
@@ -23,6 +25,8 @@ type DatapointsGraphWidgetConfig = {
|
|
|
23
25
|
displayDateSelection?: boolean | null;
|
|
24
26
|
displayMarkedLine?: boolean;
|
|
25
27
|
displayMarkedPoint?: boolean;
|
|
28
|
+
displaySettings?: WidgetDisplaySettings;
|
|
29
|
+
isGlobalContextReady?: boolean;
|
|
26
30
|
mergeMatchingDatapoints?: boolean;
|
|
27
31
|
forceMergeDatapoints?: boolean;
|
|
28
32
|
setYaxisStartToZero?: boolean;
|
|
@@ -30,6 +34,7 @@ type DatapointsGraphWidgetConfig = {
|
|
|
30
34
|
realtime?: boolean | null;
|
|
31
35
|
showLabelAndUnit?: boolean;
|
|
32
36
|
showSlider?: boolean | null;
|
|
37
|
+
source?: string | null;
|
|
33
38
|
sliderChange?: boolean | null;
|
|
34
39
|
xAxisSplitLines?: boolean | null;
|
|
35
40
|
yAxisSplitLines?: boolean | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sources":["../../../echart/models/datapoints-graph-widget.model.ts","../../../echart/models/chart.model.ts","../../../echart/models/svg-icons.model.ts"],"sourcesContent":[null,null,null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sources":["../../../echart/models/datapoints-graph-widget.model.ts","../../../echart/models/chart.model.ts","../../../echart/models/svg-icons.model.ts"],"sourcesContent":[null,null,null],"names":[],"mappings":";;;;;;;;;AAoBM;;;;AAKA;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;AASA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;;;;;;;;;;AAWI;;;;;;;;;;AAUJ;;;AAIF;AAyBM;;AAEJ;AACA;;AAGI;;;AAIN;;AAEG;;AAGG;AAIN;AACE;AACA;AACD;AAED;AACM;;AAEL;AAED;;;;AAIM;;;;;;;AAQL;AAED;;;;;AAUE;;;;;AAGD;;AAGC;;AAEA;;AAEE;;AAEF;;;AACD;;;;;;;AAQC;AACA;AACD;AAEK;AACA;AAEA;AAEA;AAEN;;;;AAKA;;;;;;;;;;;;;AAcM;AACA;AAEA;;;;AAKA;;;;;;;;;;;AAYL;AAED;;;;;;;;AAUE;AACA;AACD;;AC9OD;;;;;;AAMG;AACH;AACE;;;;AAIA;;;AACD;;;AAIA;;;AAIA;AAEK;AACA;AACJ;AACE;AACD;AACF;;AAGC;AACA;AACD;AAED;AACE;AACA;AACA;AACD;;AC3CD;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACD;AAED;;;;;;;;;;;;"}
|
|
@@ -5,7 +5,7 @@ import { ListGroupComponent, ListItemComponent, ListItemCollapseComponent, ListI
|
|
|
5
5
|
import { AIService } from '@c8y/ngx-components/ai';
|
|
6
6
|
import { AiChatComponent, AiChatSuggestionComponent, AiChatMessageComponent, AiChatMessageActionComponent } from '@c8y/ngx-components/ai/ai-chat';
|
|
7
7
|
import { gettext } from '@c8y/ngx-components/gettext';
|
|
8
|
-
import { BehaviorSubject, map, firstValueFrom, of } from 'rxjs';
|
|
8
|
+
import { BehaviorSubject, map, firstValueFrom, of, isObservable } from 'rxjs';
|
|
9
9
|
import { WidgetConfigService, WidgetConfigFeedbackComponent } from '@c8y/ngx-components/context-dashboard';
|
|
10
10
|
|
|
11
11
|
class AgentStepFeedbackComponent {
|
|
@@ -352,6 +352,34 @@ class WidgetAiChatSectionComponent {
|
|
|
352
352
|
*/
|
|
353
353
|
this.onToolResult = () => undefined;
|
|
354
354
|
}
|
|
355
|
+
/**
|
|
356
|
+
* If set, the variables will be loaded async on each round-trip.
|
|
357
|
+
* This is useful if the variables depend on some async data source or if they need to be updated on each round-trip.
|
|
358
|
+
*
|
|
359
|
+
* @example
|
|
360
|
+
* ```ts
|
|
361
|
+
* variables = combineLatest([
|
|
362
|
+
* this.someService.getData(),
|
|
363
|
+
* this.anotherService.getOtherData()
|
|
364
|
+
* ]).pipe(
|
|
365
|
+
* map(([data, otherData]) => ({
|
|
366
|
+
* myVarOne: data,
|
|
367
|
+
* myVarTwo: otherData
|
|
368
|
+
* }))
|
|
369
|
+
* );
|
|
370
|
+
* ```
|
|
371
|
+
*/
|
|
372
|
+
set variables(val) {
|
|
373
|
+
if (isObservable(val)) {
|
|
374
|
+
this.variables$ = val;
|
|
375
|
+
}
|
|
376
|
+
else {
|
|
377
|
+
this.variables$ = of(val);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
get variables() {
|
|
381
|
+
return this.variables$;
|
|
382
|
+
}
|
|
355
383
|
/**
|
|
356
384
|
* @ignore
|
|
357
385
|
*/
|
|
@@ -386,11 +414,11 @@ class WidgetAiChatSectionComponent {
|
|
|
386
414
|
}
|
|
387
415
|
}
|
|
388
416
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: WidgetAiChatSectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
389
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: WidgetAiChatSectionComponent, isStandalone: true, selector: "c8y-widget-ai-chat-section", inputs: { suggestions: "suggestions", agent: "agent", headline: "headline", title: "title", welcomeText: "welcomeText",
|
|
417
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: WidgetAiChatSectionComponent, isStandalone: true, selector: "c8y-widget-ai-chat-section", inputs: { suggestions: "suggestions", agent: "agent", headline: "headline", title: "title", welcomeText: "welcomeText", useContextAsVariable: "useContextAsVariable", contextVariableName: "contextVariableName", variables: "variables", loadRenderStepComponent: "loadRenderStepComponent" }, ngImport: i0, template: "<c8y-widget-config-feedback>\n <div\n class=\"m-l-4 btn-ai btn-ai-hint btn-sm\"\n [title]=\"'AI code assistant' | translate\"\n >\n <span></span>\n </div>\n</c8y-widget-config-feedback>\n\n<c8y-agent-chat\n [title]=\"title | translate\"\n [headline]=\"headline | translate\"\n [welcomeText]=\"welcomeText | translate\"\n #agentChat\n [suggestions]=\"(agentChat.messages$ | async)?.length === 0 ? suggestions : []\"\n [agent]=\"agent\"\n [variables]=\"variables | async\"\n [stepRenderComponent]=\"_renderStepComponent\"\n (onToolResult)=\"toolResultHandler($event)\"\n></c8y-agent-chat>\n", dependencies: [{ kind: "component", type: AgentChatComponent, selector: "c8y-agent-chat", inputs: ["agent", "suggestions", "title", "headline", "welcomeText", "autoInstallAgents", "variables", "stepRenderComponent"], outputs: ["onMessageDelta", "onMessageText", "onMessageFinish", "onToolResult"] }, { kind: "component", type: WidgetConfigFeedbackComponent, selector: "c8y-widget-config-feedback" }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }] }); }
|
|
390
418
|
}
|
|
391
419
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: WidgetAiChatSectionComponent, decorators: [{
|
|
392
420
|
type: Component,
|
|
393
|
-
args: [{ selector: 'c8y-widget-ai-chat-section', imports: [AgentChatComponent, C8yTranslatePipe, AsyncPipe, WidgetConfigFeedbackComponent], standalone: true, template: "<c8y-widget-config-feedback>\n <div\n class=\"m-l-4 btn-ai btn-ai-hint btn-sm\"\n [title]=\"'AI code assistant' | translate\"\n >\n <span></span>\n </div>\n</c8y-widget-config-feedback>\n\n<c8y-agent-chat\n [title]=\"title | translate\"\n [headline]=\"headline | translate\"\n [welcomeText]=\"welcomeText | translate\"\n #agentChat\n [suggestions]=\"(agentChat.messages$ | async)?.length === 0 ? suggestions : []\"\n [agent]=\"agent\"\n [variables]=\"variables\"\n [stepRenderComponent]=\"_renderStepComponent\"\n (onToolResult)=\"toolResultHandler($event)\"\n></c8y-agent-chat>\n" }]
|
|
421
|
+
args: [{ selector: 'c8y-widget-ai-chat-section', imports: [AgentChatComponent, C8yTranslatePipe, AsyncPipe, WidgetConfigFeedbackComponent], standalone: true, template: "<c8y-widget-config-feedback>\n <div\n class=\"m-l-4 btn-ai btn-ai-hint btn-sm\"\n [title]=\"'AI code assistant' | translate\"\n >\n <span></span>\n </div>\n</c8y-widget-config-feedback>\n\n<c8y-agent-chat\n [title]=\"title | translate\"\n [headline]=\"headline | translate\"\n [welcomeText]=\"welcomeText | translate\"\n #agentChat\n [suggestions]=\"(agentChat.messages$ | async)?.length === 0 ? suggestions : []\"\n [agent]=\"agent\"\n [variables]=\"variables | async\"\n [stepRenderComponent]=\"_renderStepComponent\"\n (onToolResult)=\"toolResultHandler($event)\"\n></c8y-agent-chat>\n" }]
|
|
394
422
|
}], propDecorators: { suggestions: [{
|
|
395
423
|
type: Input
|
|
396
424
|
}], agent: [{
|
|
@@ -401,12 +429,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
401
429
|
type: Input
|
|
402
430
|
}], welcomeText: [{
|
|
403
431
|
type: Input
|
|
404
|
-
}], variables: [{
|
|
405
|
-
type: Input
|
|
406
432
|
}], useContextAsVariable: [{
|
|
407
433
|
type: Input
|
|
408
434
|
}], contextVariableName: [{
|
|
409
435
|
type: Input
|
|
436
|
+
}], variables: [{
|
|
437
|
+
type: Input
|
|
410
438
|
}], loadRenderStepComponent: [{
|
|
411
439
|
type: Input
|
|
412
440
|
}] } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"c8y-ngx-components-ai-agent-chat.mjs","sources":["../../ai/agent-chat/agent-step-feedback.component.ts","../../ai/agent-chat/agent-step-feedback.component.html","../../ai/agent-chat/agent-chat.component.ts","../../ai/agent-chat/agent-chat.component.html","../../ai/agent-chat/widget-ai-chat-section.component.ts","../../ai/agent-chat/widget-ai-chat-section.component.html","../../ai/agent-chat/c8y-ngx-components-ai-agent-chat.ts"],"sourcesContent":["import { JsonPipe, NgClass, AsyncPipe } from '@angular/common';\nimport { Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport {\n ListGroupComponent,\n ListItemBodyComponent,\n ListItemCollapseComponent,\n ListItemComponent,\n ListItemIconComponent,\n MarkdownToHtmlPipe,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { AgentStep } from '@c8y/ngx-components/ai';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\n@Component({\n selector: 'c8y-agent-step-feedback',\n templateUrl: './agent-step-feedback.component.html',\n standalone: true,\n imports: [\n ListGroupComponent,\n ListItemComponent,\n ListItemCollapseComponent,\n ListItemBodyComponent,\n ListItemIconComponent,\n NgClass,\n JsonPipe,\n MarkdownToHtmlPipe,\n AsyncPipe,\n C8yTranslatePipe\n ],\n host: { class: 'agent-step-feedback' }\n})\nexport class AgentStepFeedbackComponent implements OnInit, OnChanges {\n @Input({ required: true }) step: AgentStep;\n\n @Input() label: string;\n @Input() loading = false;\n @Input() collapsed = true;\n @Input() canCollapse = false;\n\n ngOnInit(): void {\n if (this.step) {\n this.parseDefaultAgentStep(this.step);\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.step) {\n this.parseDefaultAgentStep(changes.step.currentValue);\n }\n }\n\n parseDefaultAgentStep(step: AgentStep): void {\n if (step.reasoning) {\n this.label = gettext('Reasoning');\n this.loading = false;\n this.canCollapse = true;\n this.collapsed = false;\n }\n\n if (step.toolCalls.length > 0 && !step.toolResults?.length) {\n this.label = gettext('Calling a tool');\n this.loading = true;\n this.canCollapse = true;\n this.collapsed = true;\n } else if (step.toolResults?.length > 0) {\n this.label = gettext('Tool result');\n this.loading = false;\n this.canCollapse = true;\n this.collapsed = true;\n }\n }\n}\n","@if (!step.reasoning) {\n <div [innerHTML]=\"step.text | markdownToHtml | async\"></div>\n}\n@if (label) {\n <c8y-list-group class=\"m-t-16 m-b-16\">\n <c8y-li\n [active]=\"!loading\"\n [collapsed]=\"collapsed\"\n >\n <c8y-li-icon>\n <span\n class=\"btn-ai btn-ai-hint btn-sm\"\n [ngClass]=\"{ working: loading }\"\n >\n <span></span>\n </span>\n </c8y-li-icon>\n <c8y-li-body>\n {{ label | translate }}\n </c8y-li-body>\n\n @if (canCollapse) {\n <c8y-li-collapse>\n @if (step.reasoning) {\n <div [innerHTML]=\"step.reasoning | markdownToHtml | async\"></div>\n } @else if (step) {\n <pre\n class=\"fit-w\"\n style=\"max-height: 320px\"\n >{{ step | json }}</pre\n >\n }\n </c8y-li-collapse>\n }\n </c8y-li>\n </c8y-list-group>\n}\n","import { AsyncPipe, NgComponentOutlet } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n Type\n} from '@angular/core';\nimport {\n AlertService,\n AppStateService,\n C8Y_PLUGIN_CONTEXT_PATH,\n C8yTranslatePipe,\n EmptyStateComponent,\n GainsightService,\n LoadingComponent,\n MarkdownToHtmlPipe\n} from '@c8y/ngx-components';\nimport {\n AgentHealthCheckResponse,\n AgentStep,\n AIMessage,\n AIMessageStreamSteps,\n AIService,\n ClientAgentDefinition,\n ToolResult\n} from '@c8y/ngx-components/ai';\nimport {\n AiChatComponent,\n AiChatMessageActionComponent,\n AiChatMessageComponent,\n AiChatSuggestionComponent\n} from '@c8y/ngx-components/ai/ai-chat';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n BehaviorSubject,\n firstValueFrom,\n map,\n Observable,\n of,\n OperatorFunction,\n Subscription\n} from 'rxjs';\nimport { AgentStepFeedbackComponent } from './agent-step-feedback.component';\n\n@Component({\n selector: 'c8y-agent-chat',\n templateUrl: './agent-chat.component.html',\n imports: [\n AiChatComponent,\n AiChatSuggestionComponent,\n AiChatMessageComponent,\n AiChatMessageActionComponent,\n LoadingComponent,\n MarkdownToHtmlPipe,\n AsyncPipe,\n NgComponentOutlet,\n C8yTranslatePipe,\n EmptyStateComponent\n ]\n})\nexport class AgentChatComponent implements OnInit, OnDestroy {\n private _agent: string | ClientAgentDefinition;\n\n @Input({ required: true })\n set agent(value: string | ClientAgentDefinition) {\n if (typeof value === 'string') {\n this.agentName = value;\n this.agentDefinition = undefined;\n } else {\n this.agentName = value.definition.name;\n this.agentDefinition = value;\n }\n }\n\n @Input() suggestions: { label: string; prompt: string; icon?: string }[] = [];\n @Input() title: string;\n @Input() headline: string = gettext('Welcome!');\n @Input() welcomeText: string;\n @Input() autoInstallAgents = true;\n @Input() variables = {};\n @Input() stepRenderComponent: Type<any> = AgentStepFeedbackComponent;\n\n @Output() onMessageDelta = new EventEmitter<string>();\n @Output() onMessageText = new EventEmitter<string>();\n @Output() onMessageFinish = new EventEmitter<string>();\n @Output() onToolResult = new EventEmitter<ToolResult>();\n\n isLoading = false;\n\n /**\n * A stream of AI messages representing the conversation.\n */\n messages$: BehaviorSubject<AIMessageStreamSteps[]> = new BehaviorSubject<AIMessageStreamSteps[]>(\n []\n );\n agentName: string;\n agentDefinition: ClientAgentDefinition | undefined;\n hasError = true;\n canCreate = false;\n errorMsg = '';\n prompt = '';\n\n private aiService = inject(AIService);\n private gainsightService = inject(GainsightService);\n private alertService = inject(AlertService);\n private pluginContextPath = inject(C8Y_PLUGIN_CONTEXT_PATH, { optional: true });\n private appState = inject(AppStateService);\n private abortController: AbortController;\n private assistantSubscription: Subscription;\n\n private get currentContextPath(): string {\n return this.pluginContextPath || this.appState.currentApplication?.value?.contextPath || '';\n }\n\n defaultAgentStepRendererPipe: OperatorFunction<\n AgentStep[],\n { content: Type<any> | string; origin: AgentStep }[]\n > = <T extends AgentStep[]>(source: Observable<T>) => {\n return source.pipe(\n map(steps =>\n steps.map(step => {\n if (step.reasoning || step.toolCalls || step.toolResults) {\n return { content: this.stepRenderComponent, origin: { ...step } };\n }\n return { content: step.text, origin: { ...step } };\n })\n )\n );\n };\n\n async ngOnInit(): Promise<void> {\n if (this.agentDefinition.snapshot) {\n this.hasError = false;\n return;\n }\n this.isLoading = true;\n try {\n const agentHealth: AgentHealthCheckResponse = await this.aiService.getAgentHealth(\n this.agentName,\n this.currentContextPath\n );\n this.composeErrorMessage(agentHealth);\n } catch (ex) {\n this.errorMsg = gettext('Microservice not found. Please contact your administrator.');\n this.hasError = true;\n }\n this.isLoading = false;\n }\n\n async sendMessage(message: AIMessage) {\n this.messages$.next([...this.messages$.value, message]);\n this.isLoading = true;\n this.abortController = new AbortController();\n const currentAssistantMessage: AIMessageStreamSteps = {\n role: 'assistant',\n content: ''\n };\n this.messages$.next([...this.messages$.value, currentAssistantMessage]);\n const stream = await this.aiService.stream$(\n this.agentDefinition || this.agentName,\n this.messages$.value.filter(m => m !== currentAssistantMessage),\n this.variables,\n this.abortController,\n this.currentContextPath\n );\n\n if (this.assistantSubscription) {\n this.assistantSubscription.unsubscribe();\n }\n\n this.assistantSubscription = stream.subscribe((messageFromAssistant: AIMessage) =>\n this.processAgentMessage(\n currentAssistantMessage,\n messageFromAssistant,\n this.agentName,\n message\n )\n );\n }\n\n ngOnDestroy(): void {\n this.cancel();\n }\n\n reprompt(userMessage: AIMessageStreamSteps) {\n const index = this.messages$.value.indexOf(userMessage);\n if (index > -1) {\n this.messages$.next(this.messages$.value.slice(0, index));\n this.prompt = userMessage.content;\n }\n }\n\n rate(assistantMessage: AIMessageStreamSteps, positive) {\n const agentName = typeof this.agent === 'string' ? this.agent : this.agent.label;\n this.gainsightService.triggerEvent('ai.agent.feedback', {\n positive,\n assistant: assistantMessage,\n user: this.messages$.value[this.messages$.value.indexOf(assistantMessage) - 1],\n agent: agentName\n });\n }\n\n reload(assistantMessage: AIMessageStreamSteps) {\n const index = this.messages$.value.indexOf(assistantMessage);\n const userMessage = this.messages$.value[index - 1];\n if (index > -1) {\n this.messages$.next(this.messages$.value.slice(0, index - 1));\n this.sendMessage({\n role: 'user',\n content: userMessage.content,\n timestamp: new Date().toISOString()\n });\n }\n }\n\n async cancel() {\n if (this.abortController) {\n this.abortController.abort();\n }\n\n const lastMessage = this.messages$.value[this.messages$.value.length - 1];\n if (lastMessage && lastMessage.role === 'assistant') {\n if (lastMessage.content === '') {\n // if message is aborted before content is even populated, remove it entirely\n this.messages$.next(this.messages$.value.slice(0, -1));\n } else {\n // if message has content, mark the last step as aborted to indicate incomplete processing\n const lastMessageSteps: AgentStep[] =\n (await firstValueFrom(lastMessage.componentSteps$))\n .map(s => s.origin)\n .map((step, index, arr) =>\n index === arr.length - 1 ? { ...step, aborted: true } : step\n ) || [];\n if (lastMessageSteps.length) {\n lastMessage.componentSteps$ = of(lastMessageSteps).pipe(\n this.defaultAgentStepRendererPipe\n );\n\n this.messages$.next([...this.messages$.value]);\n }\n }\n }\n\n if (this.assistantSubscription) {\n this.assistantSubscription.unsubscribe();\n }\n\n this.isLoading = false;\n }\n\n async createAgent() {\n this.isLoading = true;\n try {\n await this.aiService.createOrUpdateAgent(this.agentDefinition.definition);\n this.hasError = false;\n } catch (ex) {\n this.alertService.danger(gettext('Failed to create the agent.'));\n this.hasError = true;\n }\n this.isLoading = false;\n }\n\n private composeErrorMessage(agentHealth: AgentHealthCheckResponse) {\n if (agentHealth.exists) {\n this.errorMsg = '';\n this.hasError = false;\n return;\n }\n this.hasError = true;\n if (!agentHealth.isProviderConfigured) {\n this.errorMsg = gettext('AI provider is not configured. Please contact your administrator.');\n return;\n }\n if (agentHealth.canCreate && typeof this.agent === 'string') {\n this.errorMsg = gettext(\n 'The agent does not exist. Provide the agent definition in the agent manager to use it.'\n );\n return;\n }\n if (agentHealth.canCreate && typeof this.agent !== 'string') {\n this.canCreate = true;\n if (this.autoInstallAgents && this.agentDefinition) {\n this.createAgent();\n return;\n }\n this.errorMsg = gettext('The agent does not exist. You can create it now.');\n return;\n }\n if (!agentHealth.canCreate) {\n this.errorMsg = gettext('The agent does not exist. Please contact your administrator.');\n if (agentHealth.messages?.length) {\n this.errorMsg += '\\n' + agentHealth.messages.join(' ');\n }\n return;\n }\n this.errorMsg = gettext('Unknown error. Please contact your administrator.');\n }\n\n private processAgentMessage(\n currentAssistantMessage: AIMessageStreamSteps,\n messageFromAssistant: AIMessage,\n agentName: string,\n message: AIMessage\n ) {\n currentAssistantMessage.content = messageFromAssistant.content;\n\n const steps = messageFromAssistant.steps || [];\n const lastStep = steps.length ? steps[steps.length - 1] : null;\n\n this.onMessageDelta.emit(lastStep.textDelta);\n this.onMessageText.emit(lastStep.text);\n currentAssistantMessage.componentSteps$ = of(steps).pipe(this.defaultAgentStepRendererPipe);\n\n if (messageFromAssistant.finishReason === 'stop') {\n currentAssistantMessage.timestamp = new Date().toISOString();\n this.onMessageFinish.emit(currentAssistantMessage.content);\n this.gainsightService.triggerEvent('ai.agent.message', {\n agent: agentName,\n user: message,\n assistant: currentAssistantMessage.content\n });\n this.isLoading = false;\n }\n\n if (messageFromAssistant.finishReason === 'error') {\n currentAssistantMessage.timestamp = new Date().toISOString();\n this.isLoading = false;\n }\n\n if (lastStep?.toolResults) {\n lastStep.toolResults.forEach(toolResult => {\n this.onToolResult.emit(toolResult);\n });\n }\n\n // as we are mutating the currentAssistantMessage object\n // which is already in the messages array we need to emit a new array reference\n this.messages$.next([...this.messages$.value]);\n }\n}\n","@if (hasError && isLoading) {\n <c8y-loading class=\"m-auto\"></c8y-loading>\n}\n@if (hasError && !isLoading) {\n <c8y-ui-empty-state\n class=\"m-auto\"\n [icon]=\"'disclaimer'\"\n [title]=\"'An error occurred' | translate\"\n [subtitle]=\"errorMsg | translate\"\n [horizontal]=\"true\"\n >\n @if (canCreate) {\n <div class=\"text-center m-t-16 m-b-16\">\n <button\n class=\"btn btn-primary\"\n (click)=\"createAgent()\"\n >\n {{ 'Create agent' | translate }}\n </button>\n </div>\n }\n </c8y-ui-empty-state>\n}\n\n@if (!hasError) {\n <c8y-ai-chat\n (onMessage)=\"sendMessage($event)\"\n [isLoading]=\"isLoading\"\n (onCancel)=\"cancel()\"\n [config]=\"{ title: title, headline: headline, welcomeText: welcomeText }\"\n [prompt]=\"prompt\"\n >\n @for (message of messages$ | async; track $index; let i = $index) {\n <c8y-ai-chat-message\n [message]=\"{ role: message.role, content: '', timestamp: message.timestamp }\"\n >\n @if (!message.componentSteps$) {\n <div [innerHTML]=\"message.content | markdownToHtml | async\"></div>\n }\n @for (step of message.componentSteps$ | async; track $index) {\n @if (typeof step.content === 'string') {\n <div [innerHTML]=\"step.content | markdownToHtml | async\"></div>\n } @else {\n <ng-container\n [ngComponentOutlet]=\"step.content\"\n [ngComponentOutletInputs]=\"{ step: step.origin }\"\n ></ng-container>\n }\n }\n\n @if (message.role === 'user') {\n <c8y-ai-chat-message-action\n icon=\"pencil\"\n [tooltip]=\"'Edit and resend this message' | translate\"\n [disabled]=\"isLoading\"\n (click)=\"reprompt(message)\"\n ></c8y-ai-chat-message-action>\n }\n\n @if (message.role === 'assistant' && (i < (messages$ | async)?.length - 1 || !isLoading)) {\n <c8y-ai-chat-message-action\n icon=\"thumbs-up\"\n [tooltip]=\"'This is useful' | translate\"\n [disabled]=\"isLoading\"\n (click)=\"rate(message, true)\"\n ></c8y-ai-chat-message-action>\n }\n\n @if (message.role === 'assistant' && (i < (messages$ | async)?.length - 1 || !isLoading)) {\n <c8y-ai-chat-message-action\n icon=\"thumbs-down\"\n [tooltip]=\"'This is not useful' | translate\"\n [disabled]=\"isLoading\"\n (click)=\"rate(message, false)\"\n ></c8y-ai-chat-message-action>\n }\n\n @if (message.role === 'assistant' && (i < (messages$ | async)?.length - 1 || !isLoading)) {\n <c8y-ai-chat-message-action\n icon=\"refresh\"\n [tooltip]=\"'Regenerate this response' | translate\"\n [disabled]=\"isLoading\"\n (click)=\"reload(message)\"\n ></c8y-ai-chat-message-action>\n }\n\n @if (\n !message.content && message.role === 'assistant' && i === (messages$ | async)?.length - 1\n ) {\n <div class=\"text-center\">\n <c8y-loading></c8y-loading>\n </div>\n }\n </c8y-ai-chat-message>\n }\n\n @for (suggestion of suggestions; track $index) {\n <c8y-ai-chat-suggestion\n [icon]=\"suggestion.icon || 'c8y-bulb'\"\n [useAiButtons]=\"true\"\n [label]=\"suggestion.label\"\n [prompt]=\"suggestion.prompt\"\n (suggestionClicked)=\"sendMessage($event)\"\n [disabled]=\"isLoading\"\n ></c8y-ai-chat-suggestion>\n }\n </c8y-ai-chat>\n}\n","import { AsyncPipe } from '@angular/common';\nimport { Component, inject, Input, OnInit, Type } from '@angular/core';\nimport { AlertService, C8yTranslatePipe, ContextRouteService } from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { ClientAgentDefinition, ToolResult } from '@c8y/ngx-components/ai';\nimport {\n WidgetConfigFeedbackComponent,\n WidgetConfigService\n} from '@c8y/ngx-components/context-dashboard';\nimport { AgentChatComponent } from './agent-chat.component';\nimport { AgentStepFeedbackComponent } from './agent-step-feedback.component';\n\n@Component({\n selector: 'c8y-widget-ai-chat-section',\n imports: [AgentChatComponent, C8yTranslatePipe, AsyncPipe, WidgetConfigFeedbackComponent],\n standalone: true,\n templateUrl: './widget-ai-chat-section.component.html'\n})\nexport class WidgetAiChatSectionComponent implements OnInit {\n @Input()\n suggestions: Array<{ label: string; prompt: string }> = [];\n @Input()\n agent: string | ClientAgentDefinition;\n @Input()\n headline = gettext('Welcome!');\n @Input()\n title: string = gettext('What can I help you with?');\n @Input()\n welcomeText;\n @Input()\n variables: { [key: string]: any };\n @Input()\n useContextAsVariable = true;\n @Input()\n contextVariableName = 'c8yContext';\n _renderStepComponent: Type<any>;\n\n private readonly widgetConfigService = inject(WidgetConfigService);\n private readonly alertService = inject(AlertService);\n private readonly contextRouteService = inject(ContextRouteService);\n\n /**\n * A component that is used to render each step in the chat. By default, it uses the `AgentStepFeedbackComponent`.\n * You can provide your own component by returning it from this callback.\n *\n * @returns A promise that resolves to a component type.\n */\n @Input()\n loadRenderStepComponent: () => Promise<Type<any>> = () =>\n Promise.resolve(AgentStepFeedbackComponent);\n\n /**\n * A callback that is invoked when a tool result is returned. The function can return either:\n * - `undefined` or `void`: No action is taken.\n * - an object which is stored to the widget configuration.\n */\n onToolResult: (step: ToolResult) => undefined | any = () => undefined;\n\n /**\n * @ignore\n */\n async ngOnInit(): Promise<void> {\n if (!this.variables && this.useContextAsVariable) {\n const { contextData } = this.contextRouteService.activatedContextData;\n this.variables = {\n [this.contextVariableName]: contextData || this.widgetConfigService.currentConfig.device\n };\n }\n\n this._renderStepComponent = await this.loadRenderStepComponent();\n }\n\n /**\n * Handles the tool result returned from the AI agent.\n * @param tool The tool result returned from the AI agent.\n */\n toolResultHandler(tool: ToolResult) {\n try {\n const parsedResult = this.onToolResult(tool);\n if (!parsedResult) {\n return;\n }\n this.widgetConfigService.updateConfig(\n {\n config: {\n ...this.widgetConfigService.currentConfig,\n ...parsedResult\n }\n },\n true\n );\n } catch (e) {\n this.alertService.danger(gettext('There was an error processing the AI response.'));\n }\n }\n}\n","<c8y-widget-config-feedback>\n <div\n class=\"m-l-4 btn-ai btn-ai-hint btn-sm\"\n [title]=\"'AI code assistant' | translate\"\n >\n <span></span>\n </div>\n</c8y-widget-config-feedback>\n\n<c8y-agent-chat\n [title]=\"title | translate\"\n [headline]=\"headline | translate\"\n [welcomeText]=\"welcomeText | translate\"\n #agentChat\n [suggestions]=\"(agentChat.messages$ | async)?.length === 0 ? suggestions : []\"\n [agent]=\"agent\"\n [variables]=\"variables\"\n [stepRenderComponent]=\"_renderStepComponent\"\n (onToolResult)=\"toolResultHandler($event)\"\n></c8y-agent-chat>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-ai-agent-chat.mjs","sources":["../../ai/agent-chat/agent-step-feedback.component.ts","../../ai/agent-chat/agent-step-feedback.component.html","../../ai/agent-chat/agent-chat.component.ts","../../ai/agent-chat/agent-chat.component.html","../../ai/agent-chat/widget-ai-chat-section.component.ts","../../ai/agent-chat/widget-ai-chat-section.component.html","../../ai/agent-chat/c8y-ngx-components-ai-agent-chat.ts"],"sourcesContent":["import { JsonPipe, NgClass, AsyncPipe } from '@angular/common';\nimport { Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport {\n ListGroupComponent,\n ListItemBodyComponent,\n ListItemCollapseComponent,\n ListItemComponent,\n ListItemIconComponent,\n MarkdownToHtmlPipe,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { AgentStep } from '@c8y/ngx-components/ai';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\n@Component({\n selector: 'c8y-agent-step-feedback',\n templateUrl: './agent-step-feedback.component.html',\n standalone: true,\n imports: [\n ListGroupComponent,\n ListItemComponent,\n ListItemCollapseComponent,\n ListItemBodyComponent,\n ListItemIconComponent,\n NgClass,\n JsonPipe,\n MarkdownToHtmlPipe,\n AsyncPipe,\n C8yTranslatePipe\n ],\n host: { class: 'agent-step-feedback' }\n})\nexport class AgentStepFeedbackComponent implements OnInit, OnChanges {\n @Input({ required: true }) step: AgentStep;\n\n @Input() label: string;\n @Input() loading = false;\n @Input() collapsed = true;\n @Input() canCollapse = false;\n\n ngOnInit(): void {\n if (this.step) {\n this.parseDefaultAgentStep(this.step);\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.step) {\n this.parseDefaultAgentStep(changes.step.currentValue);\n }\n }\n\n parseDefaultAgentStep(step: AgentStep): void {\n if (step.reasoning) {\n this.label = gettext('Reasoning');\n this.loading = false;\n this.canCollapse = true;\n this.collapsed = false;\n }\n\n if (step.toolCalls.length > 0 && !step.toolResults?.length) {\n this.label = gettext('Calling a tool');\n this.loading = true;\n this.canCollapse = true;\n this.collapsed = true;\n } else if (step.toolResults?.length > 0) {\n this.label = gettext('Tool result');\n this.loading = false;\n this.canCollapse = true;\n this.collapsed = true;\n }\n }\n}\n","@if (!step.reasoning) {\n <div [innerHTML]=\"step.text | markdownToHtml | async\"></div>\n}\n@if (label) {\n <c8y-list-group class=\"m-t-16 m-b-16\">\n <c8y-li\n [active]=\"!loading\"\n [collapsed]=\"collapsed\"\n >\n <c8y-li-icon>\n <span\n class=\"btn-ai btn-ai-hint btn-sm\"\n [ngClass]=\"{ working: loading }\"\n >\n <span></span>\n </span>\n </c8y-li-icon>\n <c8y-li-body>\n {{ label | translate }}\n </c8y-li-body>\n\n @if (canCollapse) {\n <c8y-li-collapse>\n @if (step.reasoning) {\n <div [innerHTML]=\"step.reasoning | markdownToHtml | async\"></div>\n } @else if (step) {\n <pre\n class=\"fit-w\"\n style=\"max-height: 320px\"\n >{{ step | json }}</pre\n >\n }\n </c8y-li-collapse>\n }\n </c8y-li>\n </c8y-list-group>\n}\n","import { AsyncPipe, NgComponentOutlet } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n Type\n} from '@angular/core';\nimport {\n AlertService,\n AppStateService,\n C8Y_PLUGIN_CONTEXT_PATH,\n C8yTranslatePipe,\n EmptyStateComponent,\n GainsightService,\n LoadingComponent,\n MarkdownToHtmlPipe\n} from '@c8y/ngx-components';\nimport {\n AgentHealthCheckResponse,\n AgentStep,\n AIMessage,\n AIMessageStreamSteps,\n AIService,\n ClientAgentDefinition,\n ToolResult\n} from '@c8y/ngx-components/ai';\nimport {\n AiChatComponent,\n AiChatMessageActionComponent,\n AiChatMessageComponent,\n AiChatSuggestionComponent\n} from '@c8y/ngx-components/ai/ai-chat';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n BehaviorSubject,\n firstValueFrom,\n map,\n Observable,\n of,\n OperatorFunction,\n Subscription\n} from 'rxjs';\nimport { AgentStepFeedbackComponent } from './agent-step-feedback.component';\n\n@Component({\n selector: 'c8y-agent-chat',\n templateUrl: './agent-chat.component.html',\n imports: [\n AiChatComponent,\n AiChatSuggestionComponent,\n AiChatMessageComponent,\n AiChatMessageActionComponent,\n LoadingComponent,\n MarkdownToHtmlPipe,\n AsyncPipe,\n NgComponentOutlet,\n C8yTranslatePipe,\n EmptyStateComponent\n ]\n})\nexport class AgentChatComponent implements OnInit, OnDestroy {\n private _agent: string | ClientAgentDefinition;\n\n @Input({ required: true })\n set agent(value: string | ClientAgentDefinition) {\n if (typeof value === 'string') {\n this.agentName = value;\n this.agentDefinition = undefined;\n } else {\n this.agentName = value.definition.name;\n this.agentDefinition = value;\n }\n }\n\n @Input() suggestions: { label: string; prompt: string; icon?: string }[] = [];\n @Input() title: string;\n @Input() headline: string = gettext('Welcome!');\n @Input() welcomeText: string;\n @Input() autoInstallAgents = true;\n @Input() variables = {};\n @Input() stepRenderComponent: Type<any> = AgentStepFeedbackComponent;\n\n @Output() onMessageDelta = new EventEmitter<string>();\n @Output() onMessageText = new EventEmitter<string>();\n @Output() onMessageFinish = new EventEmitter<string>();\n @Output() onToolResult = new EventEmitter<ToolResult>();\n\n isLoading = false;\n\n /**\n * A stream of AI messages representing the conversation.\n */\n messages$: BehaviorSubject<AIMessageStreamSteps[]> = new BehaviorSubject<AIMessageStreamSteps[]>(\n []\n );\n agentName: string;\n agentDefinition: ClientAgentDefinition | undefined;\n hasError = true;\n canCreate = false;\n errorMsg = '';\n prompt = '';\n\n private aiService = inject(AIService);\n private gainsightService = inject(GainsightService);\n private alertService = inject(AlertService);\n private pluginContextPath = inject(C8Y_PLUGIN_CONTEXT_PATH, { optional: true });\n private appState = inject(AppStateService);\n private abortController: AbortController;\n private assistantSubscription: Subscription;\n\n private get currentContextPath(): string {\n return this.pluginContextPath || this.appState.currentApplication?.value?.contextPath || '';\n }\n\n defaultAgentStepRendererPipe: OperatorFunction<\n AgentStep[],\n { content: Type<any> | string; origin: AgentStep }[]\n > = <T extends AgentStep[]>(source: Observable<T>) => {\n return source.pipe(\n map(steps =>\n steps.map(step => {\n if (step.reasoning || step.toolCalls || step.toolResults) {\n return { content: this.stepRenderComponent, origin: { ...step } };\n }\n return { content: step.text, origin: { ...step } };\n })\n )\n );\n };\n\n async ngOnInit(): Promise<void> {\n if (this.agentDefinition.snapshot) {\n this.hasError = false;\n return;\n }\n this.isLoading = true;\n try {\n const agentHealth: AgentHealthCheckResponse = await this.aiService.getAgentHealth(\n this.agentName,\n this.currentContextPath\n );\n this.composeErrorMessage(agentHealth);\n } catch (ex) {\n this.errorMsg = gettext('Microservice not found. Please contact your administrator.');\n this.hasError = true;\n }\n this.isLoading = false;\n }\n\n async sendMessage(message: AIMessage) {\n this.messages$.next([...this.messages$.value, message]);\n this.isLoading = true;\n this.abortController = new AbortController();\n const currentAssistantMessage: AIMessageStreamSteps = {\n role: 'assistant',\n content: ''\n };\n this.messages$.next([...this.messages$.value, currentAssistantMessage]);\n const stream = await this.aiService.stream$(\n this.agentDefinition || this.agentName,\n this.messages$.value.filter(m => m !== currentAssistantMessage),\n this.variables,\n this.abortController,\n this.currentContextPath\n );\n\n if (this.assistantSubscription) {\n this.assistantSubscription.unsubscribe();\n }\n\n this.assistantSubscription = stream.subscribe((messageFromAssistant: AIMessage) =>\n this.processAgentMessage(\n currentAssistantMessage,\n messageFromAssistant,\n this.agentName,\n message\n )\n );\n }\n\n ngOnDestroy(): void {\n this.cancel();\n }\n\n reprompt(userMessage: AIMessageStreamSteps) {\n const index = this.messages$.value.indexOf(userMessage);\n if (index > -1) {\n this.messages$.next(this.messages$.value.slice(0, index));\n this.prompt = userMessage.content;\n }\n }\n\n rate(assistantMessage: AIMessageStreamSteps, positive) {\n const agentName = typeof this.agent === 'string' ? this.agent : this.agent.label;\n this.gainsightService.triggerEvent('ai.agent.feedback', {\n positive,\n assistant: assistantMessage,\n user: this.messages$.value[this.messages$.value.indexOf(assistantMessage) - 1],\n agent: agentName\n });\n }\n\n reload(assistantMessage: AIMessageStreamSteps) {\n const index = this.messages$.value.indexOf(assistantMessage);\n const userMessage = this.messages$.value[index - 1];\n if (index > -1) {\n this.messages$.next(this.messages$.value.slice(0, index - 1));\n this.sendMessage({\n role: 'user',\n content: userMessage.content,\n timestamp: new Date().toISOString()\n });\n }\n }\n\n async cancel() {\n if (this.abortController) {\n this.abortController.abort();\n }\n\n const lastMessage = this.messages$.value[this.messages$.value.length - 1];\n if (lastMessage && lastMessage.role === 'assistant') {\n if (lastMessage.content === '') {\n // if message is aborted before content is even populated, remove it entirely\n this.messages$.next(this.messages$.value.slice(0, -1));\n } else {\n // if message has content, mark the last step as aborted to indicate incomplete processing\n const lastMessageSteps: AgentStep[] =\n (await firstValueFrom(lastMessage.componentSteps$))\n .map(s => s.origin)\n .map((step, index, arr) =>\n index === arr.length - 1 ? { ...step, aborted: true } : step\n ) || [];\n if (lastMessageSteps.length) {\n lastMessage.componentSteps$ = of(lastMessageSteps).pipe(\n this.defaultAgentStepRendererPipe\n );\n\n this.messages$.next([...this.messages$.value]);\n }\n }\n }\n\n if (this.assistantSubscription) {\n this.assistantSubscription.unsubscribe();\n }\n\n this.isLoading = false;\n }\n\n async createAgent() {\n this.isLoading = true;\n try {\n await this.aiService.createOrUpdateAgent(this.agentDefinition.definition);\n this.hasError = false;\n } catch (ex) {\n this.alertService.danger(gettext('Failed to create the agent.'));\n this.hasError = true;\n }\n this.isLoading = false;\n }\n\n private composeErrorMessage(agentHealth: AgentHealthCheckResponse) {\n if (agentHealth.exists) {\n this.errorMsg = '';\n this.hasError = false;\n return;\n }\n this.hasError = true;\n if (!agentHealth.isProviderConfigured) {\n this.errorMsg = gettext('AI provider is not configured. Please contact your administrator.');\n return;\n }\n if (agentHealth.canCreate && typeof this.agent === 'string') {\n this.errorMsg = gettext(\n 'The agent does not exist. Provide the agent definition in the agent manager to use it.'\n );\n return;\n }\n if (agentHealth.canCreate && typeof this.agent !== 'string') {\n this.canCreate = true;\n if (this.autoInstallAgents && this.agentDefinition) {\n this.createAgent();\n return;\n }\n this.errorMsg = gettext('The agent does not exist. You can create it now.');\n return;\n }\n if (!agentHealth.canCreate) {\n this.errorMsg = gettext('The agent does not exist. Please contact your administrator.');\n if (agentHealth.messages?.length) {\n this.errorMsg += '\\n' + agentHealth.messages.join(' ');\n }\n return;\n }\n this.errorMsg = gettext('Unknown error. Please contact your administrator.');\n }\n\n private processAgentMessage(\n currentAssistantMessage: AIMessageStreamSteps,\n messageFromAssistant: AIMessage,\n agentName: string,\n message: AIMessage\n ) {\n currentAssistantMessage.content = messageFromAssistant.content;\n\n const steps = messageFromAssistant.steps || [];\n const lastStep = steps.length ? steps[steps.length - 1] : null;\n\n this.onMessageDelta.emit(lastStep.textDelta);\n this.onMessageText.emit(lastStep.text);\n currentAssistantMessage.componentSteps$ = of(steps).pipe(this.defaultAgentStepRendererPipe);\n\n if (messageFromAssistant.finishReason === 'stop') {\n currentAssistantMessage.timestamp = new Date().toISOString();\n this.onMessageFinish.emit(currentAssistantMessage.content);\n this.gainsightService.triggerEvent('ai.agent.message', {\n agent: agentName,\n user: message,\n assistant: currentAssistantMessage.content\n });\n this.isLoading = false;\n }\n\n if (messageFromAssistant.finishReason === 'error') {\n currentAssistantMessage.timestamp = new Date().toISOString();\n this.isLoading = false;\n }\n\n if (lastStep?.toolResults) {\n lastStep.toolResults.forEach(toolResult => {\n this.onToolResult.emit(toolResult);\n });\n }\n\n // as we are mutating the currentAssistantMessage object\n // which is already in the messages array we need to emit a new array reference\n this.messages$.next([...this.messages$.value]);\n }\n}\n","@if (hasError && isLoading) {\n <c8y-loading class=\"m-auto\"></c8y-loading>\n}\n@if (hasError && !isLoading) {\n <c8y-ui-empty-state\n class=\"m-auto\"\n [icon]=\"'disclaimer'\"\n [title]=\"'An error occurred' | translate\"\n [subtitle]=\"errorMsg | translate\"\n [horizontal]=\"true\"\n >\n @if (canCreate) {\n <div class=\"text-center m-t-16 m-b-16\">\n <button\n class=\"btn btn-primary\"\n (click)=\"createAgent()\"\n >\n {{ 'Create agent' | translate }}\n </button>\n </div>\n }\n </c8y-ui-empty-state>\n}\n\n@if (!hasError) {\n <c8y-ai-chat\n (onMessage)=\"sendMessage($event)\"\n [isLoading]=\"isLoading\"\n (onCancel)=\"cancel()\"\n [config]=\"{ title: title, headline: headline, welcomeText: welcomeText }\"\n [prompt]=\"prompt\"\n >\n @for (message of messages$ | async; track $index; let i = $index) {\n <c8y-ai-chat-message\n [message]=\"{ role: message.role, content: '', timestamp: message.timestamp }\"\n >\n @if (!message.componentSteps$) {\n <div [innerHTML]=\"message.content | markdownToHtml | async\"></div>\n }\n @for (step of message.componentSteps$ | async; track $index) {\n @if (typeof step.content === 'string') {\n <div [innerHTML]=\"step.content | markdownToHtml | async\"></div>\n } @else {\n <ng-container\n [ngComponentOutlet]=\"step.content\"\n [ngComponentOutletInputs]=\"{ step: step.origin }\"\n ></ng-container>\n }\n }\n\n @if (message.role === 'user') {\n <c8y-ai-chat-message-action\n icon=\"pencil\"\n [tooltip]=\"'Edit and resend this message' | translate\"\n [disabled]=\"isLoading\"\n (click)=\"reprompt(message)\"\n ></c8y-ai-chat-message-action>\n }\n\n @if (message.role === 'assistant' && (i < (messages$ | async)?.length - 1 || !isLoading)) {\n <c8y-ai-chat-message-action\n icon=\"thumbs-up\"\n [tooltip]=\"'This is useful' | translate\"\n [disabled]=\"isLoading\"\n (click)=\"rate(message, true)\"\n ></c8y-ai-chat-message-action>\n }\n\n @if (message.role === 'assistant' && (i < (messages$ | async)?.length - 1 || !isLoading)) {\n <c8y-ai-chat-message-action\n icon=\"thumbs-down\"\n [tooltip]=\"'This is not useful' | translate\"\n [disabled]=\"isLoading\"\n (click)=\"rate(message, false)\"\n ></c8y-ai-chat-message-action>\n }\n\n @if (message.role === 'assistant' && (i < (messages$ | async)?.length - 1 || !isLoading)) {\n <c8y-ai-chat-message-action\n icon=\"refresh\"\n [tooltip]=\"'Regenerate this response' | translate\"\n [disabled]=\"isLoading\"\n (click)=\"reload(message)\"\n ></c8y-ai-chat-message-action>\n }\n\n @if (\n !message.content && message.role === 'assistant' && i === (messages$ | async)?.length - 1\n ) {\n <div class=\"text-center\">\n <c8y-loading></c8y-loading>\n </div>\n }\n </c8y-ai-chat-message>\n }\n\n @for (suggestion of suggestions; track $index) {\n <c8y-ai-chat-suggestion\n [icon]=\"suggestion.icon || 'c8y-bulb'\"\n [useAiButtons]=\"true\"\n [label]=\"suggestion.label\"\n [prompt]=\"suggestion.prompt\"\n (suggestionClicked)=\"sendMessage($event)\"\n [disabled]=\"isLoading\"\n ></c8y-ai-chat-suggestion>\n }\n </c8y-ai-chat>\n}\n","import { AsyncPipe } from '@angular/common';\nimport { Component, inject, Input, OnInit, Type } from '@angular/core';\nimport { AlertService, C8yTranslatePipe, ContextRouteService } from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { ClientAgentDefinition, ToolResult } from '@c8y/ngx-components/ai';\nimport {\n WidgetConfigFeedbackComponent,\n WidgetConfigService\n} from '@c8y/ngx-components/context-dashboard';\nimport { AgentChatComponent } from './agent-chat.component';\nimport { AgentStepFeedbackComponent } from './agent-step-feedback.component';\nimport { isObservable, Observable, of } from 'rxjs';\n\n@Component({\n selector: 'c8y-widget-ai-chat-section',\n imports: [AgentChatComponent, C8yTranslatePipe, AsyncPipe, WidgetConfigFeedbackComponent],\n standalone: true,\n templateUrl: './widget-ai-chat-section.component.html'\n})\nexport class WidgetAiChatSectionComponent implements OnInit {\n @Input()\n suggestions: Array<{ label: string; prompt: string }> = [];\n @Input()\n agent: string | ClientAgentDefinition;\n @Input()\n headline = gettext('Welcome!');\n @Input()\n title: string = gettext('What can I help you with?');\n @Input()\n welcomeText;\n @Input()\n useContextAsVariable = true;\n @Input()\n contextVariableName = 'c8yContext';\n\n private variables$: Observable<{ [key: string]: any }>;\n /**\n * If set, the variables will be loaded async on each round-trip.\n * This is useful if the variables depend on some async data source or if they need to be updated on each round-trip.\n *\n * @example\n * ```ts\n * variables = combineLatest([\n * this.someService.getData(),\n * this.anotherService.getOtherData()\n * ]).pipe(\n * map(([data, otherData]) => ({\n * myVarOne: data,\n * myVarTwo: otherData\n * }))\n * );\n * ```\n */\n @Input()\n set variables(val: Observable<{ [key: string]: any }> | { [key: string]: any }) {\n if (isObservable(val)) {\n this.variables$ = val;\n } else {\n this.variables$ = of(val);\n }\n }\n get variables(): Observable<{ [key: string]: any }> {\n return this.variables$;\n }\n\n _renderStepComponent: Type<any>;\n\n private readonly widgetConfigService = inject(WidgetConfigService);\n private readonly alertService = inject(AlertService);\n private readonly contextRouteService = inject(ContextRouteService);\n\n /**\n * A component that is used to render each step in the chat. By default, it uses the `AgentStepFeedbackComponent`.\n * You can provide your own component by returning it from this callback.\n *\n * @returns A promise that resolves to a component type.\n */\n @Input()\n loadRenderStepComponent: () => Promise<Type<any>> = () =>\n Promise.resolve(AgentStepFeedbackComponent);\n\n /**\n * A callback that is invoked when a tool result is returned. The function can return either:\n * - `undefined` or `void`: No action is taken.\n * - an object which is stored to the widget configuration.\n */\n onToolResult: (step: ToolResult) => undefined | any = () => undefined;\n\n /**\n * @ignore\n */\n async ngOnInit(): Promise<void> {\n if (!this.variables && this.useContextAsVariable) {\n const { contextData } = this.contextRouteService.activatedContextData;\n this.variables = {\n [this.contextVariableName]: contextData || this.widgetConfigService.currentConfig.device\n };\n }\n\n this._renderStepComponent = await this.loadRenderStepComponent();\n }\n\n /**\n * Handles the tool result returned from the AI agent.\n * @param tool The tool result returned from the AI agent.\n */\n toolResultHandler(tool: ToolResult) {\n try {\n const parsedResult = this.onToolResult(tool);\n if (!parsedResult) {\n return;\n }\n this.widgetConfigService.updateConfig(\n {\n config: {\n ...this.widgetConfigService.currentConfig,\n ...parsedResult\n }\n },\n true\n );\n } catch (e) {\n this.alertService.danger(gettext('There was an error processing the AI response.'));\n }\n }\n}\n","<c8y-widget-config-feedback>\n <div\n class=\"m-l-4 btn-ai btn-ai-hint btn-sm\"\n [title]=\"'AI code assistant' | translate\"\n >\n <span></span>\n </div>\n</c8y-widget-config-feedback>\n\n<c8y-agent-chat\n [title]=\"title | translate\"\n [headline]=\"headline | translate\"\n [welcomeText]=\"welcomeText | translate\"\n #agentChat\n [suggestions]=\"(agentChat.messages$ | async)?.length === 0 ? suggestions : []\"\n [agent]=\"agent\"\n [variables]=\"variables | async\"\n [stepRenderComponent]=\"_renderStepComponent\"\n (onToolResult)=\"toolResultHandler($event)\"\n></c8y-agent-chat>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1652,6 +1652,10 @@ const HTML_AGENT = {
|
|
|
1652
1652
|
- Analyze if the widget fulfills the user request
|
|
1653
1653
|
- Check for mock data usage vs real API integration
|
|
1654
1654
|
- If inadequate, ask user for specific clarifications needed
|
|
1655
|
+
|
|
1656
|
+
|
|
1657
|
+
Currently the following Code is used:
|
|
1658
|
+
{{currentHtmlWidgetCode}}
|
|
1655
1659
|
`,
|
|
1656
1660
|
maxOutputTokens: 20000
|
|
1657
1661
|
},
|