Skip to content

Commit a366982

Browse files
authored
Merge pull request #97 from iceljc/features/refine-chat-window
add active rounds
2 parents a4411bb + 0021d6e commit a366982

File tree

5 files changed

+76
-7
lines changed

5 files changed

+76
-7
lines changed

src/lib/common/StateModal.svelte

Lines changed: 52 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,21 +29,28 @@
2929
/** @type {boolean} */
3030
export let validateKey = true;
3131
export let validateValue = true;
32+
export let requireActiveRounds = false;
3233
3334
/** @type {import('$types').UserStateDetailModel[]} */
3435
export let states = [];
3536
37+
/** @type {import('$types').UserStateDetailModel} */
38+
const defaultState = {
39+
key: { data: '', isValid: true },
40+
value: { data: '', isValid: true },
41+
active_rounds: { data: -1, isValid: true }
42+
};
43+
3644
$: {
3745
if (isOpen) {
3846
if (states?.length > 0) {
3947
states = [...states];
4048
} else {
41-
states = [{ key: { data: '', isValid: true }, value: { data: '', isValid: true } }];
49+
states = [{...JSON.parse(JSON.stringify(defaultState))}];
4250
}
4351
}
4452
}
4553
46-
4754
/** @param {any} e */
4855
function handleConfirm(e) {
4956
e.preventDefault();
@@ -76,7 +83,7 @@
7683
}
7784
7885
function addState() {
79-
states = [...states, { key: { data: '', isValid: true }, value: { data: '', isValid: true } }];
86+
states = [...states, {...JSON.parse(JSON.stringify(defaultState))}];
8087
}
8188
8289
/** @param {number} index */
@@ -111,6 +118,34 @@
111118
return state;
112119
});
113120
}
121+
122+
/**
123+
* @param {any} e
124+
* @param {number} index
125+
*/
126+
function changeActiveRounds(e, index) {
127+
states = states.map((state, idx) => {
128+
if (idx === index) {
129+
state.active_rounds.isValid = true;
130+
state.active_rounds.data = validateActiveRounds(Number(e.target.value) || 0);
131+
}
132+
return state;
133+
});
134+
}
135+
136+
/** @param {number} rounds */
137+
function validateActiveRounds(rounds) {
138+
let res = rounds;
139+
const lowerLimit = -1;
140+
const upperLimit = 9999;
141+
142+
if (rounds <= 0) {
143+
res = lowerLimit;
144+
} else if (rounds > upperLimit) {
145+
res = upperLimit;
146+
}
147+
return res;
148+
}
114149
</script>
115150
116151
<Modal class={className} fade size={size} isOpen={isOpen} toggle={() => toggleModal && toggleModal()}>
@@ -119,7 +154,7 @@
119154
<Form class="state-form">
120155
{#each states as state, idx (idx)}
121156
<Row>
122-
<div class="state-input">
157+
<div class={`${requireActiveRounds ? 'state-key-input' : 'state-input'}`}>
123158
<FormGroup>
124159
{#if idx === 0}
125160
<label for="key">
@@ -129,7 +164,7 @@
129164
<Input class={`${!state.key.isValid ? 'invalid' : ''}`} placeholder="Enter a key" value={state.key.data} maxlength={50} on:input={(e) => changeKey(e, idx)} />
130165
</FormGroup>
131166
</div>
132-
<div class="state-input">
167+
<div class={`${requireActiveRounds ? 'state-key-input' : 'state-input'}`}>
133168
<FormGroup>
134169
{#if idx === 0}
135170
<label for="value">
@@ -139,6 +174,18 @@
139174
<Input class={`${!state.value.isValid ? 'invalid' : ''}`} placeholder="Enter a value" value={state.value.data} maxlength={1000} on:input={(e) => changeValue(e, idx)} />
140175
</FormGroup>
141176
</div>
177+
{#if requireActiveRounds}
178+
<div class="state-num-input">
179+
<FormGroup>
180+
{#if idx === 0}
181+
<label for="value">
182+
{`Active rounds (Optional)`}
183+
</label>
184+
{/if}
185+
<Input type="number" placeholder="Enter a value" value={state.active_rounds.data} on:input={(e) => changeActiveRounds(e, idx)} />
186+
</FormGroup>
187+
</div>
188+
{/if}
142189
<div class="state-delete">
143190
{#if idx !== 0}
144191
<Button

src/lib/helpers/types.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,7 @@ IRichContent.prototype.text;
303303
* @typedef {Object} UserStateDetailModel
304304
* @property {{data: string, isValid: boolean}} key - The state key.
305305
* @property {{data: string, isValid: boolean}} value - The state value.
306+
* @property {{data: number, isValid: boolean}} active_rounds - The state active rounds.
306307
*/
307308

308309
/**

src/lib/scss/custom/pages/_chat.scss

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -454,6 +454,18 @@
454454
.state-input {
455455
flex: 0.45;
456456
}
457+
458+
.state-key-input {
459+
flex: 0.3;
460+
}
461+
462+
.state-value-input {
463+
flex: 0.4;
464+
}
465+
466+
.state-num-input {
467+
flex: 0.2;
468+
}
457469

458470
.state-delete {
459471
flex: 0.1;

src/lib/services/conversation-service.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,13 @@ function buildConversationUserStates(conversationId) {
9090
if (!!userStates && userStates.conversationId == conversationId && userStates.states?.length > 0) {
9191
// @ts-ignore
9292
const states = userStates.states.map(state => {
93-
return `${state.key.data}=${state.value.data}`;
93+
return {
94+
key: state.key.data,
95+
value: state.value.data,
96+
active_rounds: state.active_rounds.data || -1
97+
};
9498
});
99+
conversationUserStateStore.reset();
95100
return states;
96101
}
97102
return [];

src/routes/chat/[agentId]/[conversationId]/chat-box.svelte

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -468,13 +468,16 @@
468468
const conversationUserStates = conversationUserStateStore.get();
469469
if (!!conversationUserStates && conversationUserStates.conversationId == params.conversationId && !!conversationUserStates.states) {
470470
userAddStates = [...conversationUserStates.states];
471-
}
471+
} else {
472+
userAddStates = [];
473+
}
472474
}
473475
474476
function handleConfirmUserAddStates() {
475477
const cleanStates = userAddStates.map(state => {
476478
state.key.data = _.trim(state.key.data);
477479
state.value.data = _.trim(state.value.data);
480+
state.active_rounds.data = Number(state.active_rounds.data);
478481
return state;
479482
});
480483
conversationUserStateStore.put({
@@ -689,6 +692,7 @@
689692
<StateModal
690693
isOpen={isOpenUserAddStateModal}
691694
bind:states={userAddStates}
695+
requireActiveRounds
692696
toggleModal={toggleUserAddStateModal}
693697
confirm={handleConfirmUserAddStates}
694698
cancel={toggleUserAddStateModal}

0 commit comments

Comments
 (0)