Skip to content

Commit 67d81a7

Browse files
Added text list to data browser
1 parent 82a1c65 commit 67d81a7

File tree

5 files changed

+27
-18
lines changed

5 files changed

+27
-18
lines changed

src/components/projects/projectId/attributes/attributeId/LLM/LLMPlaygroundModal.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ export default function LLMPlaygroundModal() {
155155
<div className="grid grid-cols-2 gap-2 text-sm max-h-52 overflow-y-auto" style={{ gridTemplateColumns: `max-content auto` }}>
156156
{recordKeys.map((rk) => <Fragment key={rk.name}>
157157
<label className="block font-bold text-gray-900">{rk.name}</label>
158-
{recordData.map((record) => rk.dataType == DataTypeEnum.EMBEDDING_LIST ? <div key={record.running_id} className="flex flex-col divide-y divide-gray-200">
158+
{recordData.map((record) => (rk.dataType == DataTypeEnum.EMBEDDING_LIST || rk.dataType == DataTypeEnum.TEXT_LIST) ? <div key={record.running_id} className="flex flex-col divide-y divide-gray-200">
159159
{record[rk.name].map((li, idx) => <span key={idx} className="text-gray-700">{li}</span>)}
160160
</div> : <span key={record.running_id} className="text-gray-700">{record[rk.name]}</span>)}
161161
</Fragment>)}

src/components/projects/projectId/attributes/attributeId/ViewRecordDetailsModal.tsx

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import { ModalEnum } from "@/src/types/shared/modal";
44
import { useSelector } from "react-redux";
55
import style from '@/src/styles/components/projects/projectId/attribute-calculation.module.css';
66
import { RecordDisplay } from "@/src/components/shared/record-display/RecordDisplay";
7-
import { DataTypeEnum } from "@/src/types/shared/general";
87
import { ViewRecordDetailsModalProps } from "@/src/types/components/projects/projectId/settings/attribute-calculation";
98
import { selectVisibleAttributesHeuristics } from "@/src/reduxStore/states/pages/settings";
109

@@ -23,13 +22,9 @@ export default function ViewRecordDetailsModal(props: ViewRecordDetailsModalProp
2322
record={modalViewRecordDetails.record} />
2423
<div className="text-sm leading-5 text-left text-gray-900 font-medium">Calculated value</div>
2524
<div className="text-sm leading-5 text-left text-gray-500 font-normal whitespace-pre-line">
26-
{props.currentAttribute.dataType != DataTypeEnum.EMBEDDING_LIST ? <span>
25+
<div className="flex flex-col gap-y-2 divide-y">
2726
{props.sampleRecords[modalViewRecordDetails.recordIdx].calculatedValue.value}
28-
</span> : <div className="flex flex-col gap-y-2 divide-y">
29-
{props.sampleRecords[modalViewRecordDetails.recordIdx].calculatedValue.value.map((item: any) => <span key={item} className="mt-1">
30-
{item}
31-
</span>)}
32-
</div>}
27+
</div>
3328
</div>
3429
</div>
3530
</Modal>

src/components/projects/projectId/data-browser/DataBrowser.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,15 @@ export default function DataBrowser() {
4848
refetchAttributesAndProcess();
4949
refetchLabelingTasksAndProcess();
5050
refetchEmbeddingsAndPostProcess();
51-
refetchUniqueValuesAndProcess();
5251
}, [projectId, users, user]);
5352

53+
useEffect(() => {
54+
if (!attributes || attributes.length == 0 || !projectId) return;
55+
getUniqueValuesByAttributes(projectId, (res) => {
56+
dispatch(setUniqueValuesDict(postProcessUniqueValues(res, attributes)));
57+
});
58+
}, [attributes, projectId]);
59+
5460
useEffect(() => {
5561
if (!projectId || !labelingTasks || !recordList) return;
5662
refetchRecordCommentsAndProcess(recordList);
@@ -140,12 +146,6 @@ export default function DataBrowser() {
140146
setSearchRequest({ offset: searchRequest.offset + searchRequest.limit, limit: searchRequest.limit });
141147
}
142148

143-
function refetchUniqueValuesAndProcess() {
144-
getUniqueValuesByAttributes(projectId, (res) => {
145-
dispatch(setUniqueValuesDict(postProcessUniqueValues(res, attributes)));
146-
});
147-
}
148-
149149
const setSearchRequestToInit = useCallback(() => {
150150
setSearchRequest(SEARCH_REQUEST);
151151
}, []);

src/components/projects/projectId/data-browser/SearchGroups.tsx

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import { getRecordsByStaticSlice, searchRecordsExtended } from "@/src/services/b
2929
import { staticDataSlicesCurrentCount } from "@/src/services/base/dataSlices";
3030
import KernButton from "@/submodules/react-components/components/kern-button/KernButton";
3131
import { MemoIconArrowDown, MemoIconArrowsRandom, MemoIconFilterOff, MemoIconPlus, MemoIconPointerOff, MemoIconTrash } from "@/submodules/react-components/components/kern-icons/icons";
32+
import { useConsoleLog } from "@/submodules/react-components/hooks/useConsoleLog";
3233

3334
const GROUP_SORT_ORDER = 0;
3435
let GLOBAL_SEARCH_GROUP_COUNT = 0;
@@ -336,7 +337,14 @@ export default function SearchGroups() {
336337
const attributeName = formControlsIdx['name'];
337338
attributeType = getAttributeType(attributesSortOrder, attributeName);
338339
}
339-
if (attributeType !== DataTypeEnum.BOOLEAN) {
340+
if (attributeType == DataTypeEnum.TEXT_LIST) {
341+
operatorsCopy.push({
342+
value: SearchOperator.CONTAINS.split("_").join(" "),
343+
});
344+
tooltipsCopy.push(getSearchOperatorTooltip(SearchOperator.CONTAINS));
345+
formControlsIdx['operator'] = SearchOperator.CONTAINS;
346+
347+
} else if (attributeType !== DataTypeEnum.BOOLEAN) {
340348
for (let t of Object.values(SearchOperator)) {
341349
operatorsCopy.push({
342350
value: t.split("_").join(" "),
@@ -357,6 +365,8 @@ export default function SearchGroups() {
357365
dispatch(setFullSearchStore(fullSearchCopy));
358366
}
359367

368+
useConsoleLog(uniqueValuesDict, 'uniqueValuesDict');
369+
360370
function removeSearchGroupItem(groupKey, index) {
361371
const fullSearchCopy = jsonCopy(fullSearchStore);
362372
fullSearchCopy[groupKey].groupElements.splice(index, 1);
@@ -622,7 +632,7 @@ export default function SearchGroups() {
622632
}
623633
</div>
624634
</div>
625-
{uniqueValuesDict[groupItem['name']] && groupItem['operator'] != '' && groupItem['operator'] != 'BETWEEN' && groupItem['operator'] != 'IN' && groupItem['operator'] != 'IN WC' ? (
635+
{(uniqueValuesDict[groupItem['name']] && groupItem['operator'] != '' && groupItem['operator'] != 'BETWEEN' && groupItem['operator'] != 'IN' && groupItem['operator'] != 'IN WC' || saveAttributeType == DataTypeEnum.TEXT_LIST) ? (
626636
<div className="my-2">
627637
<KernDropdown options={uniqueValuesDict[groupItem['name']]} buttonName={groupItem['searchValue'] ? groupItem['searchValue'] : 'Select value'}
628638
selectedOption={(option: any) => selectValueDropdown(option, index, 'searchValue', group.key)} fontClass="font-dmMono" />

src/util/components/projects/projectId/data-browser/data-browser-helper.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,9 +176,13 @@ function parseUTC(utc: string, forOutlier: boolean = false) {
176176
export function postProcessUniqueValues(uniqueValues: any, attributesSortOrder: any) {
177177
const uniqueValuesDict = uniqueValues;
178178
for (let key in uniqueValuesDict) {
179-
const attributeType = getAttributeType(attributesSortOrder, key);
179+
const attributeType = attributesSortOrder.find(att => att.name == key)?.dataType;
180180
if (attributeType == DataTypeEnum.TEXT || attributeType == DataTypeEnum.LLM_RESPONSE) {
181181
delete uniqueValuesDict[key];
182+
} else if (attributeType == DataTypeEnum.TEXT_LIST) {
183+
uniqueValuesDict[key] = uniqueValuesDict[key].map((value: string) => {
184+
return JSON.parse(value);
185+
})[0];
182186
}
183187
}
184188
return uniqueValuesDict;

0 commit comments

Comments
 (0)