mirror of
https://github.com/danswer-ai/danswer.git
synced 2025-03-26 17:51:54 +01:00
allow users to deselect reranking (#2243)
This commit is contained in:
parent
4181124e7a
commit
df31cac1f1
@ -25,7 +25,6 @@ const AdvancedFormPage = forwardRef<FormikProps<any>, AdvancedFormPageProps>(
|
||||
<Form>
|
||||
<div key="prune_freq">
|
||||
<NumberInput
|
||||
showNeverIfZero
|
||||
description={`
|
||||
Checks all documents against the source to delete those that no longer exist.
|
||||
Note: This process checks every document, so be cautious when increasing frequency.
|
||||
@ -42,7 +41,6 @@ const AdvancedFormPage = forwardRef<FormikProps<any>, AdvancedFormPageProps>(
|
||||
<NumberInput
|
||||
description="This is how frequently we pull new documents from the source (in minutes). If you input 0, we will never pull new documents for this connector."
|
||||
value={refreshFreq}
|
||||
showNeverIfZero
|
||||
label="Refresh Frequency (minutes)"
|
||||
name="refreshFreq"
|
||||
/>
|
||||
|
@ -86,7 +86,6 @@ const DynamicConnectionForm: FC<DynamicConnectionFormProps> = ({
|
||||
optional={field.optional}
|
||||
description={field.description}
|
||||
name={field.name}
|
||||
showNeverIfZero
|
||||
/>
|
||||
) : field.type === "checkbox" ? (
|
||||
<AdminBooleanFormField
|
||||
|
@ -37,211 +37,237 @@ const RerankingDetailsForm = forwardRef<
|
||||
const [isApiKeyModalOpen, setIsApiKeyModalOpen] = useState(false);
|
||||
|
||||
return (
|
||||
<div className="p-2 rounded-lg max-w-4xl mx-auto">
|
||||
<h2 className="text-2xl font-bold mb-4 text-text-800">
|
||||
Post-processing
|
||||
</h2>
|
||||
<div className="text-sm mr-auto mb-6 divide-x-2 flex">
|
||||
{originalRerankingDetails.rerank_model_name && (
|
||||
<button
|
||||
onClick={() => setModelTab(null)}
|
||||
className={`mx-2 p-2 font-bold ${
|
||||
!modelTab
|
||||
? "rounded bg-background-900 text-text-100 underline"
|
||||
: " hover:underline bg-background-100"
|
||||
}`}
|
||||
>
|
||||
Current
|
||||
</button>
|
||||
)}
|
||||
<div
|
||||
className={`${originalRerankingDetails.rerank_model_name && "px-2 ml-2"}`}
|
||||
>
|
||||
<button
|
||||
onClick={() => setModelTab("cloud")}
|
||||
className={`mr-2 p-2 font-bold ${
|
||||
modelTab == "cloud"
|
||||
? "rounded bg-background-900 text-text-100 underline"
|
||||
: " hover:underline bg-background-100"
|
||||
}`}
|
||||
>
|
||||
Cloud-based
|
||||
</button>
|
||||
</div>
|
||||
<Formik
|
||||
innerRef={ref}
|
||||
initialValues={currentRerankingDetails}
|
||||
validationSchema={Yup.object().shape({
|
||||
rerank_model_name: Yup.string().nullable(),
|
||||
rerank_provider_type: Yup.mixed<RerankerProvider>()
|
||||
.nullable()
|
||||
.oneOf(Object.values(RerankerProvider))
|
||||
.optional(),
|
||||
api_key: Yup.string().nullable(),
|
||||
num_rerank: Yup.number().min(1, "Must be at least 1"),
|
||||
})}
|
||||
onSubmit={async (_, { setSubmitting }) => {
|
||||
setSubmitting(false);
|
||||
}}
|
||||
enableReinitialize={true}
|
||||
>
|
||||
{({ values, setFieldValue }) => {
|
||||
const resetRerankingValues = () => {
|
||||
setRerankingDetails({
|
||||
...values,
|
||||
rerank_provider_type: null!,
|
||||
rerank_model_name: null,
|
||||
});
|
||||
setFieldValue("rerank_provider_type", null);
|
||||
setFieldValue("rerank_model_name", null);
|
||||
setFieldValue("rerank_api_key", null);
|
||||
};
|
||||
|
||||
<div className="px-2">
|
||||
<button
|
||||
onClick={() => setModelTab("open")}
|
||||
className={` mx-2 p-2 font-bold ${
|
||||
modelTab == "open"
|
||||
? "rounded bg-background-900 text-text-100 underline"
|
||||
: "hover:underline bg-background-100"
|
||||
}`}
|
||||
>
|
||||
Self-hosted
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
return (
|
||||
<div className="p-2 rounded-lg max-w-4xl mx-auto">
|
||||
<h2 className="text-2xl font-bold mb-4 text-text-800">
|
||||
Post-processing
|
||||
</h2>
|
||||
<div className="text-sm mr-auto mb-6 divide-x-2 flex">
|
||||
{originalRerankingDetails.rerank_model_name && (
|
||||
<button
|
||||
onClick={() => setModelTab(null)}
|
||||
className={`mx-2 p-2 font-bold ${
|
||||
!modelTab
|
||||
? "rounded bg-background-900 text-text-100 underline"
|
||||
: " hover:underline bg-background-100"
|
||||
}`}
|
||||
>
|
||||
Current
|
||||
</button>
|
||||
)}
|
||||
<div
|
||||
className={`${originalRerankingDetails.rerank_model_name && "px-2 ml-2"}`}
|
||||
>
|
||||
<button
|
||||
onClick={() => setModelTab("cloud")}
|
||||
className={`mr-2 p-2 font-bold ${
|
||||
modelTab == "cloud"
|
||||
? "rounded bg-background-900 text-text-100 underline"
|
||||
: " hover:underline bg-background-100"
|
||||
}`}
|
||||
>
|
||||
Cloud-based
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<Formik
|
||||
innerRef={ref}
|
||||
initialValues={currentRerankingDetails}
|
||||
validationSchema={Yup.object().shape({
|
||||
rerank_model_name: Yup.string().nullable(),
|
||||
provider_type: Yup.mixed<RerankerProvider>()
|
||||
.nullable()
|
||||
.oneOf(Object.values(RerankerProvider))
|
||||
.optional(),
|
||||
rerank_api_key: Yup.string().nullable(),
|
||||
num_rerank: Yup.number().min(1, "Must be at least 1"),
|
||||
})}
|
||||
onSubmit={async (_, { setSubmitting }) => {
|
||||
setSubmitting(false);
|
||||
}}
|
||||
enableReinitialize={true}
|
||||
>
|
||||
{({ values, setFieldValue }) => (
|
||||
<Form>
|
||||
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
|
||||
{(modelTab
|
||||
? rerankingModels.filter(
|
||||
(model) => model.cloud == (modelTab == "cloud")
|
||||
)
|
||||
: rerankingModels.filter(
|
||||
(modelCard) =>
|
||||
modelCard.modelName ==
|
||||
originalRerankingDetails.rerank_model_name
|
||||
)
|
||||
).map((card) => {
|
||||
const isSelected =
|
||||
values.rerank_provider_type === card.rerank_provider_type &&
|
||||
values.rerank_model_name === card.modelName;
|
||||
return (
|
||||
<div
|
||||
key={`${card.rerank_provider_type}-${card.modelName}`}
|
||||
className={`p-4 border rounded-lg cursor-pointer transition-all duration-200 ${
|
||||
isSelected
|
||||
? "border-blue-500 bg-blue-50 shadow-md"
|
||||
: "border-gray-200 hover:border-blue-300 hover:shadow-sm"
|
||||
}`}
|
||||
onClick={() => {
|
||||
if (card.rerank_provider_type) {
|
||||
setIsApiKeyModalOpen(true);
|
||||
}
|
||||
setRerankingDetails({
|
||||
...values,
|
||||
rerank_provider_type: card.rerank_provider_type!,
|
||||
rerank_model_name: card.modelName,
|
||||
rerank_api_key: null,
|
||||
});
|
||||
setFieldValue(
|
||||
"rerank_provider_type",
|
||||
card.rerank_provider_type
|
||||
);
|
||||
setFieldValue("rerank_model_name", card.modelName);
|
||||
}}
|
||||
<div className="px-2">
|
||||
<button
|
||||
onClick={() => setModelTab("open")}
|
||||
className={` mx-2 p-2 font-bold ${
|
||||
modelTab == "open"
|
||||
? "rounded bg-background-900 text-text-100 underline"
|
||||
: "hover:underline bg-background-100"
|
||||
}`}
|
||||
>
|
||||
Self-hosted
|
||||
</button>
|
||||
</div>
|
||||
{values.rerank_model_name && (
|
||||
<div className="px-2">
|
||||
<button
|
||||
onClick={() => resetRerankingValues()}
|
||||
className="mx-2 p-2 font-bold rounded bg-background-100 text-text-900 hover:underline"
|
||||
>
|
||||
<div className="flex items-center justify-between mb-3">
|
||||
<div className="flex items-center">
|
||||
{card.rerank_provider_type ===
|
||||
RerankerProvider.COHERE ? (
|
||||
<CohereIcon size={24} className="mr-2" />
|
||||
) : (
|
||||
<MixedBreadIcon size={24} className="mr-2" />
|
||||
)}
|
||||
<h3 className="font-bold text-lg">
|
||||
{card.displayName}
|
||||
</h3>
|
||||
</div>
|
||||
{card.link && (
|
||||
<a
|
||||
href={card.link}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
onClick={(e) => e.stopPropagation()}
|
||||
className="text-blue-500 hover:text-blue-700 transition-colors duration-200"
|
||||
>
|
||||
<FiExternalLink size={18} />
|
||||
</a>
|
||||
)}
|
||||
</div>
|
||||
<p className="text-sm text-gray-600 mb-2">
|
||||
{card.description}
|
||||
</p>
|
||||
<div className="text-xs text-gray-500">
|
||||
{card.cloud ? "Cloud-based" : "Self-hosted"}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
})}
|
||||
Remove Reranking
|
||||
</button>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
|
||||
{isApiKeyModalOpen && (
|
||||
<Modal
|
||||
onOutsideClick={() => {
|
||||
Object.keys(originalRerankingDetails).forEach((key) => {
|
||||
setFieldValue(
|
||||
key,
|
||||
originalRerankingDetails[key as keyof RerankingDetails]
|
||||
);
|
||||
});
|
||||
|
||||
setIsApiKeyModalOpen(false);
|
||||
}}
|
||||
width="w-[800px]"
|
||||
title="API Key Configuration"
|
||||
>
|
||||
<div className="w-full px-4">
|
||||
<TextFormField
|
||||
placeholder={values.rerank_api_key || undefined}
|
||||
onChange={(e: React.ChangeEvent<HTMLInputElement>) => {
|
||||
const value = e.target.value;
|
||||
setRerankingDetails({
|
||||
...values,
|
||||
rerank_api_key: value,
|
||||
});
|
||||
setFieldValue("rerank_api_key", value);
|
||||
}}
|
||||
type="password"
|
||||
label="Cohere API Key"
|
||||
name="rerank_api_key"
|
||||
/>
|
||||
<div className="mt-4 flex justify-between">
|
||||
<Button
|
||||
<Form>
|
||||
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
|
||||
{(modelTab
|
||||
? rerankingModels.filter(
|
||||
(model) => model.cloud == (modelTab == "cloud")
|
||||
)
|
||||
: rerankingModels.filter(
|
||||
(modelCard) =>
|
||||
modelCard.modelName ==
|
||||
originalRerankingDetails.rerank_model_name
|
||||
)
|
||||
).map((card) => {
|
||||
const isSelected =
|
||||
values.rerank_provider_type ===
|
||||
card.rerank_provider_type &&
|
||||
values.rerank_model_name === card.modelName;
|
||||
return (
|
||||
<div
|
||||
key={`${card.rerank_provider_type}-${card.modelName}`}
|
||||
className={`p-4 border rounded-lg cursor-pointer transition-all duration-200 ${
|
||||
isSelected
|
||||
? "border-blue-500 bg-blue-50 shadow-md"
|
||||
: "border-gray-200 hover:border-blue-300 hover:shadow-sm"
|
||||
}`}
|
||||
onClick={() => {
|
||||
Object.keys(originalRerankingDetails).forEach(
|
||||
(key) => {
|
||||
setFieldValue(
|
||||
key,
|
||||
originalRerankingDetails[
|
||||
key as keyof RerankingDetails
|
||||
]
|
||||
);
|
||||
}
|
||||
if (card.rerank_provider_type) {
|
||||
setIsApiKeyModalOpen(true);
|
||||
}
|
||||
setRerankingDetails({
|
||||
...values,
|
||||
rerank_provider_type: card.rerank_provider_type!,
|
||||
rerank_model_name: card.modelName,
|
||||
rerank_api_key: null,
|
||||
});
|
||||
setFieldValue(
|
||||
"rerank_provider_type",
|
||||
card.rerank_provider_type
|
||||
);
|
||||
|
||||
setIsApiKeyModalOpen(false);
|
||||
setFieldValue("rerank_model_name", card.modelName);
|
||||
}}
|
||||
color="red"
|
||||
size="xs"
|
||||
>
|
||||
Abandon
|
||||
</Button>
|
||||
<Button
|
||||
onClick={() => setIsApiKeyModalOpen(false)}
|
||||
color="blue"
|
||||
size="xs"
|
||||
>
|
||||
Update
|
||||
</Button>
|
||||
<div className="flex items-center justify-between mb-3">
|
||||
<div className="flex items-center">
|
||||
{card.rerank_provider_type ===
|
||||
RerankerProvider.COHERE ? (
|
||||
<CohereIcon size={24} className="mr-2" />
|
||||
) : (
|
||||
<MixedBreadIcon size={24} className="mr-2" />
|
||||
)}
|
||||
<h3 className="font-bold text-lg">
|
||||
{card.displayName}
|
||||
</h3>
|
||||
</div>
|
||||
{card.link && (
|
||||
<a
|
||||
href={card.link}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
onClick={(e) => e.stopPropagation()}
|
||||
className="text-blue-500 hover:text-blue-700 transition-colors duration-200"
|
||||
>
|
||||
<FiExternalLink size={18} />
|
||||
</a>
|
||||
)}
|
||||
</div>
|
||||
<p className="text-sm text-gray-600 mb-2">
|
||||
{card.description}
|
||||
</p>
|
||||
<div className="text-xs text-gray-500">
|
||||
{card.cloud ? "Cloud-based" : "Self-hosted"}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
|
||||
{isApiKeyModalOpen && (
|
||||
<Modal
|
||||
onOutsideClick={() => {
|
||||
Object.keys(originalRerankingDetails).forEach((key) => {
|
||||
setFieldValue(
|
||||
key,
|
||||
originalRerankingDetails[
|
||||
key as keyof RerankingDetails
|
||||
]
|
||||
);
|
||||
});
|
||||
|
||||
setIsApiKeyModalOpen(false);
|
||||
}}
|
||||
width="w-[800px]"
|
||||
title="API Key Configuration"
|
||||
>
|
||||
<div className="w-full px-4">
|
||||
<TextFormField
|
||||
placeholder={values.rerank_api_key || undefined}
|
||||
onChange={(e: React.ChangeEvent<HTMLInputElement>) => {
|
||||
const value = e.target.value;
|
||||
setRerankingDetails({
|
||||
...values,
|
||||
rerank_api_key: value,
|
||||
});
|
||||
setFieldValue("api_key", value);
|
||||
}}
|
||||
type="password"
|
||||
label="Cohere API Key"
|
||||
name="api_key"
|
||||
/>
|
||||
<div className="mt-4 flex justify-between">
|
||||
<Button
|
||||
onClick={() => {
|
||||
Object.keys(originalRerankingDetails).forEach(
|
||||
(key) => {
|
||||
setFieldValue(
|
||||
key,
|
||||
originalRerankingDetails[
|
||||
key as keyof RerankingDetails
|
||||
]
|
||||
);
|
||||
}
|
||||
);
|
||||
|
||||
setIsApiKeyModalOpen(false);
|
||||
}}
|
||||
color="red"
|
||||
size="xs"
|
||||
>
|
||||
Abandon
|
||||
</Button>
|
||||
<Button
|
||||
onClick={() => setIsApiKeyModalOpen(false)}
|
||||
color="blue"
|
||||
size="xs"
|
||||
>
|
||||
Update
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</Modal>
|
||||
)}
|
||||
</Form>
|
||||
)}
|
||||
</Formik>
|
||||
</div>
|
||||
</Modal>
|
||||
)}
|
||||
</Form>
|
||||
</div>
|
||||
);
|
||||
}}
|
||||
</Formik>
|
||||
);
|
||||
}
|
||||
);
|
||||
|
@ -173,7 +173,7 @@ export function ProviderCreationModal({
|
||||
</a>
|
||||
</Text>
|
||||
|
||||
<div className="flex flex-col gap-y-2">
|
||||
<div className="flex w-full flex-col gap-y-2">
|
||||
{useFileUpload ? (
|
||||
<>
|
||||
<Label>Upload JSON File</Label>
|
||||
|
@ -415,10 +415,10 @@ export default function EmbeddingForm() {
|
||||
<>
|
||||
<Card>
|
||||
<AdvancedEmbeddingFormPage
|
||||
updateNumRerank={(value: number) =>
|
||||
updateNumRerank={(newNumRerank: number) =>
|
||||
setRerankingDetails({
|
||||
...rerankingDetails,
|
||||
num_rerank: value,
|
||||
num_rerank: newNumRerank,
|
||||
})
|
||||
}
|
||||
numRerank={rerankingDetails.num_rerank}
|
||||
|
Loading…
x
Reference in New Issue
Block a user