Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
83 commits
Select commit Hold shift + click to select a range
f70e92a
Knowledge graphs overview first draft
lumburovskalina Dec 17, 2025
0ec94e5
perf: update knowledge graph routes
andhreljaKern Dec 29, 2025
88d92f3
Create new knowledge graphs modal
lumburovskalina Dec 29, 2025
5de4fa9
Knowledge graph details page
lumburovskalina Dec 29, 2025
e093fde
Knowledge graphs details page
lumburovskalina Dec 30, 2025
cbc098b
Add types only once
lumburovskalina Dec 30, 2025
1e24642
Stable knowledge graphs display
lumburovskalina Dec 31, 2025
160f6c5
Radio selection for question catalogue or custom
lumburovskalina Jan 5, 2026
cf8df36
Execute question in live knowledge graphs
lumburovskalina Jan 5, 2026
95afc97
Rework checkboxes on stable knowledge graphs
lumburovskalina Jan 5, 2026
23593c1
Filters on the FE
lumburovskalina Jan 5, 2026
1d27977
Filters improvements and fixes
lumburovskalina Jan 6, 2026
2bf5d31
perf: send knowledgeGraphId to execute-question
andhreljaKern Jan 7, 2026
562321a
FE feedback implementation
lumburovskalina Jan 7, 2026
472e4a0
Long display texts in table fix
lumburovskalina Jan 7, 2026
f3ddaa8
Renaming knowledge-graphs to data-blocks
lumburovskalina Jan 9, 2026
c13ea73
First draft of sqlQueryConfig
lumburovskalina Jan 12, 2026
7d46432
Prefilled query with key words and copy to clipboard
lumburovskalina Jan 12, 2026
8d5fbc0
Removed unused code
lumburovskalina Jan 12, 2026
b52ea17
Improvement in prefilling data for blank query
lumburovskalina Jan 12, 2026
05444be
Fork join for the test sql clauses
lumburovskalina Jan 13, 2026
5ebe467
Fixes in the prefill values
lumburovskalina Jan 13, 2026
5de419d
chore: update submodules
andhreljaKern Jan 13, 2026
8f48641
perf: minor data blocks updates
andhreljaKern Jan 13, 2026
1e82980
perf: execute query
andhreljaKern Jan 13, 2026
79e77bf
First drafr for data block columns page
lumburovskalina Jan 13, 2026
48d2555
Kern table for data blocks columns
lumburovskalina Jan 14, 2026
f6972b2
Data block columns
lumburovskalina Jan 14, 2026
f5fd2cb
Put request fix
lumburovskalina Jan 14, 2026
fe833a4
DataBlock results display
lumburovskalina Jan 15, 2026
3ac03e2
init: data block attributes
andhreljaKern Jan 15, 2026
50c9b88
Data blocks column page
lumburovskalina Jan 15, 2026
0c80941
Delete data column fix
lumburovskalina Jan 15, 2026
ec4305a
Small fixes
lumburovskalina Jan 15, 2026
3209f90
Updating data columns fix
lumburovskalina Jan 15, 2026
18a1158
Rework of test where clase with one request
lumburovskalina Jan 15, 2026
2c6ae53
Deny reasons displayed correctly
lumburovskalina Jan 16, 2026
d277d04
Added colors for state and datatype
lumburovskalina Jan 16, 2026
c57a456
perf(ac-exec-env): data blocks support
andhreljaKern Jan 19, 2026
375fa1b
chore: update submodules
andhreljaKern Jan 19, 2026
ceb2201
Merge branch 'dev' into knowledge-graphs
andhreljaKern Jan 19, 2026
b75de11
Run on 10 changes
lumburovskalina Jan 20, 2026
d33c385
perf: data block source codes updates
andhreljaKern Jan 20, 2026
4af2f50
LLM Response for data block columns
lumburovskalina Jan 20, 2026
c32d41b
Merge branch 'knowledge-graphs' of github.com:code-kern-ai/refinery-u…
lumburovskalina Jan 20, 2026
8109dbb
Added warning when record_id is included in select
lumburovskalina Jan 20, 2026
67adf54
perf: data blocks support
andhreljaKern Jan 21, 2026
ad830bf
VIew record by id fixed for data block columns
lumburovskalina Jan 22, 2026
15db4fb
Progress fix
lumburovskalina Jan 22, 2026
5825451
Renaming to validate
lumburovskalina Jan 23, 2026
e84ed07
Added limit to the datablocks
lumburovskalina Jan 23, 2026
49bb29d
clear
lumburovskalina Jan 23, 2026
6ca3618
Sample records and record by record id
lumburovskalina Jan 23, 2026
dbf7814
Run on 10 sample records fix for data block columns
lumburovskalina Jan 26, 2026
a4a7c3e
LLM playground fix
lumburovskalina Jan 26, 2026
5af2e5c
added related datablocks to attribute
lumburovskalina Jan 26, 2026
8a5f68b
Related datablocks added
lumburovskalina Jan 26, 2026
18136a9
fix: inputRunningIdRef.toString
andhreljaKern Jan 26, 2026
db8018a
Smaller fixes on llm playground
lumburovskalina Jan 26, 2026
6bdb3b5
Open LLM playground fix
lumburovskalina Jan 26, 2026
55574c1
Integration audit template added
lumburovskalina Jan 26, 2026
d99794b
Warning for used attributes in data blocks
lumburovskalina Jan 26, 2026
98494f9
fix: missing related data blocks
andhreljaKern Jan 27, 2026
4eccc6e
Websockets changes for data blocks
lumburovskalina Jan 27, 2026
9b53048
Query executed, can be used message for live data blocks
lumburovskalina Jan 27, 2026
29b455c
perf: PR review comments
andhreljaKern Jan 28, 2026
44df940
perf: use refinery /test-where-clause
andhreljaKern Jan 28, 2026
e637be9
PR comments
lumburovskalina Jan 29, 2026
b4a4618
Merge branch 'knowledge-graphs' of github.com:code-kern-ai/refinery-u…
lumburovskalina Jan 29, 2026
58384a1
PR comments
lumburovskalina Jan 29, 2026
73dce52
PR comments
lumburovskalina Jan 29, 2026
608a1b4
PR comments
lumburovskalina Jan 29, 2026
338f7d1
Build fix
lumburovskalina Jan 29, 2026
47f7e00
PR comments
lumburovskalina Jan 29, 2026
2576abb
PR comments
lumburovskalina Jan 29, 2026
074be44
perf: add tooltip for running id select clause
andhreljaKern Jan 29, 2026
55b81d7
PR comments
lumburovskalina Jan 30, 2026
c4cd5be
Merge branch 'knowledge-graphs' of github.com:code-kern-ai/refinery-u…
lumburovskalina Jan 30, 2026
07f0a4c
Added templates to data blocks
lumburovskalina Jan 30, 2026
b612017
Live query results display
lumburovskalina Jan 30, 2026
16e7cc2
Merge remote-tracking branch 'origin/dev' into knowledge-graphs
lumburovskalina Feb 6, 2026
fb7758e
PR comments
lumburovskalina Feb 6, 2026
d5445a2
submodules merge
lumburovskalina Feb 9, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/components/projects/ProjectsList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import { useWebsocket } from "@/submodules/react-components/hooks/web-socket/use
import { getAllProjects } from "@/src/services/base/project";
import { getOverviewStats } from "@/src/services/base/organization";
import { Application, CurrentPage } from "@/submodules/react-components/hooks/web-socket/constants";
import { setActiveDataBlock } from "@/src/reduxStore/states/pages/data-blocks";

