@stack-spot/ai-chat-widget 2.2.0-beta.1 → 2.3.0-alpha.1
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/CHANGELOG.md +4 -25
- package/dist/StackspotAIWidget.d.ts +5 -1
- package/dist/StackspotAIWidget.d.ts.map +1 -1
- package/dist/StackspotAIWidget.js +2 -2
- package/dist/StackspotAIWidget.js.map +1 -1
- package/dist/app-metadata.json +5 -5
- package/dist/chat-interceptors/send-message.d.ts.map +1 -1
- package/dist/chat-interceptors/send-message.js +1 -125
- package/dist/chat-interceptors/send-message.js.map +1 -1
- package/dist/state/ChatEntry.d.ts.map +1 -1
- package/dist/state/ChatState.d.ts +0 -8
- package/dist/state/ChatState.d.ts.map +1 -1
- package/dist/state/ChatState.js.map +1 -1
- package/dist/utils/chat.d.ts.map +1 -1
- package/dist/utils/chat.js +0 -1
- package/dist/utils/chat.js.map +1 -1
- package/dist/utils/check-is-trial.d.ts.map +1 -1
- package/dist/utils/check-is-trial.js +6 -2
- package/dist/utils/check-is-trial.js.map +1 -1
- package/dist/views/Agents/AgentsTab.d.ts.map +1 -1
- package/dist/views/Agents/AgentsTab.js +4 -3
- package/dist/views/Agents/AgentsTab.js.map +1 -1
- package/dist/views/Agents/useAgentFavorites.d.ts.map +1 -1
- package/dist/views/Agents/useAgentFavorites.js +3 -1
- package/dist/views/Agents/useAgentFavorites.js.map +1 -1
- package/dist/views/Chat/ChatMessage.d.ts +1 -1
- package/dist/views/Chat/ChatMessage.d.ts.map +1 -1
- package/dist/views/Chat/ChatMessage.js +6 -21
- package/dist/views/Chat/ChatMessage.js.map +1 -1
- package/dist/views/Chat/StepsList.d.ts +2 -12
- package/dist/views/Chat/StepsList.d.ts.map +1 -1
- package/dist/views/Chat/StepsList.js +18 -155
- package/dist/views/Chat/StepsList.js.map +1 -1
- package/dist/views/Chat/styled.d.ts.map +1 -1
- package/dist/views/Chat/styled.js +10 -17
- package/dist/views/Chat/styled.js.map +1 -1
- package/dist/views/MessageInput/AgentSelector.d.ts.map +1 -1
- package/dist/views/MessageInput/AgentSelector.js +8 -2
- package/dist/views/MessageInput/AgentSelector.js.map +1 -1
- package/dist/views/MessageInput/ButtonAgent.js +1 -1
- package/dist/views/MessageInput/ButtonAgent.js.map +1 -1
- package/dist/views/MessageInput/ButtonBar.d.ts +2 -1
- package/dist/views/MessageInput/ButtonBar.d.ts.map +1 -1
- package/dist/views/MessageInput/ButtonBar.js +2 -3
- package/dist/views/MessageInput/ButtonBar.js.map +1 -1
- package/dist/views/MessageInput/QuickCommandSelector.js +1 -1
- package/dist/views/MessageInput/QuickCommandSelector.js.map +1 -1
- package/dist/views/MessageInput/dictionary.d.ts +1 -1
- package/dist/views/MessageInput/index.d.ts +2 -1
- package/dist/views/MessageInput/index.d.ts.map +1 -1
- package/dist/views/MessageInput/index.js +2 -2
- package/dist/views/MessageInput/index.js.map +1 -1
- package/dist/views/MessageInput/styled.d.ts +0 -3
- package/dist/views/MessageInput/styled.d.ts.map +1 -1
- package/dist/views/MessageInput/styled.js +0 -12
- package/dist/views/MessageInput/styled.js.map +1 -1
- package/dist/views/Steps/FlowChart/NodeStep.js +1 -1
- package/dist/views/Steps/FlowChart/NodeStep.js.map +1 -1
- package/dist/views/Steps/FlowChart/layout.d.ts +1 -1
- package/dist/views/Steps/FlowChart/layout.d.ts.map +1 -1
- package/dist/views/Steps/FlowChart/layout.js +0 -1
- package/dist/views/Steps/FlowChart/layout.js.map +1 -1
- package/dist/views/Steps/FlowChart/types.d.ts +1 -1
- package/dist/views/Steps/FlowChart/types.d.ts.map +1 -1
- package/dist/views/Steps/StepModal.js +2 -2
- package/dist/views/Steps/StepModal.js.map +1 -1
- package/dist/views/Steps/dictionary.d.ts +1 -1
- package/dist/views/Steps/utils.d.ts +1 -1
- package/dist/views/Steps/utils.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/StackspotAIWidget.tsx +7 -1
- package/src/app-metadata.json +5 -5
- package/src/chat-interceptors/send-message.ts +2 -137
- package/src/state/ChatEntry.ts +6 -6
- package/src/state/ChatState.ts +0 -8
- package/src/utils/chat.ts +0 -1
- package/src/utils/check-is-trial.ts +5 -2
- package/src/views/Agents/AgentsTab.tsx +4 -3
- package/src/views/Agents/useAgentFavorites.ts +3 -1
- package/src/views/Chat/ChatMessage.tsx +5 -25
- package/src/views/Chat/StepsList.tsx +44 -337
- package/src/views/Chat/styled.ts +10 -17
- package/src/views/MessageInput/AgentSelector.tsx +7 -2
- package/src/views/MessageInput/ButtonAgent.tsx +1 -1
- package/src/views/MessageInput/ButtonBar.tsx +3 -3
- package/src/views/MessageInput/QuickCommandSelector.tsx +1 -1
- package/src/views/MessageInput/index.tsx +4 -4
- package/src/views/MessageInput/styled.ts +0 -12
- package/src/views/Steps/FlowChart/NodeStep.tsx +1 -1
- package/src/views/Steps/FlowChart/layout.ts +0 -1
- package/src/views/Steps/FlowChart/types.ts +1 -1
- package/src/views/Steps/StepModal.tsx +2 -2
- package/dist/utils/planning-tool.d.ts +0 -17
- package/dist/utils/planning-tool.d.ts.map +0 -1
- package/dist/utils/planning-tool.js +0 -32
- package/dist/utils/planning-tool.js.map +0 -1
- package/dist/utils/update-tool-step.d.ts +0 -3
- package/dist/utils/update-tool-step.d.ts.map +0 -1
- package/dist/utils/update-tool-step.js +0 -23
- package/dist/utils/update-tool-step.js.map +0 -1
- package/dist/views/MessageInput/ModelSwitcher.d.ts +0 -2
- package/dist/views/MessageInput/ModelSwitcher.d.ts.map +0 -1
- package/dist/views/MessageInput/ModelSwitcher.js +0 -77
- package/dist/views/MessageInput/ModelSwitcher.js.map +0 -1
- package/src/utils/planning-tool.ts +0 -41
- package/src/utils/update-tool-step.tsx +0 -27
- package/src/views/MessageInput/ModelSwitcher.tsx +0 -127
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
declare class PlanningToolDictionaryHelper {
|
|
2
|
-
static instance: PlanningToolDictionaryHelper | undefined;
|
|
3
|
-
private toolExecutionIdPlanningStep;
|
|
4
|
-
private toolExecutionIdToolStep;
|
|
5
|
-
private stepId;
|
|
6
|
-
private constructor();
|
|
7
|
-
static create(): PlanningToolDictionaryHelper;
|
|
8
|
-
setMessageIdPlanningStepToolExecutionId(messageId: string, toolExecutionId: string): void;
|
|
9
|
-
setMessageIdToolStepToolExecutionId(messageId: string, toolExecutionId: string): void;
|
|
10
|
-
setMessageIdForStepId(messageId: number, stepId: string): void;
|
|
11
|
-
getMessageIdFromStepId(stepId: string): number;
|
|
12
|
-
getMessageIdPlanningStepFromToolExecutionId(toolExecutionId: string): string;
|
|
13
|
-
getMessageIdToolStepFromToolExecutionId(toolExecutionId: string): string;
|
|
14
|
-
}
|
|
15
|
-
export declare const planningToolDictionaryHelper: PlanningToolDictionaryHelper;
|
|
16
|
-
export {};
|
|
17
|
-
//# sourceMappingURL=planning-tool.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"planning-tool.d.ts","sourceRoot":"","sources":["../../src/utils/planning-tool.ts"],"names":[],"mappings":"AAAA,cAAM,4BAA4B;IAChC,MAAM,CAAC,QAAQ,EAAE,4BAA4B,GAAG,SAAS,CAAA;IACzD,OAAO,CAAC,2BAA2B,CAA6B;IAChE,OAAO,CAAC,uBAAuB,CAA6B;IAC5D,OAAO,CAAC,MAAM,CAA6B;IAE3C,OAAO;IAIP,MAAM,CAAC,MAAM;IAIb,uCAAuC,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM;IAIlF,mCAAmC,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM;IAI9E,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAIvD,sBAAsB,CAAC,MAAM,EAAE,MAAM;IAIrC,2CAA2C,CAAC,eAAe,EAAE,MAAM;IAInE,uCAAuC,CAAC,eAAe,EAAE,MAAM;CAGhE;AAED,eAAO,MAAM,4BAA4B,8BAAwC,CAAA"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
class PlanningToolDictionaryHelper {
|
|
2
|
-
static instance;
|
|
3
|
-
toolExecutionIdPlanningStep = {};
|
|
4
|
-
toolExecutionIdToolStep = {};
|
|
5
|
-
stepId = {};
|
|
6
|
-
constructor() {
|
|
7
|
-
PlanningToolDictionaryHelper.instance = this;
|
|
8
|
-
}
|
|
9
|
-
static create() {
|
|
10
|
-
return PlanningToolDictionaryHelper.instance ?? new PlanningToolDictionaryHelper();
|
|
11
|
-
}
|
|
12
|
-
setMessageIdPlanningStepToolExecutionId(messageId, toolExecutionId) {
|
|
13
|
-
this.toolExecutionIdPlanningStep[toolExecutionId] = messageId;
|
|
14
|
-
}
|
|
15
|
-
setMessageIdToolStepToolExecutionId(messageId, toolExecutionId) {
|
|
16
|
-
this.toolExecutionIdToolStep[toolExecutionId] = messageId;
|
|
17
|
-
}
|
|
18
|
-
setMessageIdForStepId(messageId, stepId) {
|
|
19
|
-
this.stepId[stepId] = messageId;
|
|
20
|
-
}
|
|
21
|
-
getMessageIdFromStepId(stepId) {
|
|
22
|
-
return this.stepId[stepId];
|
|
23
|
-
}
|
|
24
|
-
getMessageIdPlanningStepFromToolExecutionId(toolExecutionId) {
|
|
25
|
-
return this.toolExecutionIdPlanningStep[toolExecutionId];
|
|
26
|
-
}
|
|
27
|
-
getMessageIdToolStepFromToolExecutionId(toolExecutionId) {
|
|
28
|
-
return this.toolExecutionIdToolStep[toolExecutionId];
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
export const planningToolDictionaryHelper = PlanningToolDictionaryHelper.create();
|
|
32
|
-
//# sourceMappingURL=planning-tool.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"planning-tool.js","sourceRoot":"","sources":["../../src/utils/planning-tool.ts"],"names":[],"mappings":"AAAA,MAAM,4BAA4B;IAChC,MAAM,CAAC,QAAQ,CAA0C;IACjD,2BAA2B,GAA2B,EAAE,CAAA;IACxD,uBAAuB,GAA2B,EAAE,CAAA;IACpD,MAAM,GAA2B,EAAE,CAAA;IAE3C;QACE,4BAA4B,CAAC,QAAQ,GAAG,IAAI,CAAA;IAC9C,CAAC;IAED,MAAM,CAAC,MAAM;QACX,OAAO,4BAA4B,CAAC,QAAQ,IAAI,IAAI,4BAA4B,EAAE,CAAA;IACpF,CAAC;IAED,uCAAuC,CAAC,SAAiB,EAAE,eAAuB;QAChF,IAAI,CAAC,2BAA2B,CAAC,eAAe,CAAC,GAAG,SAAS,CAAA;IAC/D,CAAC;IAED,mCAAmC,CAAC,SAAiB,EAAE,eAAuB;QAC5E,IAAI,CAAC,uBAAuB,CAAC,eAAe,CAAC,GAAG,SAAS,CAAA;IAC3D,CAAC;IAED,qBAAqB,CAAC,SAAiB,EAAE,MAAc;QACrD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,SAAS,CAAA;IACjC,CAAC;IAED,sBAAsB,CAAC,MAAc;QACnC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAC5B,CAAC;IAED,2CAA2C,CAAC,eAAuB;QACjE,OAAO,IAAI,CAAC,2BAA2B,CAAC,eAAe,CAAC,CAAA;IAC1D,CAAC;IAED,uCAAuC,CAAC,eAAuB;QAC7D,OAAO,IAAI,CAAC,uBAAuB,CAAC,eAAe,CAAC,CAAA;IACtD,CAAC;CACF;AAED,MAAM,CAAC,MAAM,4BAA4B,GAAG,4BAA4B,CAAC,MAAM,EAAE,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"update-tool-step.d.ts","sourceRoot":"","sources":["../../src/utils/update-tool-step.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAiB,MAAM,oBAAoB,CAAA;AAG7D,eAAO,MAAM,cAAc,aAAc,SAAS,EAAE,eAAe,MAAM,aAC5D,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,mBAAmB,SAsB7E,CAAA"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { planningToolDictionaryHelper } from './planning-tool.js';
|
|
2
|
-
export const updateToolStep = (messages, executionId, newStatus) => {
|
|
3
|
-
// if last message is a user message, no update in tool status is needed
|
|
4
|
-
if (messages[messages.length - 1].getValue().agentType === 'user')
|
|
5
|
-
return;
|
|
6
|
-
const messageId = planningToolDictionaryHelper.getMessageIdPlanningStepFromToolExecutionId(executionId);
|
|
7
|
-
const message = messages.find((message) => `${message.id}` === messageId);
|
|
8
|
-
let update = false;
|
|
9
|
-
const messageValue = message?.getValue();
|
|
10
|
-
messageValue?.steps?.map((step) => {
|
|
11
|
-
if (step.type === 'step') {
|
|
12
|
-
const tool = step.attempts?.[0].tools?.[0];
|
|
13
|
-
if (tool?.executionId === executionId && step.status !== newStatus) {
|
|
14
|
-
step.status = newStatus;
|
|
15
|
-
update = true;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
});
|
|
19
|
-
if (update) {
|
|
20
|
-
message?.setValue({ ...messageValue });
|
|
21
|
-
}
|
|
22
|
-
};
|
|
23
|
-
//# sourceMappingURL=update-tool-step.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"update-tool-step.js","sourceRoot":"","sources":["../../src/utils/update-tool-step.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAA;AAE9D,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,QAAqB,EAAE,WAAmB,EACvE,SAA4E,EAAE,EAAE;IAEhF,wEAAwE;IACxE,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,SAAS,KAAK,MAAM;QAAE,OAAM;IAEvE,MAAM,SAAS,GAAG,4BAA4B,CAAC,2CAA2C,CAAC,WAAW,CAAC,CAAA;IACvG,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,KAAK,SAAS,CAAC,CAAA;IACzE,IAAI,MAAM,GAAG,KAAK,CAAA;IAClB,MAAM,YAAY,GAAG,OAAO,EAAE,QAAQ,EAAE,CAAA;IACxC,YAAY,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAChC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAA;YAC1C,IAAI,IAAI,EAAE,WAAW,KAAK,WAAW,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACnE,IAAI,CAAC,MAAM,GAAG,SAAS,CAAA;gBACvB,MAAM,GAAG,IAAI,CAAA;YACf,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,EAAE,QAAQ,CAAC,EAAE,GAAG,YAA6B,EAAE,CAAC,CAAA;IACzD,CAAC;AACH,CAAC,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ModelSwitcher.d.ts","sourceRoot":"","sources":["../../../src/views/MessageInput/ModelSwitcher.tsx"],"names":[],"mappings":"AAuBA,eAAO,MAAM,aAAa,+CAiCzB,CAAA"}
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Button, Icon } from '@stack-spot/citric-react';
|
|
3
|
-
import { SelectionList } from '@stack-spot/portal-components/SelectionList';
|
|
4
|
-
import { agentToolsClient, genAiInferenceClient } from '@stack-spot/portal-network';
|
|
5
|
-
import { useState } from 'react';
|
|
6
|
-
import { useCurrentChat, useCurrentChatState } from '../../context/hooks.js';
|
|
7
|
-
import { useMessageInputDictionary } from './dictionary.js';
|
|
8
|
-
import { RowWrapperStyled } from './styled.js';
|
|
9
|
-
const styles = {
|
|
10
|
-
selection: {
|
|
11
|
-
position: 'absolute',
|
|
12
|
-
bottom: 'calc(100% + 10px)',
|
|
13
|
-
right: '0',
|
|
14
|
-
margin: '0',
|
|
15
|
-
'ul': {
|
|
16
|
-
margin: '0px',
|
|
17
|
-
},
|
|
18
|
-
},
|
|
19
|
-
};
|
|
20
|
-
export const ModelSwitcher = () => {
|
|
21
|
-
const t = useMessageInputDictionary();
|
|
22
|
-
const agent = useCurrentChatState('agent');
|
|
23
|
-
const chat = useCurrentChat();
|
|
24
|
-
const [visibleMenu, setVisibleMenu] = useState(false);
|
|
25
|
-
const [agentData] = agentToolsClient.agent.useStatefulQuery({ agentId: agent?.id || '' });
|
|
26
|
-
const [selectedLLMName, setSelectedLLMName] = useState();
|
|
27
|
-
const [models] = genAiInferenceClient.listModels.useStatefulQuery({ pageSize: 999 });
|
|
28
|
-
const { modelName, listItems } = getModelData(chat, setSelectedLLMName, setVisibleMenu, selectedLLMName, agentData, models);
|
|
29
|
-
return (_jsxs(RowWrapperStyled, { children: [_jsxs(Button, { className: "button-select-model", colorScheme: "light", size: "sm", "aria-label": t.agent, title: t.agent, onClick: () => setVisibleMenu(state => !state), children: [modelName, _jsx(Icon, { icon: "ChevronDown", group: "fill", size: "sm" })] }), _jsx(SelectionList, { id: "menuModelSwitcher", visible: visibleMenu, onHide: () => setVisibleMenu(false), items: listItems || [], style: styles.selection })] }));
|
|
30
|
-
};
|
|
31
|
-
function getModelData(chat, setSelectedModelName, setVisibleMenu, selectedModelName, agent, models) {
|
|
32
|
-
const modelListData = parseModelList(setSelectedModelName, setVisibleMenu, chat, agent?.visibility_level !== 'built_in' && !!agent?.model_id ? agent?.available_llm_models : models?.items);
|
|
33
|
-
if (agent?.visibility_level === 'built_in' || !!agent?.model_id) {
|
|
34
|
-
const modelDefaultFromList = modelListData.find((model) => model.active);
|
|
35
|
-
return { modelName: modelDefaultFromList?.label, listItems: modelListData };
|
|
36
|
-
}
|
|
37
|
-
const listItems = modelListData && modelListData?.length > 0 ? modelListData :
|
|
38
|
-
[{
|
|
39
|
-
active: true,
|
|
40
|
-
label: agent?.model_name || agent?.available_llm_models?.find((model) => model.is_default)?.model_name || '',
|
|
41
|
-
icon: _jsx(Icon, { icon: "StackSpot" }),
|
|
42
|
-
}];
|
|
43
|
-
const modelSelectedName = selectedModelName || agent?.model_name ||
|
|
44
|
-
agent?.available_llm_models?.find((model) => model.is_default)?.model_name;
|
|
45
|
-
return { modelName: modelSelectedName, listItems };
|
|
46
|
-
}
|
|
47
|
-
function parseModelList(setSelectedModelName, setVisibleMenu, chat, listModel) {
|
|
48
|
-
const data = Array();
|
|
49
|
-
listModel?.forEach((model) => {
|
|
50
|
-
if ('model_id' in model) {
|
|
51
|
-
data.push({
|
|
52
|
-
active: chat.get('selected_model_id') ? chat.get('selected_model_id') === model.model_id : model.is_default,
|
|
53
|
-
label: model?.model_name || 'LLM',
|
|
54
|
-
icon: _jsx(Icon, { icon: "Bookmark" }),
|
|
55
|
-
onClick: () => {
|
|
56
|
-
setSelectedModelName(model.model_name);
|
|
57
|
-
chat.set('selected_model_id', model.model_id);
|
|
58
|
-
setVisibleMenu(false);
|
|
59
|
-
},
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
data.push({
|
|
64
|
-
active: chat.get('selected_model_id') ? chat.get('selected_model_id') === model.id : model.resources[0]?.is_default,
|
|
65
|
-
label: model?.display_name || 'LLM',
|
|
66
|
-
icon: _jsx(Icon, { icon: "Bookmark" }),
|
|
67
|
-
onClick: () => {
|
|
68
|
-
setSelectedModelName(model.display_name);
|
|
69
|
-
chat.set('selected_model_id', model.id);
|
|
70
|
-
setVisibleMenu(false);
|
|
71
|
-
},
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
return data;
|
|
76
|
-
}
|
|
77
|
-
//# sourceMappingURL=ModelSwitcher.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ModelSwitcher.js","sourceRoot":"","sources":["../../../src/views/MessageInput/ModelSwitcher.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
class PlanningToolDictionaryHelper {
|
|
2
|
-
static instance: PlanningToolDictionaryHelper | undefined
|
|
3
|
-
private toolExecutionIdPlanningStep: Record<string, string> = {}
|
|
4
|
-
private toolExecutionIdToolStep: Record<string, string> = {}
|
|
5
|
-
private stepId: Record<string, number> = {}
|
|
6
|
-
|
|
7
|
-
private constructor() {
|
|
8
|
-
PlanningToolDictionaryHelper.instance = this
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
static create() {
|
|
12
|
-
return PlanningToolDictionaryHelper.instance ?? new PlanningToolDictionaryHelper()
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
setMessageIdPlanningStepToolExecutionId(messageId: string, toolExecutionId: string){
|
|
16
|
-
this.toolExecutionIdPlanningStep[toolExecutionId] = messageId
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
setMessageIdToolStepToolExecutionId(messageId: string, toolExecutionId: string){
|
|
20
|
-
this.toolExecutionIdToolStep[toolExecutionId] = messageId
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
setMessageIdForStepId(messageId: number, stepId: string){
|
|
24
|
-
this.stepId[stepId] = messageId
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
getMessageIdFromStepId(stepId: string){
|
|
28
|
-
return this.stepId[stepId]
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
getMessageIdPlanningStepFromToolExecutionId(toolExecutionId: string){
|
|
32
|
-
return this.toolExecutionIdPlanningStep[toolExecutionId]
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
getMessageIdToolStepFromToolExecutionId(toolExecutionId: string){
|
|
36
|
-
return this.toolExecutionIdToolStep[toolExecutionId]
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export const planningToolDictionaryHelper = PlanningToolDictionaryHelper.create()
|
|
41
|
-
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { ChatEntry, TextChatEntry } from '../state/ChatEntry'
|
|
2
|
-
import { planningToolDictionaryHelper } from './planning-tool'
|
|
3
|
-
|
|
4
|
-
export const updateToolStep = (messages: ChatEntry[], executionId: string,
|
|
5
|
-
newStatus: 'pending' | 'running' | 'success' | 'error' | 'awaiting_approval') => {
|
|
6
|
-
|
|
7
|
-
// if last message is a user message, no update in tool status is needed
|
|
8
|
-
if (messages[messages.length-1].getValue().agentType === 'user') return
|
|
9
|
-
|
|
10
|
-
const messageId = planningToolDictionaryHelper.getMessageIdPlanningStepFromToolExecutionId(executionId)
|
|
11
|
-
const message = messages.find((message) => `${message.id}` === messageId)
|
|
12
|
-
let update = false
|
|
13
|
-
const messageValue = message?.getValue()
|
|
14
|
-
messageValue?.steps?.map((step) => {
|
|
15
|
-
if (step.type === 'step') {
|
|
16
|
-
const tool = step.attempts?.[0].tools?.[0]
|
|
17
|
-
if (tool?.executionId === executionId && step.status !== newStatus) {
|
|
18
|
-
step.status = newStatus
|
|
19
|
-
update = true
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
})
|
|
23
|
-
|
|
24
|
-
if (update) {
|
|
25
|
-
message?.setValue({ ...messageValue as TextChatEntry })
|
|
26
|
-
}
|
|
27
|
-
}
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
import { Button, Icon } from '@stack-spot/citric-react'
|
|
2
|
-
import { SelectionList } from '@stack-spot/portal-components/SelectionList'
|
|
3
|
-
import { agentToolsClient, genAiInferenceClient } from '@stack-spot/portal-network'
|
|
4
|
-
import { AgentLlmModelDto, AgentModel } from '@stack-spot/portal-network/api/agent-tools'
|
|
5
|
-
import { LlmModelsResponse, PaginatedResponseLlmModelsResponse } from '@stack-spot/portal-network/api/genAiInference'
|
|
6
|
-
import { Dispatch, ReactElement, useState } from 'react'
|
|
7
|
-
import { CSSProperties } from 'styled-components'
|
|
8
|
-
import { useCurrentChat, useCurrentChatState } from '../../context/hooks'
|
|
9
|
-
import { useMessageInputDictionary } from './dictionary'
|
|
10
|
-
import { RowWrapperStyled } from './styled'
|
|
11
|
-
|
|
12
|
-
const styles = {
|
|
13
|
-
selection: {
|
|
14
|
-
position: 'absolute',
|
|
15
|
-
bottom: 'calc(100% + 10px)',
|
|
16
|
-
right: '0',
|
|
17
|
-
margin: '0',
|
|
18
|
-
'ul': {
|
|
19
|
-
margin: '0px',
|
|
20
|
-
},
|
|
21
|
-
},
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export const ModelSwitcher = () => {
|
|
25
|
-
const t = useMessageInputDictionary()
|
|
26
|
-
const agent = useCurrentChatState('agent')
|
|
27
|
-
const chat = useCurrentChat()
|
|
28
|
-
const [visibleMenu, setVisibleMenu] = useState(false)
|
|
29
|
-
const [agentData] = agentToolsClient.agent.useStatefulQuery({ agentId: agent?.id || '' })
|
|
30
|
-
const [selectedLLMName, setSelectedLLMName] = useState<string | undefined>()
|
|
31
|
-
const [models] = genAiInferenceClient.listModels.useStatefulQuery({ pageSize: 999 })
|
|
32
|
-
|
|
33
|
-
const { modelName, listItems } = getModelData(chat, setSelectedLLMName, setVisibleMenu, selectedLLMName, agentData, models)
|
|
34
|
-
|
|
35
|
-
return (
|
|
36
|
-
<RowWrapperStyled>
|
|
37
|
-
<Button
|
|
38
|
-
className="button-select-model"
|
|
39
|
-
colorScheme="light"
|
|
40
|
-
size="sm"
|
|
41
|
-
aria-label={t.agent}
|
|
42
|
-
title={t.agent}
|
|
43
|
-
onClick={() => setVisibleMenu(state => !state)}
|
|
44
|
-
>
|
|
45
|
-
{modelName}
|
|
46
|
-
<Icon icon="ChevronDown" group="fill" size="sm" />
|
|
47
|
-
</Button>
|
|
48
|
-
<SelectionList
|
|
49
|
-
id="menuModelSwitcher"
|
|
50
|
-
visible={visibleMenu}
|
|
51
|
-
onHide={() => setVisibleMenu(false)}
|
|
52
|
-
items={listItems || []}
|
|
53
|
-
style={styles.selection as CSSProperties}
|
|
54
|
-
/>
|
|
55
|
-
</RowWrapperStyled>
|
|
56
|
-
)
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
function getModelData(
|
|
61
|
-
chat: any,
|
|
62
|
-
setSelectedModelName: Dispatch<React.SetStateAction<string | undefined>>,
|
|
63
|
-
setVisibleMenu: Dispatch<React.SetStateAction<boolean>>,
|
|
64
|
-
selectedModelName?: string,
|
|
65
|
-
agent?: AgentModel,
|
|
66
|
-
models?: PaginatedResponseLlmModelsResponse) {
|
|
67
|
-
|
|
68
|
-
const modelListData = parseModelList(
|
|
69
|
-
setSelectedModelName, setVisibleMenu, chat,
|
|
70
|
-
agent?.visibility_level !== 'built_in' && !!agent?.model_id ? agent?.available_llm_models : models?.items,
|
|
71
|
-
)
|
|
72
|
-
|
|
73
|
-
if (agent?.visibility_level === 'built_in' || !!agent?.model_id) {
|
|
74
|
-
const modelDefaultFromList = modelListData.find((model) => model.active)
|
|
75
|
-
return { modelName: modelDefaultFromList?.label, listItems: modelListData }
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
const listItems =
|
|
79
|
-
modelListData && modelListData?.length > 0 ? modelListData :
|
|
80
|
-
[{
|
|
81
|
-
active: true,
|
|
82
|
-
label: agent?.model_name || agent?.available_llm_models?.find((model) => model.is_default)?.model_name || '',
|
|
83
|
-
icon: <Icon icon="StackSpot" />,
|
|
84
|
-
}]
|
|
85
|
-
|
|
86
|
-
const modelSelectedName = selectedModelName || agent?.model_name ||
|
|
87
|
-
agent?.available_llm_models?.find((model) => model.is_default)?.model_name
|
|
88
|
-
|
|
89
|
-
return { modelName: modelSelectedName, listItems }
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
function parseModelList(
|
|
93
|
-
setSelectedModelName: Dispatch<React.SetStateAction<string | undefined>>,
|
|
94
|
-
setVisibleMenu: Dispatch<React.SetStateAction<boolean>>,
|
|
95
|
-
chat: any,
|
|
96
|
-
listModel?: Array<AgentLlmModelDto | LlmModelsResponse>,
|
|
97
|
-
) {
|
|
98
|
-
const data = Array<{active?: boolean, label: string, icon: ReactElement, onClick: VoidFunction }>()
|
|
99
|
-
|
|
100
|
-
listModel?.forEach((model) => {
|
|
101
|
-
if ('model_id' in model) {
|
|
102
|
-
data.push({
|
|
103
|
-
active: chat.get('selected_model_id') ? chat.get('selected_model_id') === model.model_id : model.is_default,
|
|
104
|
-
label: model?.model_name || 'LLM',
|
|
105
|
-
icon: <Icon icon="Bookmark"/>,
|
|
106
|
-
onClick: () => {
|
|
107
|
-
setSelectedModelName(model.model_name)
|
|
108
|
-
chat.set('selected_model_id', model.model_id)
|
|
109
|
-
setVisibleMenu(false)
|
|
110
|
-
},
|
|
111
|
-
})
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
data.push({
|
|
115
|
-
active: chat.get('selected_model_id') ? chat.get('selected_model_id') === model.id : model.resources[0]?.is_default,
|
|
116
|
-
label: model?.display_name || 'LLM',
|
|
117
|
-
icon: <Icon icon="Bookmark"/>,
|
|
118
|
-
onClick: () => {
|
|
119
|
-
setSelectedModelName(model.display_name)
|
|
120
|
-
chat.set('selected_model_id', model.id)
|
|
121
|
-
setVisibleMenu(false)
|
|
122
|
-
},
|
|
123
|
-
})
|
|
124
|
-
}
|
|
125
|
-
})
|
|
126
|
-
return data
|
|
127
|
-
}
|