Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
5 changes: 4 additions & 1 deletion src/applications/qa/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,10 @@ function QuestionAnswering({ application, showSettings }) {

{showSettings ? (
<div className="application__settings">
<Retrievers disableParent={setDisabled}></Retrievers>
<Retrievers
disableParent={setDisabled}
defaultCheckpoint={selectedCollection?.checkpoint}
></Retrievers>
<Collections
retriever={retrievers.selectedRetriever}
selectedCollection={selectedCollection}
Expand Down
84 changes: 83 additions & 1 deletion src/components/retrievers/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ import { addNotification } from "../notifications/notificationsSlice";

import "./styles.scss";

function Retrievers({ disableParent }) {
function Retrievers({ disableParent, defaultCheckpoint }) {
// Redux connectivity
const retrievers = useSelector((state) => state.retrievers);
const dispatch = useDispatch();
Expand Down Expand Up @@ -131,6 +131,51 @@ function Retrievers({ disableParent }) {
}
}, [retrievers.retrievers, dispatch]);

// Determines if defaultCheckpoint is present as an option in the checkpoint parameter in the selected retriever, if any
const isDefaultCheckpointOptionPresent = () => {
let ret = !!defaultCheckpoint;
ret &&= Array.isArray(retrievers?.selectedRetriever?.parameters);
if (ret) {
let parameter = retrievers.selectedRetriever.parameters.find(parameter => parameter.parameter_id === 'checkpoint')
ret = !!parameter;
ret &&= Array.isArray(parameter.options);
ret &&= parameter.options.includes(defaultCheckpoint);
}
return ret;
};

const isCheckpointParamSet = () => {
let ret = Array.isArray(retrievers?.selectedRetriever?.parameters);
if (ret) {
let parameter = retrievers.selectedRetriever.parameters.find(parameter => parameter.parameter_id === 'checkpoint');
ret = !!parameter;
ret &&= parameter.value !== null;
}
return ret;
};

// Set defaultCheckpoint as default selected checkpoint, if available
useEffect(() => {
// Dispatch updateParameterValue event
if (isDefaultCheckpointOptionPresent() && !isCheckpointParamSet()) {
dispatch(
updateParameterValue({
parameter_id: 'checkpoint',
value: defaultCheckpoint,
})
);
}
}, [retrievers.retrievers, dispatch, defaultCheckpoint]);

const getParameterDefaultOption = (parameter, placeholderId) => {
let option = parameter.value || placeholderId;
if (parameter.parameter_id === 'checkpoint' && isDefaultCheckpointOptionPresent()) {
// Custom behavior on default checkpoint
option = defaultCheckpoint;
}
return option;
}

return (
<React.Fragment>
<div className="settings__item">
Expand Down Expand Up @@ -308,6 +353,42 @@ function Retrievers({ disableParent }) {
);
})}
</Select>
) : !_.isNil(parameter.options) &&
!_.isEmpty(parameter.options) ? (
<Select
id={"parameter-" + parameter.parameter_id}
labelText={parameter.name}
value={getParameterDefaultOption(parameter, "placeholder-item")}
onChange={(event) => {
dispatch(
updateParameterValue({
parameter_id: parameter.parameter_id,
value: event.target.value,
})
);
}}
>
<SelectItem
disabled
hidden
value="placeholder-item"
text="Choose an option"
/>
{parameter.options.map((option, index) => {
return (
<SelectItem
key={
"parameter-" +
parameter.parameter_id +
"__option-" +
index
}
value={option}
text={option}
/>
);
})}
</Select>
) : (
<TextInput
id={"parameter-" + parameter.parameter_id}
Expand Down Expand Up @@ -338,6 +419,7 @@ function Retrievers({ disableParent }) {

Retrievers.propTypes = {
disableParent: PropTypes.func,
defaultCheckpoint: PropTypes.string,
};

export default Retrievers;