export default function ProjectsList() {
const dispatch = useDispatch();
Expand All @@ -37,6 +38,7 @@ export default function ProjectsList() {
dispatch(setAllEmbeddings([]));
dispatch(setDataSlices([]));
dispatch(setComments(null));
dispatch(setActiveDataBlock(null));
}, []);

useEffect(() => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -519,7 +519,7 @@ export default function AttributeCalculation() {
</div>}
</div>

<DangerZone elementType={DangerZoneEnum.ATTRIBUTE} name={currentAttribute.name} id={currentAttribute.id} />
<DangerZone elementType={DangerZoneEnum.ATTRIBUTE} name={currentAttribute.name} id={currentAttribute.id} relatedDataBlocks={currentAttribute.relatedDataBlocks} />
</div >
</div >}
</div >)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,20 @@ import { ModalButton, ModalEnum } from "@/src/types/shared/modal";
import { useCallback, useEffect, useState } from "react";
import { useSelector } from "react-redux";
import { calculateUserAttributeAllRecordsPost } from "@/src/services/base/project-setting";
import { useRouter } from "next/router";

const ACCEPT_BUTTON = { buttonCaption: 'Accept', useButton: true };


export default function ConfirmExecutionModal(props: ConfirmExecutionModalProps) {
const router = useRouter();
const projectId = useSelector(selectProjectId);
const modalExecuteAll = useSelector(selectModal(ModalEnum.EXECUTE_ATTRIBUTE_CALCULATION));

const calculateUserAttributeAllRecords = useCallback(() => {
calculateUserAttributeAllRecordsPost(projectId, { attributeId: props.currentAttributeId }, (res) => { });
}, [modalExecuteAll]);
const attributeId = props.dataBlockId ? router.query.columnId as string : props.currentAttributeId;
calculateUserAttributeAllRecordsPost(projectId, { attributeId: attributeId, dataBlockId: props.dataBlockId }, (res) => { });
}, [modalExecuteAll, props.currentAttributeId, props.dataBlockId]);

