Skip to content

Commit c1e14b4

Browse files
committed
merge confilics
2 parents fbf3c9e + dfd70e4 commit c1e14b4

36 files changed

+2185
-9
lines changed

src/components/projects/projectId/data-browser/modals/SimilaritySeachModal.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ export default function SimilaritySearchModal() {
4343

4444

4545
function getSimilarRecords(hasFilter: boolean = false) {
46-
const attFilter = hasFilter ? prepareAttFilter(filterAttributesForm, attributes) : null;
46+
const attFilter = hasFilter ? prepareAttFilter(filterAttributesForm, attributes) as string : null;
4747
getRecordsBySimilarity(projectId, selectedEmbedding.id, modalSS.recordId, attFilter, null, (res) => {
4848
dispatch(setSearchRecordsExtended(postProcessRecordsExtended(res, labelingTasks)));
4949
dispatch(setRecordsInDisplay(true));

src/components/projects/projectId/overview/ProjectOverviewCards.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,5 +56,5 @@ export default function ProjectOverviewCards(props: ProjectOverviewCardsProps) {
5656
))
5757
}
5858
</dl >
59-
</div >);
59+
</div>);
6060
}
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
import Modal from "@/src/components/shared/modal/Modal";
2+
import { selectModal } from "@/src/reduxStore/states/modal";
3+
import { selectVisibleAttributesDataBrowser } from "@/src/reduxStore/states/pages/settings";
4+
import { selectProjectId } from "@/src/reduxStore/states/project";
5+
import { createEvaluationGroups, getEvaluationSets } from "@/src/services/base/playground";
6+
import { ModalButton, ModalEnum } from "@/src/types/shared/modal";
7+
import { useCallback, useEffect, useRef, useState } from "react";
8+
import { useDispatch, useSelector } from "react-redux";
9+
10+
const ACCEPT_BUTTON = { buttonCaption: 'Create', useButton: true };
11+
12+
type CreateEvaluationGroupModalProps = {
13+
refetchEvaluationGroups: () => void;
14+
}
15+
16+
export default function CreateEvaluationGroupModal(props: CreateEvaluationGroupModalProps) {
17+
const dispatch = useDispatch();
18+
19+
const projectId = useSelector(selectProjectId);
20+
21+
const [acceptButton, setAcceptButton] = useState<ModalButton>(ACCEPT_BUTTON);
22+
const [name, setName] = useState("");
23+
const [evaluationSets, setEvaluationSets] = useState([]);
24+
const [selectedSets, setSelectedSets] = useState([]);
25+
const evaluationGroupModalState = useSelector(selectModal(ModalEnum.EVALUATION_GROUP));
26+
27+
const createEvaluationGroupPost = useCallback(() => {
28+
createEvaluationGroups(projectId, selectedSets.map((set) => set.id), name, (res) => {
29+
props.refetchEvaluationGroups();
30+
});
31+
}, [name, selectedSets, projectId]);
32+
33+
useEffect(() => {
34+
if (!evaluationGroupModalState.open) {
35+
setName("");
36+
setSelectedSets([]);
37+
}
38+
}, [evaluationGroupModalState.open, dispatch]);
39+
40+
useEffect(() => {
41+
setAcceptButton({ ...acceptButton, emitFunction: createEvaluationGroupPost, disabled: selectedSets.length === 0 || name === "" });
42+
}, [createEvaluationGroupPost, name, selectedSets]);
43+
44+
useEffect(() => {
45+
if (!evaluationGroupModalState.open) return
46+
getEvaluationSets(projectId, (res) => {
47+
setEvaluationSets(res);
48+
});
49+
}, [projectId, evaluationGroupModalState.open]);
50+
51+
return <Modal modalName={ModalEnum.EVALUATION_GROUP} acceptButton={acceptButton} className="md:max-w-6xl">
52+
<div className="h-full">
53+
<div className="flex flex-grow justify-center text-lg leading-6 text-gray-900 font-medium">Create new evaluation group</div>
54+
<div className="bg-white grid overflow-hidden min-h-full grid-cols-2 h-[calc(100vh-200px)] overflow-y-scroll">
55+
<div className="flex flex-col gap-y-2 m-3">
56+
<div className="flex items-center">
57+
<span className="mr-4">Execution</span>
58+
</div>
59+
<input placeholder="Enter name..."
60+
className="placeholder-italic w-full p-2 line-height-textarea border rounded-md border-gray-300 focus:outline-none focus:ring-2 focus:ring-gray-300 focus:ring-offset-2 focus:ring-offset-gray-100"
61+
onChange={(event: any) => { setName(event.target.value); }}
62+
value={name}
63+
/>
64+
<div className="flex items-center">
65+
<span className="mr-4">Selected results</span>
66+
</div>
67+
{selectedSets && selectedSets.map((set, index) => (<div key={set.id} className="bg-white overflow-hidden shadow rounded-lg border p-2 relative hover:border-red-400 hover:border-opacity-50 cursor-pointer transition-all duration-200 ease-in-out"
68+
onClick={() => {
69+
setEvaluationSets([...evaluationSets, set]);
70+
const newSelectedSets = selectedSets.filter((item) => item.id !== set.id);
71+
setSelectedSets(newSelectedSets);
72+
}}>
73+
{set.question}
74+
</div >))}
75+
</div>
76+
<div className="h-full border-gray-300 border-l">
77+
<div>Evaluation sets</div>
78+
{evaluationSets && evaluationSets.map((set, index) => (<div key={set.id} className="bg-white overflow-hidden shadow rounded-lg border m-4 p-2 relative hover:border-green-400 hover:border-opacity-30 cursor-pointer transition-all duration-200 ease-in-out"
79+
onClick={() => {
80+
setSelectedSets([...selectedSets, set]);
81+
const newEvaluationSets = evaluationSets.filter((item) => item.id !== set.id);
82+
setEvaluationSets(newEvaluationSets);
83+
}}>
84+
{set.question}
85+
</div >))}
86+
</div>
87+
</div>
88+
</div>
89+
</Modal>
90+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import Modal from "@/src/components/shared/modal/Modal";
2+
import { selectOnAttributeEmbeddings } from "@/src/reduxStore/states/pages/settings";
3+
import { selectProjectId } from "@/src/reduxStore/states/project";
4+
import { createEvaluationRun } from "@/src/services/base/playground";
5+
import { Embedding } from "@/src/types/components/projects/projectId/settings/embeddings";
6+
import { EvaluationGroup } from "@/src/types/components/projects/projectId/settings/playground";
7+
import { ModalButton, ModalEnum } from "@/src/types/shared/modal";
8+
import KernDropdown from "@/submodules/react-components/components/KernDropdown";
9+
import { useCallback, useEffect, useState } from "react";
10+
import { useSelector } from "react-redux";
11+
12+
const ACCEPT_BUTTON = { buttonCaption: 'Create', useButton: true };
13+
const EVALUATION_RUN_THRESHOLD_DEFAULT = -9999;
14+
15+
export default function CreateEvaluationRunModal({ evaluationGroups, setRefetchTrigger }) {
16+
const projectId = useSelector(selectProjectId);
17+
const onAttributeEmbeddings = useSelector(selectOnAttributeEmbeddings);
18+
19+
const [acceptButton, setAcceptButton] = useState<ModalButton>(ACCEPT_BUTTON);
20+
const [selectedEmbedding, setSelectedEmbedding] = useState<Embedding>(null);
21+
const [threshold, setThreshold] = useState<number>(EVALUATION_RUN_THRESHOLD_DEFAULT);
22+
const [evaluationGroup, setEvaluationGroup] = useState<EvaluationGroup>(null);
23+
24+
const createEvaluationRunPost = useCallback(() => {
25+
createEvaluationRun(projectId, selectedEmbedding.id, evaluationGroup.id, threshold, (res) => {
26+
setEvaluationGroup(null);
27+
setSelectedEmbedding(null);
28+
setRefetchTrigger((prev => !prev));
29+
});
30+
}, [evaluationGroup, selectedEmbedding, projectId, threshold]);
31+
32+
useEffect(() => {
33+
setAcceptButton({ ...acceptButton, emitFunction: createEvaluationRunPost, disabled: !selectedEmbedding || !evaluationGroup });
34+
}, [selectedEmbedding, evaluationGroup]);
35+
36+
return <Modal modalName={ModalEnum.EVALUATION_RUN} acceptButton={acceptButton}>
37+
<div className="h-full">
38+
<div className="flex flex-grow justify-center text-lg leading-6 text-gray-900 font-medium">Create new evaluation run</div>
39+
<div className="bg-white grid min-h-full gap-2 items-center" style={{ gridTemplateColumns: 'max-content auto' }}>
40+
<span className="mr-3">Embedding</span>
41+
<KernDropdown dropdownWidth="w-full" options={onAttributeEmbeddings} buttonName={selectedEmbedding ? selectedEmbedding.name : 'Select embedding'} selectedOption={(value) => setSelectedEmbedding(value)} dropdownClasses="my-2" />
42+
<span className="mr-3">Evaluation group</span>
43+
<KernDropdown dropdownWidth="w-full" options={evaluationGroups} buttonName={evaluationGroup ? evaluationGroup.name : 'Select group'} selectedOption={(value) => setEvaluationGroup(value)} dropdownClasses="my-2" />
44+
<span className="mr-3">Threshold</span>
45+
<input className="bg-white text-gray-700 text-sm font-semibold px-2 py-2 rounded-md border border-gray-300 focus:outline-none focus:ring-2 focus:ring-gray-300 focus:ring-offset-2 focus:ring-offset-gray-100" type="number" value={threshold} onChange={(e) => setThreshold(parseFloat(e.target.value))} />
46+
</div>
47+
</div>
48+
</Modal>
49+
}

0 commit comments

Comments
 (0)