useEffect(() => {
setAcceptButton({ ...ACCEPT_BUTTON, emitFunction: calculateUserAttributeAllRecords, disabled: modalExecuteAll.requestedSomething });
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import LoadingIcon from "@/submodules/react-components/components/LoadingIcon";
import { setModalStates } from "@/src/reduxStore/states/modal";
import { selectProjectId } from "@/src/reduxStore/states/project";
import { selectDataBlock } from "@/src/reduxStore/states/pages/data-blocks";
import { ExecutionContainerProps, SampleRecord } from "@/src/types/components/projects/projectId/settings/attribute-calculation";
import { AttributeState } from "@/src/types/components/projects/projectId/settings/data-schema";
import { ModalEnum } from "@/src/types/shared/modal";
Expand All @@ -17,17 +18,23 @@ import { getSampleRecords } from "@/src/services/base/attribute";
import { DataTypeEnum } from "@/src/types/shared/general";
import KernButton from "@/submodules/react-components/components/kern-button/KernButton";
import useRefFor from "@/submodules/react-components/hooks/useRefFor";
import ViewRecordDetailsDataBlockColumnModal from "../../data-blocks/dataBlockId/columnId/ViewRecordDetailsDataBlockColumnModal";
import { getRecordByRecordIdDataBlockColumn, getSampleRecordsDataBlockColumn } from "@/src/services/base/data-blocks";


export default function ExecutionContainer(props: ExecutionContainerProps) {
const projectId = useSelector(selectProjectId);
const dispatch = useDispatch();

const projectId = useSelector(selectProjectId);
const dataBlock = useSelector(selectDataBlock);

const [requestedSomething, setRequestedSomething] = useState(false);
const [runOn10HasError, setRunOn10HasError] = useState(false);
const [sampleRecords, setSampleRecords] = useState<SampleRecord>(null);
const [checkIfAtLeastRunning, setCheckIfAtLeastRunning] = useState(false);
const [checkIfAtLeastQueued, setCheckIfAtLeastQueued] = useState(false);
const currentAttributesRef = useRefFor(props.currentAttribute);


useEffect(() => {
if (props.enableRunButton) {
Expand All @@ -36,41 +43,64 @@ export default function ExecutionContainer(props: ExecutionContainerProps) {
}
}, [props.enableRunButton]);

const currentAttributesRef = useRefFor(props.currentAttribute);
const postProcessSampleRecords = useCallback((res: any) => {
const sampleRecordsFinal = { ...res };
setRequestedSomething(false);
props.setEnabledButton(false);
setRunOn10HasError(sampleRecordsFinal.calculatedAttributes.length > 0 ? false : true);
if (currentAttributesRef.current.dataType == DataTypeEnum.EMBEDDING_LIST || currentAttributesRef.current.dataType == DataTypeEnum.TEXT_LIST) {
sampleRecordsFinal.calculatedAttributesList = sampleRecordsFinal.calculatedAttributes.map((record: string) => JSON.parse(record));
sampleRecordsFinal.calculatedAttributesListDisplay = extendArrayElementsByUniqueId(sampleRecordsFinal.calculatedAttributesList);
}
sampleRecordsFinal.calculatedAttributesDisplay = extendArrayElementsByUniqueId(sampleRecordsFinal.calculatedAttributes);
setSampleRecords(sampleRecordsFinal);
props.refetchCurrentAttribute();
}, [props.setEnabledButton, props.refetchCurrentAttribute]);

const calculateUserAttributeSampleRecords = useCallback(() => {
if (requestedSomething) return;
setRequestedSomething(true);
getSampleRecords(projectId, currentAttributesRef.current.id, (res) => {
const sampleRecordsFinal = { ...res };
setRequestedSomething(false);
props.setEnabledButton(false);
setRunOn10HasError(sampleRecordsFinal.calculatedAttributes.length > 0 ? false : true);
if (currentAttributesRef.current.dataType == DataTypeEnum.EMBEDDING_LIST || currentAttributesRef.current.dataType == DataTypeEnum.TEXT_LIST) {
sampleRecordsFinal.calculatedAttributesList = sampleRecordsFinal.calculatedAttributes.map((record: string) => JSON.parse(record));
sampleRecordsFinal.calculatedAttributesListDisplay = extendArrayElementsByUniqueId(sampleRecordsFinal.calculatedAttributesList);
}
sampleRecordsFinal.calculatedAttributesDisplay = extendArrayElementsByUniqueId(sampleRecordsFinal.calculatedAttributes);
setSampleRecords(sampleRecordsFinal);
props.refetchCurrentAttribute();
});
}, [projectId]);
if (props.isDataBlockColumn) {
getSampleRecordsDataBlockColumn(projectId, dataBlock?.id, currentAttributesRef.current.id, (res) => {
postProcessSampleRecords(res);
});
}
else {
getSampleRecords(projectId, currentAttributesRef.current.id, (res) => {
postProcessSampleRecords(res);
});
}
}, [projectId, dataBlock?.id, props.isDataBlockColumn]);

function recordByRecordId(recordId: string) {
getRecordByRecordId(projectId, recordId, (res) => {
dispatch(setModalStates(ModalEnum.VIEW_RECORD_DETAILS, { record: postProcessRecordByRecordId(res) }));
});
}


const recordByRecordIdDataBlockColumn = useCallback((recordId: string) => {
getRecordByRecordIdDataBlockColumn(projectId, dataBlock?.id, recordId, (res) => {
dispatch(setModalStates(ModalEnum.VIEW_RECORD_DETAILS_DATA_BLOCK_COLUMN, { record: postProcessRecordByRecordId(res) }));
});
}, [projectId, dataBlock?.id]);

const requestedSomethingRef = useRefFor(requestedSomething);
const executeAttribute = useCallback(() => {
dispatch(setModalStates(ModalEnum.EXECUTE_ATTRIBUTE_CALCULATION, { open: true, requestedSomething: requestedSomethingRef.current }));
}, []);

const sampleRecordsRef = useRefFor(sampleRecords);
const viewRecordDetails = useCallback((index: number) => () => {
dispatch(setModalStates(ModalEnum.VIEW_RECORD_DETAILS, { open: true, recordIdx: index }));
recordByRecordId(sampleRecordsRef.current.recordIds[index]);
}, []);
if (props.isDataBlockColumn) {
dispatch(setModalStates(ModalEnum.VIEW_RECORD_DETAILS_DATA_BLOCK_COLUMN, { open: true, recordIdx: index }));
recordByRecordIdDataBlockColumn(sampleRecordsRef.current.recordIds[index]);
}
else {
dispatch(setModalStates(ModalEnum.VIEW_RECORD_DETAILS, { open: true, recordIdx: index }));
recordByRecordId(sampleRecordsRef.current.recordIds[index]);
}
}, [dataBlock, props.isDataBlockColumn]);

const sampleRecordsFinal = useMemo(() => {
if (sampleRecords && sampleRecords.calculatedAttributesDisplay) {
Expand Down Expand Up @@ -159,6 +189,7 @@ export default function ExecutionContainer(props: ExecutionContainerProps) {
</div >}

<ViewRecordDetailsModal currentAttribute={props.currentAttribute} sampleRecords={sampleRecordsFinal} />
<ConfirmExecutionModal currentAttributeId={props.currentAttribute.id} />
<ConfirmExecutionModal currentAttributeId={props.currentAttribute.id} dataBlockId={dataBlock?.id} />
<ViewRecordDetailsDataBlockColumnModal currentAttribute={props.currentAttribute} sampleRecords={sampleRecordsFinal} />
</div >)
}
Loading